#include#include char putchar(char c); void SendStr(unsigned char *s); void SendByte(unsigned char dat); void InitUART (void); //void InitUART ( unsigned char baud) //{ // // SCON = 0x50; // SCON: 模式 1, 8-bit UART, 始能接收 // TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装 // TH1=256-11059200/32/12/baud; // TL1=TH1; //11.0592MHZ // // TR1 = 1; // TR1: timer 1 // ES = 1; // EA = 1; PCON|=0x80; //SMOD置1,波特率倍增为19200 // //} void InitUART (void) { SCON = 0x50; // SCON: 模式 1, 8-bit UART, 始能接收 TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装 TH1=0xfd; TL1=TH1; //11.0592MHZ TR1 = 1; // TR1: timer 1 ES = 1; EA = 1; // PCON|=0x80; //SMOD置1,波特率倍增为19200 } void main (void) { InitUART(); printf("hellow word rn"); SendStr("The UART test rn"); while (1) { } } void SendByte(unsigned char dat) { SBUF = dat; while(!TI); TI = 0; } void SendStr(unsigned char *s) { while(*s!=' ') { SendByte(*s); s++; } } void UART_SER (void) interrupt 4 { unsigned char Temp; if(RI) //判断是否接收中断产生 { RI=0; //标志位清零 Temp=SBUF; //读入缓冲区的值 SendByte(SBUF); SBUF=Temp; //把接收到的值再发回电脑端 } if(TI) //如果是发送标志位,清零 TI=0; } char putchar(char c) //重写此函数才能用printf输出函数 { SendByte(c); return c; }
接收结果(下载程序成功之后记得按一下板子上的下载键)
发送结果(发送的时候点HEX模式接收)
当为文本模式的时候(发出的数据会自动转换成ASCII码表上16进制对应的数)
PS:附上一张接线图,总之串口通信还是挺简单的,可以作为一个调试结果的小助手。



