标题:
请教哪位大神能从单片机程序里面看出初始波特率是多少?
[打印本页]
作者:
wangfubin
时间:
2022-9-12 14:53
标题:
请教哪位大神能从单片机程序里面看出初始波特率是多少?
#include "UART.h"
#include "Key.h"
#include "Record.h"
uint8_t Rcv_Buf[RCV_LENGTH];
uint8_t Snd_Buf[SND_LENGTH];
volatile uint8_t recvbyte=0;
uint8_t RcvFlag = 0;
volatile uint16_t ScanTimeMs;
volatile uint16_t SysOverTime;
uint8_t InitStartEnable;
uint8_t SendAdd;
uint16_t SysCallStatus1=0;
uint16_t SysCallStatus2=0;
uint16_t SysCallStatus1Bak=0;
uint16_t SysCallStatus2Bak=0;
uint16_t alarm = 0;
bit MyAddStart;
bit Over1min;
bit OverTimeFlag;
bit OtherMaster;
bit OtherMasterChecked;
volatile uint16_t DisableSendTimeMs;
volatile uint16_t u16_OverTimeMs;
void UART1_ISR() interrupt 4 using 1
{
if(RI)
{
RI = 0;
SysOverTime = 0;
UartErr = 0;
Rcv_Buf[recvbyte] = SBUF; //接收数据
if(Rcv_Buf[0] == 0x53)
{
recvbyte++;
}
if((Rcv_Buf[recvbyte-1]==0x0a) && (Rcv_Buf[recvbyte-2]==0x0d)) //接收到帧尾
{
RcvFlag = 1; //置位接收标志
recvbyte = 0; //接收下标清零
}
}
}
void Uart1_Init(void)
{
// SCON = 0x50;
// TMOD &= 0x0f;
//
// TH1 = BAUD>>8;
// TL1 = BAUD;
//
// TR1 = 1;
// AUXR |= 0x40;
// ES = 1;
// EA = 1;
//
//
// RS485_RcevEnable();
TR1 = 0;
AUXR &= ~0x01; //S1 BRT Use Timer1;
AUXR |= (1<<6); //Timer1 set as 1T mode
TMOD &= ~(1<<6); //Timer1 set As Timer
TMOD &= ~0x30; //Timer1_16bitAutoReload;
TH1 = (uint8_t)(BAUD >> 8);
TL1 = (uint8_t)BAUD;
ET1 = 0; // 禁止Timer1中断
// INT_CLKO &= ~0x02; // Timer1不输出高速时钟
// INT_CLKO |= 0x02; // Timer1输出高速时钟
TR1 = 1; // 运行Timer1
SCON = (SCON & 0x3f) | (1<<6); // 8位数据, 1位起始位, 1位停止位, 无校验
// PS = 1; //高优先级中断
ES = 1; //允许中断
REN = 1; //允许接收
// if(MasterAdd !=0)
// {
// MyAddStart = 0;
// }
OtherMaster = 1;
OtherMasterChecked = 0;
DisableSendTimeMs = 0;
SysOverTime = 0;
Over1min = 0;
RS485_RcevEnable();
}
void UART1_Send_Char(unsigned char c)
{
RS485_SendEnable();
_nop_();
_nop_();
_nop_();
SBUF = c;
while(!TI);
TI = 0;
_nop_();
_nop_();
_nop_();
RS485_RcevEnable();
}
void UART1_Send_String(unsigned char *s)
{
while(*s)
{
UART1_Send_Char(*s++);
}
}
void UART1_Send_Int(unsigned int c)
{
UART1_Send_Char(c/10000+0x30);
UART1_Send_Char(c%10000/1000+0x30);
UART1_Send_Char(c%1000/100+0x30);
UART1_Send_Char(c%100/10+0x30);
UART1_Send_Char(c%10+0x30);
UART1_Send_Char(0x0d);
UART1_Send_Char(0x0a);
}
void UART1_Send_Buf(unsigned char *s,unsigned char len)
{
unsigned char i;
for(i=0;i<len;i++)
{
UART1_Send_Char(s[i]);
}
}
void UART_Timer_Ms(void)
{
SysOverTime++;
if(SysOverTime > 10000)
{
UartErr = 1;
MyAddStart = InitStartEnable;
ScanTimeMs = 0;
}
if(MyAddStart)
{
ScanTimeMs++;
复制代码
作者:
北道
时间:
2022-9-12 18:31
你这个看不出来的,BAUD(波特率)没有初始化,你得自己初始化就是你自己赋值
作者:
zxq9781
时间:
2022-9-12 18:35
要先知道时钟频率才能推算
作者:
cuihaodianzi
时间:
2022-9-12 20:37
全局搜索一下 “BAUD ”,看看定义的是啥
作者:
188610329
时间:
2022-9-12 20:43
有奖竞猜么?
自己到
UART.h 里面去找
BAUD 的设定.
作者:
yzwzfyz
时间:
2022-9-13 11:22
重要吗?自己懂得如何算就可以了。可以借鉴代数的方式,设置一个参量代表时钟值,改变值的大小,可以估计一下。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1