MCU发送一个字符串后(复位有效),后等待PC发送并又返回给PC显示
晶振11.0592MHz,发送和接收使用的格式相同,如都使用字符型格式,按下复位键,则PC显示Crazy_Didong!,在单子串发送去填入相应的字符串/字符,则PC显示相应的字符串/字符。
#include<reg52.h> //串口初始化 void InitUART (void) { SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收 TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装 TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz TR1 = 1; // TR1: timer 1 打开 EA = 1; //打开总中断 //ES = 1; //打开串口中断,这个必须加,否则不执行中断服务子程序 } //发送一个字节 void SendByte(unsigned char dat) { SBUF = dat; while(!TI); TI = 0; //这条语句不可以注释掉,因为当TI = 1时候,又因为ES = 0,所以就不会直接跳到中断服务子程序里面了,所以就必须清零 } //发送一个字符串 void SendStr(unsigned char *s) { while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾 { SendByte(*s); s++; } } //主函数 void main (void) { InitUART(); SendStr("Crazy_Didong!"); ES = 1; //如果上面的加了ES = 1后,则PC只显示一个C而已 while (1) { } } //串口中断程序 void UART_SER (void) interrupt 4 { unsigned char Temp; //定义临时变量 if(RI) //判断是接收中断产生 { RI=0; //标志位清零 Temp=SBUF; //读入缓冲区的值 P1=Temp; //把值输出到P1口,用于观察 SBUF=Temp; //把接收到的值再发回PC } if(TI) //如果是发送标志位,清零 TI=0; }
浙公网安备 33010602011771号