找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1050|回复: 5
收起左侧

请教哪位大神能从单片机程序里面看出初始波特率是多少?

[复制链接]
ID:1044540 发表于 2022-9-12 14:53 | 显示全部楼层 |阅读模式
  1. #include "UART.h"
  2. #include "Key.h"
  3. #include "Record.h"

  4. uint8_t Rcv_Buf[RCV_LENGTH];
  5. uint8_t Snd_Buf[SND_LENGTH];

  6. volatile uint8_t        recvbyte=0;
  7. uint8_t RcvFlag = 0;

  8. volatile uint16_t         ScanTimeMs;
  9. volatile uint16_t SysOverTime;
  10. uint8_t InitStartEnable;

  11. uint8_t SendAdd;

  12. uint16_t SysCallStatus1=0;
  13. uint16_t SysCallStatus2=0;

  14. uint16_t SysCallStatus1Bak=0;
  15. uint16_t SysCallStatus2Bak=0;
  16. uint16_t alarm = 0;

  17. bit MyAddStart;
  18. bit Over1min;

  19. bit OverTimeFlag;

  20. bit OtherMaster;
  21. bit OtherMasterChecked;

  22. volatile uint16_t DisableSendTimeMs;

  23. volatile uint16_t u16_OverTimeMs;

  24. void UART1_ISR() interrupt 4 using 1
  25. {
  26.         if(RI)
  27.         {
  28.                 RI = 0;
  29.                 SysOverTime = 0;
  30.                 UartErr = 0;
  31.                 Rcv_Buf[recvbyte] = SBUF;                        //接收数据
  32.                 if(Rcv_Buf[0] == 0x53)
  33.                 {
  34.                         recvbyte++;
  35.                 }
  36.                
  37.                 if((Rcv_Buf[recvbyte-1]==0x0a) && (Rcv_Buf[recvbyte-2]==0x0d))                 //接收到帧尾
  38.                 {
  39.                         RcvFlag = 1;                        //置位接收标志
  40.                         recvbyte = 0;                        //接收下标清零
  41.                 }
  42.         }
  43. }

  44. void Uart1_Init(void)
  45. {
  46. //        SCON = 0x50;
  47. //        TMOD &= 0x0f;
  48. //        
  49. //        TH1 = BAUD>>8;
  50. //        TL1 = BAUD;
  51. //        
  52. //        TR1 = 1;
  53. //        AUXR |= 0x40;
  54. //         ES = 1;
  55. //        EA = 1;
  56. //        
  57. //        
  58. //        RS485_RcevEnable();
  59.                         TR1 = 0;
  60.                 AUXR &= ~0x01;                //S1 BRT Use Timer1;
  61.                 AUXR |=  (1<<6);        //Timer1 set as 1T mode
  62.                 TMOD &= ~(1<<6);        //Timer1 set As Timer
  63.                 TMOD &= ~0x30;                //Timer1_16bitAutoReload;
  64.                 TH1 = (uint8_t)(BAUD >> 8);
  65.                 TL1 = (uint8_t)BAUD;
  66.                 ET1 = 0;                                                // 禁止Timer1中断
  67. //                INT_CLKO &= ~0x02;        // Timer1不输出高速时钟
  68.         //        INT_CLKO |=  0x02;        // Timer1输出高速时钟
  69.                 TR1  = 1;                        // 运行Timer1
  70.         
  71.         SCON = (SCON & 0x3f) | (1<<6);        // 8位数据, 1位起始位, 1位停止位, 无校验
  72. //        PS  = 1;        //高优先级中断
  73.         ES  = 1;        //允许中断
  74.         REN = 1;        //允许接收        
  75.         
  76. //        if(MasterAdd !=0)
  77. //        {
  78. //                        MyAddStart = 0;
  79. //        }
  80.         
  81.         
  82.         
  83.         OtherMaster = 1;
  84.         OtherMasterChecked = 0;
  85.         DisableSendTimeMs = 0;
  86.         
  87.         SysOverTime = 0;
  88.         Over1min = 0;
  89.         
  90.         RS485_RcevEnable();
  91. }
  92. void UART1_Send_Char(unsigned char c)
  93. {
  94.         RS485_SendEnable();
  95.         _nop_();
  96.         _nop_();
  97.         _nop_();
  98.         SBUF = c;
  99.         while(!TI);        
  100.         TI = 0;
  101.         
  102.         _nop_();
  103.         _nop_();
  104.         _nop_();
  105.         RS485_RcevEnable();
  106. }
  107. void UART1_Send_String(unsigned char *s)
  108. {
  109.         while(*s)
  110.         {
  111.                 UART1_Send_Char(*s++);
  112.         }
  113. }
  114. void UART1_Send_Int(unsigned int c)
  115. {
  116.         UART1_Send_Char(c/10000+0x30);
  117.         UART1_Send_Char(c%10000/1000+0x30);
  118.         UART1_Send_Char(c%1000/100+0x30);
  119.         UART1_Send_Char(c%100/10+0x30);
  120.         UART1_Send_Char(c%10+0x30);
  121.         UART1_Send_Char(0x0d);
  122.         UART1_Send_Char(0x0a);
  123. }
  124. void UART1_Send_Buf(unsigned char *s,unsigned char len)
  125. {
  126.         unsigned char i;
  127.         
  128.         for(i=0;i<len;i++)
  129.         {
  130.                 UART1_Send_Char(s[i]);
  131.         }
  132. }

  133. void UART_Timer_Ms(void)
  134. {
  135.         SysOverTime++;
  136.         if(SysOverTime > 10000)
  137.         {
  138.                 UartErr = 1;
  139.                 MyAddStart = InitStartEnable;
  140.                 ScanTimeMs = 0;
  141.         }
  142.         if(MyAddStart)
  143.         {
  144.                 ScanTimeMs++;

复制代码
回复

使用道具 举报

ID:1042116 发表于 2022-9-12 18:31 | 显示全部楼层
你这个看不出来的,BAUD(波特率)没有初始化,你得自己初始化就是你自己赋值
回复

使用道具 举报

ID:60656 发表于 2022-9-12 18:35 | 显示全部楼层
要先知道时钟频率才能推算
回复

使用道具 举报

ID:149144 发表于 2022-9-12 20:37 | 显示全部楼层
全局搜索一下 “BAUD ”,看看定义的是啥
回复

使用道具 举报

ID:624769 发表于 2022-9-12 20:43 | 显示全部楼层
有奖竞猜么?
自己到
UART.h 里面去找
BAUD 的设定.
回复

使用道具 举报

ID:123289 发表于 2022-9-13 11:22 | 显示全部楼层
重要吗?自己懂得如何算就可以了。可以借鉴代数的方式,设置一个参量代表时钟值,改变值的大小,可以估计一下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表