/****实验现象:通过PC的超级终端向MCU发'A',能给返回'B',以此类推;
并且按下S4键能向PC机发'A'。******/
#include <reg52.h>
sbit WINT1=P3^3; // 外部中断,接S4按键
/*
*****初始化子函数
*/
void init() {
PCON=0x00; //波特率不加倍
TMOD=0x20; //定时器1用作波特率发生器(具有自动重装载初值的功能)
SCON=0x50; //8为异步收发,波特率可变(由定时器控制)选择串口方式1,接收允许
TH1=0x0fd;
TL1=0x0fd; //设置波特率为9600bps,晶振11.0592MHz
RI=0; //清标志位
TI=0;
TR1=1; //开启计数T1
ES=1; //开串口中断
IT1=1; //设置为跳变触发方式
EX1=1; //开外部中断1
EA=1; //开总中断
}
/*
*****主函数
*/
void main(){
init();
while(1); //延时等待中断
}
/*
*****串口中断服务子函数
*/
void uart_interrupt (void) interrupt 4{
char date;
ES=0; //关闭串口中断
if(TI) { //判断是发送中断
TI=0; //清除发送中断标志
}
else {
date=SBUF; //数据缓存到date中
RI=0; //清除接收中断标志
date++; //数据处理
SBUF=date; //返回数据
}
ES=1; //打开串口中断
}
/*
*****外部中断服务子函数
*/
void int1_interrupt(void) interrupt 2 {
while(!WINT1); //按键松手检测
SBUF=0X41; //发送字符数据A
}