標(biāo)題:
請教哪位大神能從單片機程序里面看出初始波特率是多少?
[打印本頁]
作者:
wangfubin
時間:
2022-9-12 14:53
標(biāo)題:
請教哪位大神能從單片機程序里面看出初始波特率是多少?
#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; //接收數(shù)據(jù)
if(Rcv_Buf[0] == 0x53)
{
recvbyte++;
}
if((Rcv_Buf[recvbyte-1]==0x0a) && (Rcv_Buf[recvbyte-2]==0x0d)) //接收到幀尾
{
RcvFlag = 1; //置位接收標(biāo)志
recvbyte = 0; //接收下標(biāo)清零
}
}
}
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位數(shù)據(jù), 1位起始位, 1位停止位, 無校驗
// PS = 1; //高優(yōu)先級中斷
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++;
復(fù)制代碼
作者:
北道
時間:
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 的設(shè)定.
作者:
yzwzfyz
時間:
2022-9-13 11:22
重要嗎?自己懂得如何算就可以了?梢越梃b代數(shù)的方式,設(shè)置一個參量代表時鐘值,改變值的大小,可以估計一下。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1