久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11391|回復: 2
打印 上一主題 下一主題
收起左側

基于STCSTC15F2K60S2單片機的串口通訊

[復制鏈接]
跳轉到指定樓層
樓主
ID:444712 發表于 2018-12-18 16:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
第一章 STCSTC15F2K60S2的簡介
1.1 STC15F2K60S的各引腳簡介
(1)電源引腳
   Vcc:一般接電源的+5V。具體的電壓幅度應參考單片機的手冊。
   GND:接電源地。
(2)外接晶體引腳
                        
     芯片內部一個反相放大器的輸入端和輸出端。通常用于連接晶體振蕩器。
(3)控制和復位引腳
                        
     功能:當訪問外部存儲器或者外部擴展的并行I/O口時,ALE(允許地址鎖
     存)的輸出用于鎖存地址的低位字節。
    RST(與P5.4復用):當振蕩器運行時,在此引腳上出現兩個機器周期的
     高電平將使單片機復位。如果需要單片機接上電源就可以復位,則需要使
     用上電復位電路。
(4)I/O口的復用功能   
    P0口:
       a.用作數據總線(D7~D0)或者地址總線低8位(A7~A0)。
      b.用作普通I/O。   
    P1口:
      a.用作普通I/O。
      b.復用為ADC轉換輸入、捕獲/比較/脈寬調制、SPI通信線、第二串口
        或者第二時鐘輸出,如表所示。
      
      P2口:
       a:用作通用I/O。
       b:用作地址總線的高8位輸出。
       c:用于SPI和捕獲/比較/脈寬調制的備用切換端口。
     
     P3口:
       a:用作通用I/O。
       b:可復用為外部中斷輸入、計數器輸入、時鐘輸出、第一串口和外部總
         線的讀/寫控制,如表所示。
            
      P4口:
        a:用作通用I/O。
        b:某些口線具有復用功能,可配置為SPI通信線、捕捉/比較/脈寬調
           制、第二串口線等。
         
       P5口:
         a:P5.4/RST(復位腳)/MCLKO(內部R/C振蕩時鐘輸出;
         b:輸出的頻率可為MCLK/1或MCLK/2)/SS_3(SPI接口的從機選擇信
           號備用切換引腳)。
         c:該引腳默認為I/O口,可以通過ISP編程將其設置為RST(復位)
           引腳。
第二章 單片機通過USB與PC機的通信設計
2.1設計方案選擇
由于實際應用中單片機在數據處理能力、人機交互等方面往往不能滿足要求, 因而通常用PC來彌補單片機的這些不足。例如,在工程應用中,常常由一臺PC機和一臺單片機構成主從式計算機測控系統。在這樣的系統中,以單片機為核心的智能測控儀表(從機)作為現場測控設備,完成數據的采集、處理和控制各種任務,同時將數據傳給PC機(主機),PC機將這些數據加工處理后,進行顯示、打印報表等。PC機也可以將各種控制命令傳送給單片機,干預單片機系統的運行,從而發揮PC機的優勢。要實現這樣的功能,就涉及到PC機與單片機之間的通信問題。現在的計算機提供了各種各樣的串口,他們支持不同的通信協議,有著不同的功能。目前計算機提供的串口有RS-232,RJ45,USB2.0等。
   2.1.1 PC機同單片機通信存在的問題
目前,15系列單片機同PC機的通信在大多數情況下仍然是使用RS-232(DB-9)串口作為通信接口實現的。而隨著USB接口技術的成熟和使用的普及,由于USB接口有著一系列RS-232(DB-9)串口無法比擬的優點,RS-232(DB-9)串口正在逐步的為USB接口所替代。而在現在的大多數筆記本電腦中,出于節省物理空間和用處不大等原因,RS-232(DB-9)串口已不再設置,這就約束了基于RS-232(DB-9)串口與PC機聯絡的單片機設備的使用范圍。
   2.1.2 USB接口同RS-232(DB-9)串口的比較
      通過USB接口和RS-232(DB-9)的比較,不難發現:
(1)USB接口支持即插即用和熱插拔,而RS-232(DB-9)串口不支持即插即  
     用和熱插拔,設備安裝后需重啟計算機方可使用。
(2)USB接口的傳輸速率較快,可達480Mbps(V2.0),而RS-232(DB-9)串
     口的最高速率僅為19200波特。
(3)USB接口占用體積較小,插拔方便;而RS-232(DB-9)串口的的插拔需
     要使用改錐,且在機箱后操作,比較麻煩。
     綜上可知,USB 接口取代RS-232(DB-9)串口的趨勢不可逆轉。
   2.1.3 USB轉接芯片的選擇
   目前常用的USB轉接芯片包括PL2303,CH341,CP2101,FT232等。在綜合考慮了各方面因素后,CH341成為了本次電路設計的首選芯片。CH341是南京沁恒電子公司生產的USB總線的轉接芯片,通過USB總線提供異步串口,打印口,并口及常用的2線和4線等同步串行端口。其特點有:
(1)提供全速USB設備借口,兼容USB2.0,外圍設備只需要晶體和電容;
(2)可通過外部的低成本串行EPROM定義廠商ID,產品ID,序列號等;
(3)成本低廉,可直接轉換原串口外圍設備;
(4)采用SOP-28封裝,串口應用還提供小型的SSOP-20封裝。正是由于在PC機同單片機通信電路中,USB轉接芯片CH341 具有以上其他芯片無法比擬的優點,同時價格低廉并且提供中文技術支持,因此它成為了本電路USB轉接芯片的最優選擇。本電路采用的是SSOP-20封裝的CH341T。            
2.2 通信功能要求
(1)PC控制單片機IO口輸出,并且通過兩個LED燈顯示數據發收狀態,如果數據處于發送或者接收狀態,則相應的LED燈閃亮。
(2)PC控制單片機IO口輸出,并且通過兩個按鍵控制PC機是否接收數據。
(3)PC機與單片機之間的通信結果通過串口助手進行調試和顯示。第四章 程序設計
2.3 串口初始化
    voidUartInit(void)      //115200bps@22.1184MHz
{
    SCON= 0x50;      //8位數據可變波特率
    AUXR|= 0x40;     //定時器1時鐘為Fosc,即1T
    AUXR&= 0xFE;     //串口1選擇定時器1為波特率發射生器
    TMOD&= 0x0F;     //設置定時器1為16位自動重裝方式
    TL1= 0xD0;       //設定定時初值
    TH1= 0xFF;       //設定定時初值
    ET1= 0;       //禁止定時器1中斷
    TR1= 1;       //啟動定時器1
}
2.4 主程序
voidmain(void)
{
    P0M1= 0;  P0M0 = 0;  //設置為準雙向口
    P1M1= 0;  P1M0 = 0;  //設置為準雙向口
    P2M1= 0;  P2M0 = 0;  //設置為準雙向口
    P3M1= 0;  P3M0 = 0;  //設置為準雙向口
    P4M1= 0;  P4M0 = 0;  //設置為準雙向口
    P5M1= 0;  P5M0 = 0;  //設置為準雙向口
    P6M1= 0;  P6M0 = 0;  //設置為準雙向口
    P7M1= 0;  P7M0 = 0;  //設置為準雙向口
UartInit()     ;      
    //UART1_config(1);   // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
    EA= 1;    //允許總中斷
    ES=1; //開串口中斷
    PrintString1("STC15F2K60S2UART1 Test Prgramme!\r\n");  //SUART1發送一個字符串
    while(1)
    {   if(INT0==0)    //如果相應按鍵(默認為sw18)按下,則允許接收
       {REN=0;}
        if((TX1_Cnt != RX1_Cnt) &&(!B_TX1_Busy)) //收到數據, 發送空閑
        {
            SBUF= RX1_Buffer[TX1_Cnt];     //把收到的數據遠樣返回
            B_TX1_Busy= 1;
            if(++TX1_Cnt>= UART1_BUF_LENGTH)  TX1_Cnt = 0;
        }
    else{if(INT1==0)    //如果相應按鍵(默認為sw17)按下,則禁止接收
        {REN=1;}}
    }
}
2.5 中斷服務程序
    voidUART1_int (void) interrupt 4//中斷服務子程序
{
    if(RI)   //如果產生中斷,則把SBUF內容賦值給單片機的數組
    {   
           RI= 0;
          RX1_Buffer[RX1_Cnt] = SBUF;
          if(++RX1_Cnt >= UART1_BUF_LENGTH)   
          RX1_Cnt = 0;    //防溢出
       }   
    if(TI)
    {
        TI = 0;
        B_TX1_Busy = 0;
    }
}

3.0 總程序
    /*************   功能說明   **************
雙串口全雙工中斷方式收發通訊程序。
通過PC向MCU發送數據, MCU收到后通過串口把收到的數據原樣返回.
******************************************/
#define    MAIN_Fosc          22118400L  //定義主時鐘
#include   "STC15Fxxxx.H"
#define        Baudrate1          115200L
#define        UART1_BUF_LENGTH  200
u8  TX1_Cnt;   //發送計數
u8  RX1_Cnt;   //接收計數
bit B_TX1_Busy;   //發送忙標志
u8  idataRX1_Buffer[UART1_BUF_LENGTH];    //接收緩沖
void UartInit(void)      //115200bps@22.1184MHz
{
    SCON= 0x50;      //8位數據可變波特率
    AUXR|= 0x40;     //定時器1時鐘為Fosc,即1T
    AUXR&= 0xFE;     //串口1選擇定時器1為波特率發射生器
    TMOD&= 0x0F;     //設置定時器1為16位自動重裝方式
    TL1= 0xD0;       //設定定時初值
    TH1= 0xFF;       //設定定時初值
    ET1= 0;       //禁止定時器1中斷
    TR1= 1;       //啟動定時器1
}
void main(void)
{
    P0M1= 0;  P0M0 = 0;  //設置為準雙向口
    P1M1= 0;  P1M0 = 0;  //設置為準雙向口
    P2M1= 0;  P2M0 = 0;  //設置為準雙向口
    P3M1= 0;  P3M0 = 0;  //設置為準雙向口
    P4M1= 0;  P4M0 = 0;  //設置為準雙向口
    P5M1= 0;  P5M0 = 0;  //設置為準雙向口
    P6M1= 0;  P6M0 = 0;  //設置為準雙向口
    P7M1= 0;  P7M0 = 0;  //設置為準雙向口
UartInit()     ;      
    //UART1_config(1);   // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
    EA= 1;    //允許總中斷
    ES=1; //開串口中斷
    PrintString1("STC15F2K60S2UART1 Test Prgramme!\r\n");  //SUART1發送一個字符串
    while(1)
    {   if(INT0==0)
       {REN=0;}
        if((TX1_Cnt != RX1_Cnt) &&(!B_TX1_Busy)) //收到數據, 發送空閑
        {
            SBUF= RX1_Buffer[TX1_Cnt];     //把收到的數據遠樣返回
            B_TX1_Busy= 1;
            if(++TX1_Cnt>= UART1_BUF_LENGTH)  TX1_Cnt = 0;
        }
    else{if(INT1==0)
        {REN=1;}}
    }
}
void UART1_int (void) interrupt 4//中斷服務子程序
{
    if(RI)
    {   
           RI= 0;
          RX1_Buffer[RX1_Cnt] = SBUF;
          if(++RX1_Cnt >= UART1_BUF_LENGTH)   
          RX1_Cnt = 0;    //防溢出
       }   
    if(TI)
    {
        TI = 0;
        B_TX1_Busy = 0;
    }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:555092 發表于 2019-11-8 16:32 | 只看該作者
u8  TX1_Cnt;出現錯誤是什么原因
回復

使用道具 舉報

板凳
ID:394949 發表于 2019-12-6 16:47 | 只看該作者
我也一樣的,改為char試試
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久久免费看 | 在线免费观看黄a | 天堂一区二区三区 | 91久久久久久久久久久久久 | 亚洲视频免费在线观看 | 天天亚洲| 日韩中文字幕在线视频观看 | 男人天堂手机在线视频 | 国产 91 视频 | 午夜精品久久久久久不卡欧美一级 | 国产精品一区二区三区四区 | 国产日韩欧美一区 | 日本成人中文字幕在线观看 | 手机看片在线播放 | 99riav3国产精品视频 | 亚洲成人在线免费 | 成人二区 | 国产日韩精品视频 | h片在线看| 亚洲色图50p | 我想看一级黄色毛片 | 久久久噜噜噜久久中文字幕色伊伊 | 国产精品美女久久久久久久久久久 | 精品国产一区二区三区免费 | 最新国产精品精品视频 | 国产精品亚洲精品日韩已方 | 国产一级电影在线观看 | 亚洲在线 | 91亚洲一区 | 日韩欧美电影在线 | 国产成人精品免费视频 | 亚洲精品视频导航 | 欧美综合色 | 久久精品一 | 亚洲黄色在线免费观看 | 国产成人精品一区二 | 在线不卡视频 | 91传媒在线观看 | 免费黄视频网站 | 国产精品一级 | 国产91久久久久久久免费 |