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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

STC8HK08單片機(jī)雙串口實(shí)現(xiàn) 附源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
剛使用STC8HK08,做的雙串口,記錄一下

本實(shí)驗(yàn)只是調(diào)了2個(gè)串口跟一個(gè)led燈

  STC8可以省略晶振,下載的時(shí)候選擇11.0592,如果設(shè)置的22的晶振要在程序里面的宏定義改過(guò)來(lái)
  設(shè)置的9600的波特率  如果改別的波特率可以使用STC燒寫工具的"波特率發(fā)生器"來(lái)生成或者在宏定義里面改

串口的效果是:
  串口1收到數(shù)據(jù)再發(fā)出去(RX是P3.0  TX是P3.1  可以根據(jù)數(shù)據(jù)手冊(cè)的寄存器進(jìn)行更改為其他IO口)
  串口2一樣(RX2是P1.0  TX2是P1.1  可以根據(jù)數(shù)據(jù)手冊(cè)的寄存器進(jìn)行更改為其他IO口)


  電路只是測(cè)試臨時(shí)搭的(按照最小系統(tǒng)電路給單片機(jī)供電的5V應(yīng)該再加個(gè)10uf的電容),方便為主.功率比較大的時(shí)候不建議使用7805.

電路原理圖如下:


單片機(jī)源程序如下:
  1. #include "intrins.h"
  2. #include "stdio.h"
  3. #include "STC8H.h"
  4. #define FOSC        11059200UL
  5. #define BRT         (65536 - FOSC / 9600 / 4)//波特率

  6. typedef        unsigned        char        uchar;
  7. typedef        unsigned        int                uint;

  8. sbit led7 = P1^4;
  9. #define        BUF_LENTH        0x20        //定義串口接收緩沖長(zhǎng)度
  10. #define        TI2                                (S2CON & 0x02) != 0
  11. #define        RI2                                (S2CON & 0x01) != 0
  12. #define        CLR_TI2()                S2CON &= ~0x02
  13. #define        CLR_RI2()                S2CON &= ~0x01
  14. unsigned char         uart1_wr;                //寫指針
  15. unsigned char         uart1_rd;                //讀指針
  16. unsigned char         xdata U1TxBuf[BUF_LENTH];
  17. unsigned char         xdata U1RxBuf[BUF_LENTH];
  18. bit                B_TI;
  19. sbit RX12     =   P1^2;
  20. sbit TX13     =   P1^3;
  21. unsigned char         uart2_wr;                //寫指針
  22. unsigned char         uart2_rd;                //讀指針
  23. unsigned char         xdata U2TxBuf[BUF_LENTH];
  24. unsigned char         xdata U2RxBuf[BUF_LENTH];
  25. bit                B_TI2;

  26. extern void U1Init(void);
  27. extern void U2Init(void);
  28. extern void U2Putch(uchar *ptr,uint len);
  29. extern void U1Putch(uchar *ptr,uint len);



  30. void main(void)
  31. {        
  32.     P0M0 = 0x00;
  33.     P0M1 = 0x00;
  34.     P1M0 = 0x00;
  35.     P1M1 = 0x00;
  36.     P2M0 = 0x00;
  37.     P2M1 = 0x00;
  38.     P3M0 = 0x00;
  39.     P3M1 = 0x00;
  40.     P4M0 = 0x00;
  41.     P4M1 = 0x00;
  42.     P5M0 = 0x00;
  43.     P5M1 = 0x00;
  44.                 U1Init();
  45.                 U2Init();
  46.         
  47.     IE2 = 0x01;  //串口2中斷
  48.     ES = 1;     //串口1中斷
  49.                 EA = 1;//總中斷

  50.         led7 = 1;
  51.         while (1)
  52.   {

  53.                 if(  (uart1_wr==1) )
  54.                 {//收到1個(gè)數(shù)據(jù)
  55.                         led7 =!led7;
  56.                         U1Putch(U1RxBuf,1);
  57.                         uart1_wr = 0;
  58.                 }
  59.                 if(  (uart2_wr==1) )
  60.                 {//收到1個(gè)數(shù)據(jù)
  61.                         led7 =!led7;
  62.                         U2Putch(U2RxBuf,1);
  63.                         uart2_wr = 0;
  64.                 }
  65.                
  66.   }
  67. }

  68. void delay()
  69. {
  70.         unsigned int len=50000;
  71.         while(len--);
  72. }
  73. void U1Init(void)
  74. {
  75.         //串口1指針歸位
  76.         uart1_rd = 0;
  77.         uart1_wr = 0;
  78.         //串口1寄存器設(shè)置
  79.         PCON &= 0x7F;                //波特率不倍速
  80.         SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  81.         AUXR |= 0x40;                //定時(shí)器時(shí)鐘1T模式
  82.         AUXR &= 0xFE;                //串口1選擇定時(shí)器1為波特率發(fā)生器
  83.         TMOD &= 0x0F;                //設(shè)置定時(shí)器模式
  84.         TMOD |= 0x20;                //設(shè)置定時(shí)器模式
  85.         TL1 = 0xDC;                //設(shè)置定時(shí)初始值
  86.         TH1 = 0xDC;                //設(shè)置定時(shí)重載值
  87.         ET1 = 0;                //禁止定時(shí)器%d中斷
  88.         TR1 = 1;                //定時(shí)器1開(kāi)始計(jì)時(shí)
  89. //    SCON = 0x50;
  90. //    TMOD = 0x00;
  91. //    TL1 = BRT;
  92. //    TH1 = BRT >> 8;
  93. //    TR1 = 1;
  94. //    AUXR = 0x40;
  95. }
  96. /*******************串口2初始化***************************/
  97. void U2Init(void)
  98. {
  99.         //串口2指針歸位
  100.         uart2_rd = 0;
  101.         uart2_wr = 0;
  102. //    S2CON = 0x10;
  103. //    T2L = 0xe8;                                 //65536-11059200/115200/4=0FFE8H
  104. //    T2H = 0xff;
  105. //    AUXR = 0x14;                                //啟動(dòng)定時(shí)器
  106. //    IE2 = 0x01;                                  //使能串口中斷
  107. //    EA = 1;
  108. //    S2BUF = 0x5a;                               //發(fā)送測(cè)試數(shù)據(jù)

  109.         //串口2寄存器設(shè)置   可以用  STC工具自動(dòng)生成的
  110. //        S2CON = 0x50;                //8位數(shù)據(jù),可變波特率
  111. //        
  112. //        AUXR |= 0x04;                //定時(shí)器2時(shí)鐘為Fosc,即1T
  113. //        T2L = 0xE0;                //設(shè)定定時(shí)初值
  114. //        T2H = 0xFE;                //設(shè)定定時(shí)初值
  115. //        AUXR |= 0x10;                //啟動(dòng)定時(shí)器2
  116. /*用下面這個(gè)配置也可以   
  117.         STC的示例程序的配置
  118.         但是千萬(wàn)要注意!!!!!!!!!!!!!!下面這個(gè)配置的AUXR=0x14會(huì)把串口1寄存器給擾亂
  119.         所以要改成AUXR |= 0x14;
  120. */
  121.                 S2CON = 0x10;
  122.     T2L = BRT;                                 //65536-11059200/9600/4=0FFE8H
  123.     T2H = BRT>>8;
  124.     AUXR |= 0x14;                                //啟動(dòng)定時(shí)器

  125. }

  126. /*******************串口1發(fā)送一字節(jié)***************************/
  127. void        U1TxByte(unsigned char dat)
  128. {
  129.         B_TI = 0;
  130.         SBUF = dat;
  131.         while(!B_TI);
  132.         B_TI = 0;
  133. }
  134. /*******************串口2發(fā)送一字節(jié)***************************/
  135. void        U2TxByte(unsigned char dat)
  136. {
  137.         B_TI2 = 0;
  138.         S2BUF = dat;
  139.         while(!B_TI2);
  140.         B_TI2 = 0;
  141. }
  142. /*******************串口1發(fā)送指定長(zhǎng)度數(shù)據(jù)***************************/
  143. void U1Putch(uchar *ptr,uint len)
  144. {
  145.         uchar idata cnt;
  146.         for(cnt=0;cnt<len;cnt++)        U1TxByte(*ptr++);
  147. }
  148. /*******************串口1發(fā)送指定長(zhǎng)度數(shù)據(jù)***************************/
  149. void U2Putch(uchar *ptr,uint len)
  150. {
  151.         uchar idata cnt;
  152.         for(cnt=0;cnt<len;cnt++)        U2TxByte(*ptr++);
  153. }
  154. /*******************串口1發(fā)送一串字符串***************************/
  155. void U1Print(unsigned char code *puts)
  156. {
  157.     for (; *puts != 0;        puts++)  U1TxByte(*puts);         //遇到停止符0結(jié)束
  158. }
  159. /*******************串口2發(fā)送一串字符串***************************/
  160. void U2Print(unsigned char code *puts)
  161. {
  162.     for (; *puts != 0;        puts++)  U2TxByte(*puts);         //遇到停止符0結(jié)束
  163. }




  164. /*******************串口1中斷***************************/
  165. void UART1_RCV (void) interrupt 4
  166. {
  167.         if(RI)
  168.         {
  169.                 RI = 0;
  170.                 U1RxBuf[uart1_wr] = SBUF;
  171.                 if(++uart1_wr >= BUF_LENTH)        uart1_wr = 0;
  172.         }

  173.         if(TI)
  174.         {
  175.                 TI = 0;
  176.                 B_TI = 1;
  177.         }
  178. }
  179. /*******************串口2中斷***************************/
  180. void UART2_RCV (void) interrupt 8
  181. {
  182.         if(RI2)
  183.         {//接收
  184.                 CLR_RI2();
  185.                 U2RxBuf[uart2_wr] = S2BUF;
  186.                 if(++uart2_wr >= BUF_LENTH)        uart2_wr = 0;
  187.         }

  188.         if(TI2)
  189.         {//發(fā)送
  190.                 CLR_TI2();
  191.                 B_TI2 = 1;
  192.         }
  193. }
復(fù)制代碼


以上代碼的Keil工程下載(復(fù)制本帖代碼到Keil工程便可無(wú)需下載): STC8.7z (140.5 KB, 下載次數(shù): 147)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:961114 發(fā)表于 2022-10-9 08:59 | 只看該作者
用USB型MCU型號(hào)設(shè)計(jì)新產(chǎn)品:STC8H8K64U-45I-TSSOP20/RMB1.9,直接 USB 下載,直接 USB 仿真
回復(fù)

使用道具 舉報(bào)

板凳
ID:1020290 發(fā)表于 2023-7-18 18:21 | 只看該作者
不錯(cuò),正好在找 STC8H1K08 的串口收發(fā)的資料,謝謝
回復(fù)

使用道具 舉報(bào)

地板
ID:77589 發(fā)表于 2023-8-1 17:19 | 只看該作者
正好用上,謝謝。。
回復(fù)

使用道具 舉報(bào)

5#
ID:350540 發(fā)表于 2024-6-13 10:30 | 只看該作者
點(diǎn)贊,要是注釋能多點(diǎn)就好了?雌饋(lái)更容易些
回復(fù)

使用道具 舉報(bào)

6#
ID:961114 發(fā)表于 2024-6-13 17:22 | 只看該作者
我不后悔 發(fā)表于 2024-6-13 10:30
點(diǎn)贊,要是注釋能多點(diǎn)就好了。看起來(lái)更容易些

這個(gè)官方有視頻講解的 可以去看
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 黄色网址免费在线观看 | 中文字幕在线第一页 | 91久久精品一区二区二区 | 午夜影院在线观看版 | 另类专区成人 | 亚洲精品一二三区 | 乱一性一乱一交一视频a∨ 色爱av | 亚洲乱码国产乱码精品精的特点 | 亚洲一区视频在线 | 91亚洲国产亚洲国产 | 亚洲欧美精品在线观看 | 超碰97人人人人人蜜桃 | 在线观看电影av | 天堂在线一区 | 国产精品无码久久久久 | 久久三区 | 国产精品无码久久久久 | 一区二区福利视频 | jlzzjlzz国产精品久久 | 久久国产日韩 | 国产精品乱码一区二三区小蝌蚪 | 久久夜视频 | www.久久 | 色接久久| 日韩中文一区二区三区 | 亚洲午夜av久久乱码 | 精品国产一区二区三区久久影院 | 亚洲欧美在线观看 | 免费久久久 | 欧洲精品在线观看 | 日韩在线一区二区三区 | 在线观看免费福利 | 337p日本欧洲亚洲大胆鲁鲁 | 日韩精品一区二区三区 | 欧美国产精品一区二区三区 | 久草资源| 六月成人网 | 亚洲一区二区三区欧美 | 国产视频久久久 | 日本电影一区二区 | 欧美日韩高清在线一区 |