国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STC15F100E單片機(jī)模擬串口

這篇具有很好參考價(jià)值的文章主要介紹了STC15F100E單片機(jī)模擬串口。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、芯片簡介

STC15F100系列單片機(jī)是宏晶科技生產(chǎn)的單時(shí)鐘/機(jī)器周期(1T)的單片機(jī),新一代8051單片機(jī),指令代碼完全兼容傳統(tǒng)8051,但是速度快6-12倍。
內(nèi)部集成R/C時(shí)鐘,5MHz~35MHz寬范圍可設(shè)置,可以省掉外部晶振。
內(nèi)部集成復(fù)位電路,可省掉外部復(fù)位電路。
6個(gè)通用I/O口,支持四種模式:準(zhǔn)雙向口/弱上拉、強(qiáng)推挽/強(qiáng)上拉、輸入/高阻、開漏
芯片管腳圖
stc15f104e 模擬串口,嵌入式,單片機(jī),嵌入式硬件

二、開發(fā)環(huán)境

在Keil中添加STC芯片

  1. 下載STC-ISP軟件
    https://www.stcmcudata.com/

  2. 打開STC-ISP軟件,選擇右側(cè)"Keil仿真設(shè)置"欄
    stc15f104e 模擬串口,嵌入式,單片機(jī),嵌入式硬件

  3. 選擇"添加型號(hào)和頭文件到Keil中,添加STC仿真器驅(qū)動(dòng)到Keil中", 選擇Keil C51的安裝目錄
    例如:D:/software/keil4

  4. 系統(tǒng)會(huì)自動(dòng)添加"STC"文件夾( C51/INC/ )

  5. Keil新建工程選擇芯片型號(hào)時(shí)就會(huì)有新添加的STC芯片
    stc15f104e 模擬串口,嵌入式,單片機(jī),嵌入式硬件

三、軟件模擬串口

STC15F100E芯片內(nèi)部是不直接支持串口通信的,但是可以用I/O口+定時(shí)器來實(shí)現(xiàn)串口功能。
這里實(shí)現(xiàn)的是半雙工通信
系統(tǒng)工作時(shí)鐘為5.5296Mhz,波特率為9600bps。
引腳說明

  • P3.0為Uart的RX引腳
  • P3.1為Uart的TX引腳

原理說明

  • 發(fā)送原理
    stc15f104e 模擬串口,嵌入式,單片機(jī),嵌入式硬件
    設(shè)置定時(shí)器的定時(shí)時(shí)間為一個(gè)bit的的發(fā)送時(shí)間,在定時(shí)器中斷服務(wù)函數(shù)中,設(shè)置Uart_TX引腳的值。
  • 接收原理
    stc15f104e 模擬串口,嵌入式,單片機(jī),嵌入式硬件
    將Uart_RX引腳設(shè)置為外部中斷(下降沿觸發(fā))模式,捕獲Uart接收的開始信號(hào)。
    設(shè)置第一次定時(shí)時(shí)間為 3 2 \frac{3}{2} 23?個(gè)bit持續(xù)的時(shí)間,其余的定時(shí)時(shí)間為一個(gè)bit的持續(xù)時(shí)間,在定時(shí)器中斷服務(wù)函數(shù)中對Uart_RX引腳進(jìn)行采樣。

程序文章來源地址http://www.zghlxwxcb.cn/news/detail-829682.html

  • uart.c
/*
module name :  uart
author      :  wkk
create time :  2023/12/5
*/

#include "uart.h"
/*
BaudRate -> timer
SysClk   : 5.5296Mhz
Baudrate : 115200
5_529_600 / 115200 = 48           ( x -> error )
5_529_600 / 9600   = 576
65536 - 48    = 65488  0xffd0
65536 - 48-24 = 65464  0xffb8

65536 - 576     = 64960  0xfdc0
65536 - 576-288 = 64672  0xfca0
*/

// define type u8
typedef unsigned char  u8;
// ext 2 3 4 register
// 7  6     5    4  3 2   1      0
// - ext4 ext3 ext2 - - tlclkO t0clkO
sfr int_clkO = 0x8f;

// 1T mode or /12
//   7     6   5  4    3     2   1 0
// t0x12 t1x12 - T2R T2_C/T T2x12 - -
sfr auxr = 0x8e;

// IE2
//  7  6   5   4   3   2   1    9
//  - ET4 ET3 ES4 ES3 ET2 ESP1 ES2
sfr ie2 = 0xaf;

// timer 
sfr TH2 = 0xd6;
sfr TL2 = 0xd7;

//define uart tx/rx port
sbit uart_rx = P3^0;       // P3.0 rx
sbit uart_tx = P3^1;       // P3.1 tx

u8 TEND,TING,tcnt,tbuf;
u8 REND,RING,rcnt,rbuf;

void Enable_Ext4(){
    int_clkO = int_clkO | 0x40;
}

void Disable_Ext4(){
    int_clkO = int_clkO & 0xbf;
}

void Timer2_config(){
    // 1T mode
    auxr = auxr & 0xf0;
    auxr = auxr | 0x04;
    // enable timer1 interrupt
    ie2 = ie2 | 0x04;
    // need to enable EA
}

void Timer2_Disable(){
    auxr = auxr & 0xef;
}

void Timer2_Enable(u8 th1,u8 tl1){
    TH2 = th1;
    TL2 = tl1;
    auxr = auxr | 0x10;
}

void Uart_Init(){
    //P3.0 work in interrupt mode ( int4 falling )
    Enable_Ext4();  
    // timer2 config 
    Timer2_config();
    Timer2_Disable();
    // need to enable EA
    
    TEND = 1;
    REND = 0;
    TING = 0;
    RING = 0;
    uart_tx = 1;
}

void Ext4_Interrupt() interrupt 16 {
    RING = 1;
    REND = 0;
    rcnt = 0;
    rbuf = 0;
    Timer2_Enable(0xfc,0xa0);
    Disable_Ext4();
}

void Uart_SendByte( u8 tx_data ) {
    tbuf = tx_data;
    tcnt = 0;
    TEND = 0;
    TING = 1;
    uart_tx = 0;
    Timer2_Enable(0xfd,0xc0);
    while( TEND != 1); // wait for tx complete!!
}

void Uart_LoopTest( ){
    if( TEND && REND == 1 ) {
        Uart_SendByte(rbuf);
        REND = 0;        
    }
}

void Timer2_Interrupt() interrupt 12  {
    if( RING ) {
        if( rcnt == 0 ) {
            Timer2_Disable();
            rbuf = rbuf >> 1;
            if( uart_rx ) rbuf = rbuf | 0x80;  
            Timer2_Enable(0xfd,0xc0);           
        }else if( rcnt == 8 ){
            Timer2_Disable();
            Enable_Ext4();
            RING = 0;
            REND = 1;
            // recv done !!!        
        }else {
            rbuf = rbuf >> 1;
            if( uart_rx ) rbuf = rbuf | 0x80;  
        } 
        rcnt ++;
    }else if( TING ) {
        if( tcnt == 8) {
            uart_tx = 1;
        }else if( tcnt == 9) {
            Timer2_Disable();
            TING = 0;
            TEND = 1;
            // tx done !!!   
        }else{
            uart_tx = tbuf & 0x01;
            tbuf = tbuf >> 1;
        }
        tcnt ++;
    }else{
        // other things
    }
}
  • uart.h
#ifndef _UART_H_
#define _UART_H_
#include <reg51.h>

void Uart_Init(void);
void Uart_SendByte( unsigned char tx_data );
void Uart_LoopTest( void );
#endif
  • main.c
#include <reg51.h>
#include "uart.h"

void Sys_Init(){
    Uart_Init();
    EA = 1;
}

void main(){
    Sys_Init();
    while(1) {
        //Uart_LoopTest();
    }
}

參考

  • 定時(shí)器相關(guān)
    https://blog.csdn.net/weixin_52853526/article/details/125180813
  • 模擬串口程序
    https://www.cnblogs.com/zjutlitao/archive/2018/03/31/8681049.html
  • 右移/左移和標(biāo)志位CY的關(guān)系
    stc15f104e 模擬串口,嵌入式,單片機(jī),嵌入式硬件

到了這里,關(guān)于STC15F100E單片機(jī)模擬串口的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【STC15單片機(jī)】簡單的矩陣鍵盤代碼

    【STC15單片機(jī)】簡單的矩陣鍵盤代碼

    單片機(jī)型號(hào)說明:IAP15F2K61S2 新建工程時(shí)單片機(jī)型號(hào)選擇 STC15F2K60S2 51單片機(jī)矩陣鍵盤代碼 本程序燒寫到51單片機(jī)應(yīng)該是正常使用的,手頭沒有51開發(fā)板了,暫時(shí)沒測試 這個(gè)程序燒寫到15單片機(jī),前兩列按鍵不能正常使用 只需要在判斷第一列按鍵那部分程序,前面加上P42 = 0;

    2024年02月05日
    瀏覽(25)
  • STC15系列單片機(jī)學(xué)習(xí)4:串口通訊

    STC15系列單片機(jī)學(xué)習(xí)4:串口通訊

    在使用單片機(jī)的串口前,得先知道所使用的單片機(jī)有幾個(gè)串口,再結(jié)合你的硬件電路圖來使用哪個(gè)串口。 以下是STC15各系列單片機(jī)的串口數(shù)量,STC15W4K32S4系列有4個(gè)串口 工作模式0:同步移位寄存器(官方建議初學(xué)者不學(xué)) 工作模式1:8位串口,波特率可變 工作模式2:9位串口

    2024年04月13日
    瀏覽(28)
  • STC15系列單片機(jī)學(xué)習(xí)6:外部中斷

    STC15系列單片機(jī)學(xué)習(xí)6:外部中斷

    外部中斷,就是通過單片機(jī)IO引腳電平的變化觸發(fā)的中斷。 STC15系列單片機(jī)的外部中斷源一共有5個(gè),分別是外部中斷0(INT0)、外部中斷1(INT1)、外部中斷2(INT2)、外部中斷3(INT3)、外部中斷4(INT4);當(dāng)然不是所有的STC15系列單片機(jī)都有著5個(gè)外部中斷。 中斷源 觸發(fā)行為

    2024年03月12日
    瀏覽(78)
  • STC15W104 8腳單片機(jī)串口下載程序

    STC15W104 8腳單片機(jī)串口下載程序

    單片機(jī)串口下載是一種常見的單片機(jī)程序下載方式,它通過串口線連接單片機(jī)的串口引腳和電腦的串口接口實(shí)現(xiàn)。下面是單片機(jī)串口下載的基本原理和操作方法: 確定下載模式:大多數(shù)單片機(jī)芯片都支持串口下載模式,需要在程序中設(shè)置下載模式。 連接串口:使用串口線連

    2024年02月13日
    瀏覽(24)
  • 基于STC15單片機(jī)的智能密碼鎖(矩陣按鍵輸入)設(shè)計(jì)

    基于STC15單片機(jī)的智能密碼鎖(矩陣按鍵輸入)設(shè)計(jì)

    目錄 一、項(xiàng)目背景 二、功能需求 ?三、功能組成 四、總結(jié) ????????智能門鎖是一種基于現(xiàn)代智能化技術(shù),與傳統(tǒng)門鎖進(jìn)行比較的創(chuàng)新型的電子門鎖產(chǎn)品。傳統(tǒng)門鎖通常采用鑰匙旋轉(zhuǎn)來開啟門鎖,但傳統(tǒng)門鎖存在鑰匙遺失、易被復(fù)制等問題,特別是具有主動(dòng)性質(zhì)的人員如

    2024年02月03日
    瀏覽(42)
  • 微機(jī)課設(shè) | 基于STC15單片機(jī)的簡易數(shù)字密碼鎖設(shè)計(jì)

    微機(jī)課設(shè) | 基于STC15單片機(jī)的簡易數(shù)字密碼鎖設(shè)計(jì)

    在日常的生活和工作中,住宅與部門的安全防范、單位的文件檔案、財(cái)務(wù)報(bào)表以及一些個(gè)人資料的保存多以加鎖的辦法來解決。若使用傳統(tǒng)的機(jī)械式鑰匙開鎖,人們常需攜帶多把鑰匙,?使用極不方便,?且鑰匙丟失后安全性即大打折扣。在安全技術(shù)防范領(lǐng)域,具有防盜報(bào)警功能的

    2024年02月04日
    瀏覽(25)
  • STC15系列單片機(jī):定時(shí)器/計(jì)數(shù)器16位自動(dòng)重裝載模式

    STC15系列單片機(jī):定時(shí)器/計(jì)數(shù)器16位自動(dòng)重裝載模式

    STC15系列單片機(jī)內(nèi)部有5個(gè)16位定時(shí)器/計(jì)數(shù)器,分別是T0、T1、T2、T3、T4。 定時(shí)器與計(jì)數(shù)器,東西還是同一個(gè)東西,只是用法和功效不一樣,就好比黃瓜,既可以內(nèi)服也可以外敷,黃瓜還是那個(gè)黃瓜,作用就不一樣了。 就拿T0來說,T0用于定時(shí),那T0就是定時(shí)器,如果T0用于計(jì)數(shù)

    2024年01月25日
    瀏覽(23)
  • 53、基于STC15W單片機(jī)的溫度計(jì)(DS18B20)(Proteus仿真+程序)

    53、基于STC15W單片機(jī)的溫度計(jì)(DS18B20)(Proteus仿真+程序)

    ? ? ? 本設(shè)計(jì)由STC15W4K32S4單片機(jī)+DS18B20溫度傳感器+1602液晶顯示模塊+串口模塊組成。 1、主控制器是STC15W4K32S4單片機(jī) 2、DS18B20溫度傳感器采集溫度,精度0.1攝氏度 3、1602液晶顯示溫度。 4、測溫范圍-55~110攝氏度,誤差±0.1℃ 5、溫度值發(fā)送至串口助手顯示。 Proteus軟件: Proteus

    2024年02月03日
    瀏覽(30)
  • 51單片機(jī)STC15W4K56S4控制步進(jìn)電機(jī)28BYJ-48正反轉(zhuǎn)

    51單片機(jī)STC15W4K56S4控制步進(jìn)電機(jī)28BYJ-48正反轉(zhuǎn)

    步進(jìn)電機(jī)28BYJ-48(12V)介紹: ? ? ? 首先,我們看下步進(jìn)電機(jī)28BYJ-48(12V)外觀圖,如下: ? ? ? ? 28BYJ-48(12V)含義如下:28表示電機(jī)直徑28毫米,B表示電機(jī)?,Y表示永磁,J表示帶減速箱,48表示四相八拍。 ? ? ? 下面解釋下“4 相永磁式”的概念,28BYJ-48 的構(gòu)造如下圖所示

    2023年04月17日
    瀏覽(25)
  • 為STC32單片機(jī)搭建開發(fā)環(huán)境

    為STC32單片機(jī)搭建開發(fā)環(huán)境

    ????????自去年起,STC推出了51內(nèi)核的32位單片機(jī),但是單純的51內(nèi)核已經(jīng)駕馭不了32位總線了。因此STC32單片機(jī)才用的是251內(nèi)核,多了一個(gè)2,使得底層指令從111條擴(kuò)充到了268條,這或許意味著以后的STC單片機(jī)會(huì)有更廣大的想象空間? ? ? ? ? 也因此,STC32的開發(fā)環(huán)境與傳統(tǒng)

    2024年02月08日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包