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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

使用STC8單片機串口3復用口P51P50無數據發送接收

[復制鏈接]
跳轉到指定樓層
樓主
所用芯片是STC8A8K64S4A12,用復用口P51、P50作為串口3,定時器3作為波特率發生器,發現無數據發送和接收,求助好心友友幫忙解答
  1. #include "STC8A8K64D4.H"
  2. #include <intrins.h>
  3. #include <math.h>

  4. typedef unsigned char u8;
  5. typedef unsigned int  u16;

  6. //串口3
  7. u8 T3_CNT;
  8. u8 R3_CNT;
  9. unsigned char xdata T3_BUF[10];
  10. unsigned char xdata R3_BUF[10];
  11. bit F_T3_Busy;
  12. bit F_R3_OK;

  13. //IO口 初始化 相關配置
  14. void IO_Init()
  15. {
  16.         P3M0 = 0x00;P3M1 = 0x00;        //P37-P30 雙向口
  17.         P5M0 = 0x00;P5M1 = 0x00;        //P57-P50 雙向口
  18.         P_SW2 = 0x02;
  19. }


  20. //-----------------------------------------------------
  21. //--------------------串口3設置-------------------------
  22. void Uart3_Init(void)        //57600bps@6.000MHz
  23. {
  24.          S3CON = 0x10;                //8位數據,可變波特率
  25.          S3CON |= 0x40;                //串口3選擇定時器3為波特率發生器
  26.          T4T3M |= 0x02;                //定時器時鐘1T模式
  27.          T3L = 0xE6;                        //設置定時初始值
  28.          T3H = 0xFF;                        //設置定時初始值
  29.          T4T3M |= 0x08;                //定時器3開始計時
  30.          IE2 = 0x08;                        //允許串口3中斷
  31. }


  32. // void L_S3XBL()
  33. // {
  34. //         T3_BUF[0] = R3_BUF[0];
  35. //         T3_BUF[1] = R3_BUF[1];
  36. //         T3_BUF[2] = R3_BUF[2];
  37. //         T3_BUF[3] = R3_BUF[3];
  38. //         T3_BUF[4] = R3_BUF[4];
  39. //         T3_BUF[5] = R3_BUF[5];
  40. //         T3_BUF[6] = R3_BUF[6];
  41. //         T3_BUF[7] = R3_BUF[7];
  42. // }

  43. void L_S3XBL0()
  44. {
  45.         T3_BUF[0] = 0x5A;
  46.         T3_BUF[1] = 0xA5;
  47.         T3_BUF[2] = 0x05;
  48.         T3_BUF[3] = 1;
  49.         T3_BUF[4] = 1;
  50.         T3_BUF[5] = 1;
  51.         T3_BUF[6] = 1;
  52.         T3_BUF[7] = 1;
  53. }

  54. //串口3 發送函數
  55. void S3OUT(void)
  56. {
  57.         S3BUF = T3_BUF[0];
  58.         F_T3_Busy = 1;
  59.         while(F_T3_Busy);
  60. }

  61. //------串口3中斷------
  62. void Uart3_Routine(void) interrupt 17
  63. {
  64.         //S3發送
  65.         if(S3CON & 0x02)
  66.         {
  67.                 S3CON &= ~0x02;
  68.                
  69.                 if(T3_BUF[2]+2 > T3_CNT)
  70.                 {
  71.                         T3_CNT++;
  72.                         S3BUF = T3_BUF[T3_CNT];
  73.                 }
  74.                 else
  75.                 {
  76.                         T3_CNT = 0;
  77.                         F_T3_Busy = 0;
  78.                 }
  79.         }
  80.         
  81.         //S3接收
  82.         if(S3CON & 0x01)
  83.         {
  84.                 S3CON &= ~0x01;        
  85.                  if(F_R3_OK==0)
  86.                  {
  87.                         R3_BUF[R3_CNT] = S3BUF;
  88.                         if(R3_CNT==0)
  89.                         {
  90.                                 if(R3_BUF[0]==0x5A)
  91.                                 {
  92.                                         R3_CNT++;
  93.                                 }
  94.                         }
  95.                         else if(R3_CNT==1)
  96.                         {
  97.                                 if(R3_BUF[1]==0xA5)
  98.                                 {
  99.                                         R3_CNT++;
  100.                                 }
  101.                                 else
  102.                                 {
  103.                                         R3_CNT = 0;
  104.                                 }
  105.                         }
  106.                         else if(R3_BUF[2]+2 > R3_CNT)
  107.                         {
  108.                                 R3_CNT++;
  109.                         }
  110.                         else
  111.                         {
  112.                                 R3_CNT = 0;
  113.                                 F_R3_OK = 1;
  114.                         }
  115.                  }
  116.         }        
  117. }

  118. void main(void)
  119. {
  120.         IO_Init();
  121.         Uart3_Init();
  122.         EA = 1;        
  123.         while(1)
  124.         {
  125.                 //直接發送
  126.                 L_S3XBL0();
  127.                 S3OUT();
  128.                                 
  129.         }
  130. }
復制代碼




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

使用道具 舉報

沙發
ID:1034262 發表于 2025-7-25 12:01 | 只看該作者
這是STC官方的例子“03-串口3中斷收發-C語言”,你自己選擇IO編譯一下:UART3_config( 115200UL, 3, 1);        // brt: 通信波特率,  timer=2: 波特率使用定時器2, 其它值: 使用Timer3做波特率. io=0: 串口3切換到P0.0 P0.1,  =1: 切換到P5.0 P5.1.

STC8A8K64D4-串口相關程序.rar (297.97 KB, 下載次數: 0)





回復

使用道具 舉報

板凳
ID:704640 發表于 2025-7-25 23:02 | 只看該作者
樓主,建議使用兼容性更好的STC8051U(AI8051U),速度又快,點屏,內存卡,SPI,I2C,這些都有硬件驅動,且不用額外寫基本的初始化,有興趣的話一起學習研究,我截圖簡單教你串口的智能配置,大家一起進步~據官方介紹這個芯片引腳兼容89C51/89C52的引腳,老芯片的程序只要簡單改改頭文件和型號就可以。剛發現,最新版的燒錄平臺我剛才也看到有范例代碼可以復制直接用

1.png (170.45 KB, 下載次數: 0)

下載最新版本燒錄平臺,保證更容易使用

下載最新版本燒錄平臺,保證更容易使用

2.png (93.02 KB, 下載次數: 0)

用更智能的配置

用更智能的配置

3.png (344.13 KB, 下載次數: 0)

3.png

3-1.png (153.33 KB, 下載次數: 0)

3-1.png

4.png (123.33 KB, 下載次數: 0)

加上幾個測試代碼

加上幾個測試代碼

5e.png (112.36 KB, 下載次數: 0)

在這里可以找到范例程序

在這里可以找到范例程序
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美在线视频免费 | 欧美黄色录像 | 国产三级视频在线播放 | 日韩在线专区 | 久久精品在线观看 | 色网站在线观看 | 欧美日韩免费看 | 久久精品一二三 | 欧美精品综合 | 中文字幕免费观看视频 | 香蕉视频久久 | 天天干天天摸 | 国产不卡视频 | 成人福利在线观看 | 自拍偷拍中文字幕 | 性欧美bbw| 九一九色国产 | 日韩在线综合 | 亚洲另类自拍 | 触手繁殖の地狱3d啪啪 | 午夜性福利 | 精品视频在线免费 | 亚洲精品自拍视频 | 羞羞在线视频 | 黄色小视频在线免费观看 | 免费观看成人 | 97视频在线观看免费 | 天天干天天操天天射 | 中文字幕亚洲欧美 | 玖玖在线播放 | 日韩精品影视 | 精品一区二区三区中文字幕 | 亚洲天堂av网 | 91av视频在线播放 | 日韩精品免费 | 欧美日韩四区 | 毛片av在线 | 日韩黄网 | 黄av在线| 日韩午夜精品 | 人人草人人爽 |