登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

[求助]串口中断应用的演示程序

作者:490386390 栏目:单片机

我运行这个程序没有错误,下载到单片机上问题就出现了,当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 编辑过」
参与讨论
昵称:
讨论内容:
 
 
相关帖子
关于用89S52控制直流电机使小车完成四向转动与速度调整...
程序员请进
彩色液晶屏控制驱动板
波形和参数在线可编程的功率电源及其应用的设计问题
世界上最小的数字图像采集卡
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号