void UART_init()
{
PCON = 0x80;
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
SCON = 0x50;
TR1 = 1;
ES=1;
EA=1;
}
tmod的位功能设置:
定时器工作方式寄存器TMOD的位功能定义
D3 D2 D1 D0:T0工作方式控制
D1 D0:方式选择00:方式0,01:方式1,10:方式2,11:方式3
D2:计数/定时方式选择,1:计数,0:定时
D3:外接INT1控制使能,1:允许,0:禁止
D7 D6 D5 D4:T1工作方式控制
按顺序与上面4位对应。
看你要做什么,才能告诉你如何设置。书上都有,不知道你哪点不明白。
你的串口初始化函数:
PCON = 0x80; 设置波特率因子,详见教科书中波特率计算
TMOD = 0x20; T1设定方式2,用于波特率发生器
TH1 = 0xfd; T1的波特率参数。波特率与你采用的系统时钟频率有关,所以虽然设定了T1的波特率参数,还不能确定波特率是多少。
TL1 = 0xfd;
SCON = 0x50; 设定了串行口方式1,允许接收;
TR1 = 1;启动T1波特率发生器,注意要关T1中断
ES=1; 你开了串行中断,相应的要采用中断方式收、发串行口数据
EA=1; 开中断总开关
想要得到19200Baud, 11.0592Mhz,为什么设置 TH1 = 0xfd; TL1 = 0xfd;
追答如果PCON为0X00,那么波特率是9600 ,但你这里PCON=0X80 ,就是说波特率要X2了。
本回答被网友采纳