STC12c5204AD单片机22.1184晶振如何实现115200波特率串口通信
答案:3 悬赏:50 手机版
解决时间 2021-04-01 03:23
- 提问者网友:温旧梦泪无声
- 2021-03-31 17:46
STC12c5204AD单片机22.1184晶振如何实现115200波特率串口通信
最佳答案
- 五星知识达人网友:举杯邀酒敬孤独
- 2021-03-31 18:06
这个是stc-isp软件生成的串口初始化函数:
void UartInit(void) //115200bps@22.1184MHz
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xF4; //设定定时初值
TH1 = 0xF4; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
void UartInit(void) //115200bps@22.1184MHz
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xF4; //设定定时初值
TH1 = 0xF4; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
全部回答
- 1楼网友:鱼芗
- 2021-03-31 20:44
相同程序的情况下,22的晶振比11的晶振波特率要大一倍
比如在11晶振的情况下的波特率为9600
那么在不改变程序的情况下,换22的晶振后波特率变为19200
比如在11晶振的情况下的波特率为9600
那么在不改变程序的情况下,换22的晶振后波特率变为19200
- 2楼网友:胯下狙击手
- 2021-03-31 19:22
#include
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x40;
TH1 = 0xFF;
TL1 = TH1;
PCON = 0x80;
EA = 1;
ES = 1;
TR1 = 1;
}
void SendOneByte(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}
void main(void)
{
InitUART();
}
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
//add your code here!
}
else
TI = 0;
}
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x40;
TH1 = 0xFF;
TL1 = TH1;
PCON = 0x80;
EA = 1;
ES = 1;
TR1 = 1;
}
void SendOneByte(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}
void main(void)
{
InitUART();
}
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
//add your code here!
}
else
TI = 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯