我运行这个程序没有错误,下载到单片机上问题就出现了,当pc机输入任何字符时,从单片机返回的都是“N”,与程序要求不符合。我不知道是什么问题? /******************************************************************************* Title: 演示程序 - 串口中断应用 * NAME: UART.c * Date: 2006-4-15 * Ver: 1.0 * * * ******************************************************************************** 本实验实现串口中断实验,通过中断和计算机进行通信 * 首先接受联机信号,然后接受计算机的相关控制信号 * 本实验中,采用发送不同的字符给计算机来模拟接收到的不同的计算机控制命令 * 通过扩展,可以实现不同的功能 * * * * * * ********************************************************************************/
#include <AT89X52.H> #include <stdio.h> #define uCHAR unsigned CHAR; uCHAR time,b_break,b_break_3; unsigned int buf; void waitsend() { while(!TI) { }; TI = 0; } //串行中断程序 void int_s(void) interrupt 4 { ES = 0; //关闭串行中断 RI = 0; //清除串行接受标志位 // buf = SBUF; //从串口缓冲区取得数据 // P1 = buf; //数据送往p1口显示出来 if(buf == 255) SBUF = 255; //发送联络信号 else{ SWITCH(buf) { case 1: SBUF = 'M',waitsend();break; //如果接受到1,发送字符'M'给计算机 case 2: SBUF = 'C',waitsend();break; //如果接受到2,发送字符'C'给计算机 case 3: SBUF = 'S',waitsend();break; //如果接受到3,发送字符'S'给计算机 case 4: SBUF = '5',waitsend();break; //如果接受到4,发送字符'5'给计算机 case 5: SBUF = '1',waitsend();break; //如果接受到5,发送字符'1'给计算机 default: SBUF = 'N',waitsend();break; //如果接受到其它数据,发送n给计算机 } } ES = 1; //允许串口中断
}
void main(void) { P0 = 0; P2 = 255; //关闭数码管显示 EA=1; SCON=0x50;PCON=0X80; TMOD=0x20;ES = 1; TL1=TH1=0xf3;TR1=1; //串口工作在模1,波特率4800@12MHZ" target="_blank" >4800@12MHZ)
while(1); //无限循环等待串行中断 }
「该帖子被 490386390 在 2007-5-11 22:20:31 编辑过」 |