注册 登录
编程论坛 嵌入式开发

关于单片机通信问题

w838068053 发布于 2015-01-15 11:40, 4965 次点击
本人刚学习到51单片机的串口通信,产生了一点小疑惑,正常由单片机开发出的产品,它们的通信和串口中断是一直开着的吗?如果是的话,它长期占用中断和定时器,会对其他的程序产生影响吗?如果不是的话,下面是我写的简单的小程序,帮忙看一下,如何设置让有信号接收时,再打开中断和设置定时器等。
#include <reg52.h>
unsigned char i=0xFF;//设定初值,确保小灯是全灭。
void main()
{
 TH1=0xF3;     //计时器1设置工作模式2,波特率2400。
 TL1=0xF3;
 TMOD=0x20;
 ES=1;         //串口中断开
 SCON=0x50;     //串行通信模式选择
 PCON=0x00;     //波特率不加倍
 EA=1;         //总中断开
 TR1=1;         //计时器1运行
 while(1)
 {

   P2=i;  //控制小灯的亮灭
 }
}
void CKZD()interrupt 4    //串口中断函数
{
 i=SBUF;
 RI=0;
}
4 回复
#2
tlliqi2015-01-15 14:01
会的快来
#3
embed_xuel2015-01-15 14:33
楼主去查查中断是什么?
长期占用中断和定时器-------这句我看不懂
#4
w8380680532015-01-15 15:52
回复 3楼 embed_xuel
您好,我现在初学,不是很了解串口通信,是不是用单片机开发的带通信的设备,只要写入了串口通信程序改程序就要一直开着?
像     SCON=0X50;            //设置为工作方式1
    TMOD=0X20;            //设置计数器工作方式2
    PCON=0X80;        //SMOD=1,波特率加倍
    TH1=0XF3;        //计数器初始值设置,注意波特率是4800的
    TL1=0XF3;
    ES=1;                    //打开接收中断
    EA=1;                        //打开总中断
    TR1=1;
以上设置中断和计时器1,就不能关?
我本来想在单片机中接受信息有一个起始位,能不能由这一位起始位先检测到低电平,再开启上面的那些设置,检测到结束为就将EA=0,TR1=0。这样来实现我原来给的功能。我的想法行不行的通?
我知道串口中断即使开启,在不接受信息时也不开启。可能没啥影响,但计时器1到底是不是一直在运行,这样会不会出现占用运行,影响运行速度等小的问题
#5
hu9jj2015-01-26 16:51
中断开启理论上是要占用CPU资源,在一定程序上会影响到程序的运行。但是,这个影响几乎可以是忽略不计的,因为非常之小。
1