找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10378|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

STC單片機(jī)收發(fā)通信串口調(diào)試程序 帶詳細(xì)注釋

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:258457 發(fā)表于 2018-2-22 14:27 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
STC單片機(jī)串口通信,測試程序,C51寄存器變量設(shè)置

單片機(jī)源程序如下(注釋很詳細(xì)):
  1. #include <STC89C5xRC.H>
  2. #include <LCD_12864.H>
  3. #include <intrins.h>
  4. #include <string.h>
  5. #include <stdio.h>
  6. #include <math.h>
  7.                                                           //                                   0 / 0:13位計(jì)數(shù)器;
  8. typedef unsigned int u16;          //常用M1M0           0 / 1: 16位計(jì)數(shù)器;
  9. typedef unsigned char u8;          //                                     1 / 0:自動(dòng)重裝8位計(jì)數(shù)器                                                           
  10. void UartInit(void);                  //                          定時(shí)器1                定時(shí)器0
  11.                                           //TMOD寄存器位變量: GATE   C/T   M1   M0   GATE   C/T   M1   M0
  12.                                                           //                                0     0     1    0            0         0     1    0
  13.                                                  //                                                  1                                              1
  14.                                               //                                              C/T=0:定時(shí)器                     C/T=1:計(jì)數(shù)器

  15.                                               //TCON寄存器位變量:  TF1   TR1   TF0   TR0   IE1   IT1   IE0   IT0                                                                                       
  16.                                                   //                    /     1            /     1     /     1     /     1     
  17.                                                   //                '/'代表有硬件置1或0,無需編程
  18.                                                       //                                TR1、TR0置1分別啟動(dòng)定時(shí)器1、0 ;置0分別關(guān)閉定時(shí)器1、0;
  19.                                                        //                                IT1、IT0置1外部中斷1、0下降沿有效;置0低電平有效;                  
  20.                                                        //                                下降沿或者上升沿有效可以用于1/2分頻。
  21.                                                                                                   
  22.                                                           //SCON寄存器位變量: SM0   SM1   SM2   REN   TB8   RB8   TI    RI                                        
  23.                                                           //8位移位寄存器                0          0                0          1                                   /*         /*
  24. void main()                                          //10位波特率可變                0          1                0
  25. {                                                          //11位波特率固定                1          0                1
  26.         UartInit();               //11位波特率可變                1          1                1          
  27.                                   //SM2接收數(shù)據(jù)第9位校驗(yàn)位。
  28.         while(1);                                  //方式0發(fā)送:TI位0允許發(fā)送,數(shù)據(jù)格式- 8 -;發(fā)送結(jié)束TI硬件置1,發(fā)送下一幀TI程序置0,TB8無作用
  29.                                   //方式0接收:REN為1且RI位0允許發(fā)送,數(shù)據(jù)格式- 8 -;接收結(jié)束RI硬件置1,接收下一幀RI程序置0,RB8無作用
  30.                                                           //                       SM2==0
  31. }                                                          //方式1發(fā)送:TI為0允許發(fā)送,數(shù)據(jù)格式0+8+1;發(fā)送結(jié)束TI硬件置1,發(fā)送下一幀TI程序置0,TB8無作用                                                                                     
  32.                                                           //方式1接收: REN為1且RI為0允許接收,數(shù)據(jù)格式0+8+1;接收結(jié)束第9位1送至RB8、RI硬件置1,接收下一幀RI由程序置0
  33.                                                           //                           SM2=0>>RB8=1或0,都接收數(shù)據(jù),RI硬件置1;SM2=1>>RB8=1 接收數(shù)據(jù),RI硬件置1
  34. void Uart() interrupt 4              //方式2發(fā)送:TI位0允許發(fā)送,數(shù)據(jù)格式0+8+1/0+1;TB8軟件置1或0代表發(fā)送數(shù)據(jù)第9位,TI硬件置1,發(fā)送下一幀TI程序置0
  35. {                                                           //               TB8為1表示發(fā)送地址,TB8為0表示發(fā)送數(shù)據(jù)
  36.   u8 receiveData;                          //方式2接收: REN為1且RI為0允許接收,數(shù)據(jù)格式0+8+1/0+1;接收結(jié)束第9位送至RB8、RI硬件置1,接收下一幀RI由程序置0
  37.   receiveData=SBUF;                          //                           SM2=0>>RB8=1或0,都接收數(shù)據(jù),RI硬件置1;SM2=1>>RB8=1 接收數(shù)據(jù),RI硬件置1
  38.   while(!RI);                           
  39.   RI = 0;                                          //方式3同方式2,只是波特率可調(diào)
  40.   SBUF=receiveData;
  41.   while(!TI);                                  //IE中斷允許寄存器:  EA    --    ET2   ES    ET1   EX1   ET0  EX0                                                                      
  42.   TI=0;                                      //EA中斷總開關(guān) ;  ET2允許定時(shí)器2中斷 ; ES允許串口中斷 ;     ET1允許定時(shí)器1中斷                                         
  43. }                                            //                                EX1允許外部中斷1斷 ; ET0允許定時(shí)器0中斷 ; EX0允許外部中斷0斷
  44.                              
  45.                                                   //                          中斷源               Keil中斷編號(hào)             矢量地址
  46.                               //            最高優(yōu)先級(jí)                 6                     0x0033
  47.                               //            外部中斷0                 0                     0x0003
  48.                               //            定時(shí)器0溢出                1                     0x000B
  49.                               //            外部中斷1                 2                     0x0013
  50.                               //            定時(shí)器1溢出                3                     0x001B
  51.                               //               串口                    4                     0x0023
  52.                               //            定時(shí)器2溢出                5                     0x002B

  53. void UartInit(void)                //9600bps@11.0592MHz
  54. {
  55.     TMOD = 0x20;
  56.     SCON = 0x50;
  57.     TH1 = 0xF4;
  58.     TL1 = 0xF4;
  59.     PCON = 0x80;
  60.     EA = 1;
  61.     ES = 1;
  62.     TR1 = 1;
  63. }



復(fù)制代碼

所有資料51hei提供下載:
STC通信-發(fā)送數(shù)據(jù).rar (1.44 KB, 下載次數(shù): 141)


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

使用道具 舉報(bào)

沙發(fā)
ID:125889 發(fā)表于 2018-7-20 10:33 | 只看該作者
正在學(xué)習(xí)怎么用電腦看單片機(jī)的數(shù)據(jù),謝謝樓主
回復(fù)

使用道具 舉報(bào)

板凳
ID:590645 發(fā)表于 2019-10-7 13:57 | 只看該作者
不會(huì)這個(gè)。正好學(xué)習(xí)一下。感謝樓主分享。
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表