关于定时器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;       
        }       
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
sanmaodeai
1楼-- · 2019-07-15 22:55
程序的主要用途时采集数据之后将数据通过232传输到电脑上,现在先调试每隔一段时间将固定数据输出到电脑上
阿信509
2楼-- · 2019-07-16 02:01
没看见你的串口中断程序呀
woodmice
3楼-- · 2019-07-16 03:55
 精彩回答 2  元偷偷看……
WJD917108
4楼-- · 2019-07-16 08:01
是一定的啊,你开了串口中断后,又没有写中断程序!自然啊中断后RI=1;了,就无法跳出中断
WJD917108
5楼-- · 2019-07-16 10:49
去掉ES=1;就可以
爱利一生一世
6楼-- · 2019-07-16 16:42
在tmod前,将总中断关掉

一周热门 更多>