微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于定时器0和串口的问题

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

时间:10-02 整理:3721RD 点击:
各位,最近在调试的时候发现个问题,希望大神能帮忙看下是什么原因。
只要程序中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;       
        }       
}

程序的主要用途时采集数据之后将数据通过232传输到电脑上,现在先调试每隔一段时间将固定数据输出到电脑上

没看见你的串口中断程序呀

你开串口中断有啥用?在那里出来串口中断?
你一开串口中断,可能串口一中断,程序就飞了吧

是一定的啊,你开了串口中断后,又没有写中断程序!自然啊中断后RI=1;了,就无法跳出中断

去掉ES=1;就可以

在tmod前,将总中断关掉

开了串口中断,每发送或接收一字节数据都会进入串口中断,并且只有清除了串口中断标志位才会退出中断。没有对应的中断函数,那么程序就一直停留在串口中断入口,等待TI或RI清零

嗯,昨天晚上想了很久,也判断是这个问题,今天测试下看看

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top