f2812请问波特率寄存器的初始值如何确定
答案:1 悬赏:40 手机版
解决时间 2021-03-21 09:56
- 提问者网友:太高姿态
- 2021-03-20 09:16
f2812请问波特率寄存器的初始值如何确定
最佳答案
- 五星知识达人网友:等灯
- 2021-03-20 09:51
//串口工作方式1,9600,8,1,n 定时器1为通讯波特率发生器
SCON = 0x50; //SM1=1串口工作方式1,REN=1允许接收[10URART,T1控制波特率,1位起始,1位停止,无奇偶校验]
PCON |= 0x80; //SMOD=1,波特率加倍
TMOD |= 0x20; //M1=1,定时器1模式2,8位自动重载时间
TH1 = 0xFA; //波特率:9600 晶振:11.0592MHz
TL1 = 0xFA;
IE |= 0x90; //打开串口1中断
TR1 = 1; //启动定时器1
上面的就可以了。
呃,这么久了还没解决么?
#include <AT89X52.H>
void main()
{
T2MOD = 0x01; //自动重载
T2CON = 0x30; //T2用做发送接收时钟
TH2 = 0xFF; //9600波特率,11.0592Mhz晶振
TL2 = 0xDC;
RCAP2H = 0xFF;
RCAP2L = 0xDC;
SCON = 0x50; //串口方式1,1个起始位,1个停止位,8位数据
TR2 = 1; //启动T2
while(1)
{
SBUF = 0xaa;
while( TI==0 );
TI = 0;
}
}
仿真通过。波特率9600,1个起始位,1个停止位,8位数据
SCON = 0x50; //SM1=1串口工作方式1,REN=1允许接收[10URART,T1控制波特率,1位起始,1位停止,无奇偶校验]
PCON |= 0x80; //SMOD=1,波特率加倍
TMOD |= 0x20; //M1=1,定时器1模式2,8位自动重载时间
TH1 = 0xFA; //波特率:9600 晶振:11.0592MHz
TL1 = 0xFA;
IE |= 0x90; //打开串口1中断
TR1 = 1; //启动定时器1
上面的就可以了。
呃,这么久了还没解决么?
#include <AT89X52.H>
void main()
{
T2MOD = 0x01; //自动重载
T2CON = 0x30; //T2用做发送接收时钟
TH2 = 0xFF; //9600波特率,11.0592Mhz晶振
TL2 = 0xDC;
RCAP2H = 0xFF;
RCAP2L = 0xDC;
SCON = 0x50; //串口方式1,1个起始位,1个停止位,8位数据
TR2 = 1; //启动T2
while(1)
{
SBUF = 0xaa;
while( TI==0 );
TI = 0;
}
}
仿真通过。波特率9600,1个起始位,1个停止位,8位数据
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯