IAP的串口通信如果你用keil的debug模式必须用串口2去通信
串口2的通信是这样的 115200bps 331776MHz
void UartInit(void){
S2CON = 0x50;
AUXR = 0x14;
T2L = 0xB8;
T2H = 0xFF;
EA = 1;
IE2=0x01;
}
void SendChar(u8 dat)
{
BusyFlag=1;
S2BUF=dat;
while(BusyFlag);
}
void Uart2(void)interrupt 8
{
if(S2CON&S2RI)
{
S2CON&=~S2RI;
}
if(S2CON&S2TI)
{
S2CON&=~S2TI;
BusyFlag=0;
}
}
IAP的串口通信跟以前版本的串口通信差距很大,由于定时器1变成16位自动重装比以前版本定时器1的8位自动重装要好很多,所以方式也变化很多
void UartInit(void) //115200bps@331776MHz{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设定定时器1为16位自动重装方式
TL1 = 0xB8; //设定定时初值
TH1 = 0xFF; //设定定时初值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES=1; //开启串口中断
EA=1; //开启总中断
}
这是不使用debug模式的串口1通讯的初始化
P0=0XF0;
S2BUF=0xfc;
P0=S2BUF;
//为什么这里P0是0x00
你觉得P0应该等于0xfc对不对?之所以出乎你的预料,是因为S2BUF寄存器地址是一个,实际是两个寄存器,一个只读,一个只写。S2BUF=0xfc是写发送缓冲寄存器S2BUF,P0=S2BUF是读接收缓冲寄存器S2BUF,在没有接收的字符时,接收缓冲寄存器S2BUF是未知的,现在恰好是0,P0当然等于0X00。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)