单片机定时器0执行按键扫描时与串口通信无法同时进行,求大神讲解

9ood. 2019-02-25 01:15:56
我是一名大一刚入门单片机的菜鸟,在做单片机程序的时候发现,单片机定时器0执行按键扫描时与串口通信无法同时进行,求大神们指导。

#include<reg52.h>
void main()
{

EA = 1;
ENLED = 0;
ADDR3 = 1;
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
ConfigTimer0(1); //设置1ms中断,中断进行按键扫描
ConfigUART();
while(1)
{
KeyDriver(); //执行按键扫描结果,具体内容我就不写出来了,这部分程序我调试了是没问题的
}
}
void ConfigTimer0(unsigned int ms)
{
unsigned long tmp;
tmp = 11059200 / 12;
tmp = (tmp * ms) / 1000;
tmp = 65536 - tmp;
T0RH = (unsigned char)(tmp>>8); T0RL = (unsigned char)tmp;
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = T0RH;
TL0 = T0RL;
ET0 = 1;
TR0 = 1;
}

void InterruptTimer0() interrupt 1
{
static char k=0;
TH0 = T0RH;
TL0 = T0RL;
KeyScan();
tmr300ms++;
if (tmr300ms >= 150) //这个请忽略 我后来用来定时300ms用的
{
tmr300ms = 0;
flag300ms = 1;
}

void ConfigUART()
{
RCAP2L=0xDC;
RCAP2H=0xFF;
T2CON=0x34;
SCON=0xD0;
SM1=1;
REN = 1;
RI=0x00;
TI=0x00;
IE=0x90;
ES = 1;
}

void InterruptUART() interrupt 4
{

if (RI)
{
RI = 0;
SBUF =SBUF+1;
}
if (TI) TI = 0;
}
...全文
308 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yishumei 2019-02-27
  • 打赏
  • 举报
回复
引用 2 楼 9ood. 的回复:
我把UART通信用定时器1来做了 ,同时用定时器1的还有红外通信,如何切换两种通信方式呢。 我定义了一个bit型变量,在按键按下时这个变量改变. 在while(1)循环中我用了if语句 如果bit==0就初始化红外,如果bit==1就定义9600波特率 但是在实际运行中红外通信一直能用,UART通信一直不可以,无论如何按那个按键都能实现(而且按键和红外是都可以用的)
楼主,按照你的描述,KeyDriver(); 没有检测到按键按下,先查这个问题的原因吧。
9ood. 2019-02-26
  • 打赏
  • 举报
回复
我把UART通信用定时器1来做了 ,同时用定时器1的还有红外通信,如何切换两种通信方式呢。
我定义了一个bit型变量,在按键按下时这个变量改变.
在while(1)循环中我用了if语句 如果bit==0就初始化红外,如果bit==1就定义9600波特率
但是在实际运行中红外通信一直能用,UART通信一直不可以,无论如何按那个按键都能实现(而且按键和红外是都可以用的)
#include<reg52.h>

void InitInfrared()
{
IR_INPUT = 1; //红外接收引脚
TMOD &= 0x0F;
TMOD |= 0x10;
TR1 = 0;
ET1 = 0;
IT1 = 1;
EX1 = 1;
}

void ConfigUART(unsigned int baud)
{
SCON = 0x50;
TMOD &= 0x0F;
TMOD |= 0x20;
TH1 = 256 - (11059200/12/32)/baud;
TL1 = TH1;
ET1 = 0;
ES = 1;
TR1 = 1;
}

viod main()
while(1)
{
KeyDriver(); //按键执行 按下之后cc++;
if(cc==0)
InitInfrared();
else if(cc==1)
{
ConfigUART(9600); //配置波特率
}
dceacho 2019-02-26
  • 打赏
  • 举报
回复
可能KeyScan(); 耗时太长,51没有中断嵌套,这个耗时长了串口中断就没法及时执行

27,520

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧