打印

为什么我的51单片机没有进入接收中断,而是不断发送数据

[复制链接]
933|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lanjawony|  楼主 | 2017-8-9 10:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;

//#define TXX        P3^0//模块的TXD
//#define RXX P3^1
//sbit busyIO=P3^2;       

void Uart_Send_String(u8 *string);


/*******************************************************************************
* 函数名         :UsartInit()
* 函数功能                   :设置串口
* 输入           : 无
* 输出                  : 无
*******************************************************************************/
void UsartInit()
{
        SCON=0X50;                        //设置为工作方式1
        TMOD=0X20;                        //设置计数器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF4;                                //计数器初始值设置,注意波特率是4800的
        TL1=0XF4;
        ES=1;                                                //打开接收中断
        EA=1;                                                //打开总中断
        TR1=1;                                        //打开计数器
}
void Delay_Us(u8 us)
{
while(us--);
}

void delay1ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{       
        EA = 1;
        ES = 1;
        UsartInit();
        while(1)
        {

        delay1ms();
        Uart_Send_String("    \n");
        Uart_Send_String("play,0001,$");
        Uart_Send_String("    \n");
        delay1ms();       
        delay1ms();
        }
       
        delay1ms();       


        }  //        串口初始化
               


/*******************************************************************************
* 函数名         : Usart() interrupt 4
* 函数功能                  : 串口通信中断函数
* 输入           : 无
* 输出                  : 无
*******************************************************************************/
void Usart() interrupt 4  //这里有问题
{
        u8 a;
        if(RI)
        {
                a = SBUF;
                delay1ms();
        }               
        else
        {while(!TI);
        TI = 0;        }
}

void sendtouart(u8 dat)
{
         ES = 0;
         TI = 0;
         SBUF = dat;  
         while(!TI);  //这里没有执行
         TI = 0;
         ES = 1;
}

void Uart_Send_String(u8 *string)
{
        while(*string)
        {
                sendtouart(*string++);
                Delay_Us(5);
        }
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝