关于定时器0和串口的问题

2019-07-15 18:27发布

各位,最近在调试的时候发现个问题,希望大神能帮忙看下是什么原因。
只要程序中ES=1,定时器0工作,但是串口无反应,但是将ES=0注释掉之后,程序就正常了,这是为什么?

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

uchar t0;

void init()
{
        TMOD=0x21;
        TH0=(65536-5000)/256;
        TL0=(65536-5000)%256;
        TR0=1;
        ET0=1;
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;                        //打开定时器1
        REN=1;                        //允许串口接收数据
        SM0=0;                        //10位异步传输
        SM1=1;
        ES=1;           //开串口中断                就是这里,将ES=1注释掉之后程序正常?不解
        EA=1;         //开总中断
}

void main()
{
        init();
        while(1);
}

void timer0() interrupt 1
{
        TH0=(65536-5000)/256;
        TL0=(65536-5000)%256;
        t0++;
        if(t0==20)
        {
                SBUF=0xaa;       
        }       
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。