51单片机串口中断的问题
#include<AT89x52.H>unsignedcharcount;//==============================================...
#include <AT89x52.H>
unsigned char count;
//=================================================
void main ()
{
TMOD = 0x20; //定时器1工作方式2自动重装8位计时器
TH1 = 0xFD; //波特率9600
TL1 = 0xFD;
SM0 = 0; //串行口工作方式1
SM1 = 1;
EA = 1;
TR1 = 1;
ES = 1;
REN = 1;
count=0;
while (1)
{
if(P1_0==0&&P1_1==1)
{
while(P1_1==1&&P1_0==1);
count++;
}
if(P1_1==0&&P1_0==1)
{
while(P1_1==1&&P1_0==1);
count--;
}
}
}
//=================================================
void serial() interrupt 4
{
if(RI==1)
{
RI=0;
if(SBUF==2)
count=0;
SBUF=count;
ES=0;
while(!TI);
TI=0;
ES=1;
}
}
电路无任何问题,RXD用示波器测试有波形。
但就是没有TXD口就是没有输出。
接收数据跟发送数据都是在中断函数内完成的 ,跟主程序没有关系
哪位达人帮忙看下问题出在哪 展开
unsigned char count;
//=================================================
void main ()
{
TMOD = 0x20; //定时器1工作方式2自动重装8位计时器
TH1 = 0xFD; //波特率9600
TL1 = 0xFD;
SM0 = 0; //串行口工作方式1
SM1 = 1;
EA = 1;
TR1 = 1;
ES = 1;
REN = 1;
count=0;
while (1)
{
if(P1_0==0&&P1_1==1)
{
while(P1_1==1&&P1_0==1);
count++;
}
if(P1_1==0&&P1_0==1)
{
while(P1_1==1&&P1_0==1);
count--;
}
}
}
//=================================================
void serial() interrupt 4
{
if(RI==1)
{
RI=0;
if(SBUF==2)
count=0;
SBUF=count;
ES=0;
while(!TI);
TI=0;
ES=1;
}
}
电路无任何问题,RXD用示波器测试有波形。
但就是没有TXD口就是没有输出。
接收数据跟发送数据都是在中断函数内完成的 ,跟主程序没有关系
哪位达人帮忙看下问题出在哪 展开
1个回答
展开全部
我粗看了一下,问题可能出在终端程序里。
void serial() interrupt 4
{
if(RI==1)
{
RI=0;
if(SBUF==2)
count=0;
SBUF=count;//问题在这里
ES=0;
while(!TI);
TI=0;
ES=1;
}
}
按照常理SBUF=count就会启动发送。。但是你要看啊,你在串口的中断程序里写这句什么用都没有的。。串口中断程序里面是自动屏蔽串口中断的。。不然多集嵌套会混乱的。你要把SBUF放到中断程序外面才行。
你如果希望在已收到东西就发送的话可以在中断里设一个标志位abc..
void serial() interrupt 4
{
if(RI==1)
{
RI=0;
if(SBUF==2)
count=0;
if(TI==1)
{
TI=0;
}
abc=1;
}
main()
{
if (abc)
{
SBUF=count;
abc=0;
}
void serial() interrupt 4
{
if(RI==1)
{
RI=0;
if(SBUF==2)
count=0;
SBUF=count;//问题在这里
ES=0;
while(!TI);
TI=0;
ES=1;
}
}
按照常理SBUF=count就会启动发送。。但是你要看啊,你在串口的中断程序里写这句什么用都没有的。。串口中断程序里面是自动屏蔽串口中断的。。不然多集嵌套会混乱的。你要把SBUF放到中断程序外面才行。
你如果希望在已收到东西就发送的话可以在中断里设一个标志位abc..
void serial() interrupt 4
{
if(RI==1)
{
RI=0;
if(SBUF==2)
count=0;
if(TI==1)
{
TI=0;
}
abc=1;
}
main()
{
if (abc)
{
SBUF=count;
abc=0;
}
追问
多谢。那么如果写在主程序里的话,
执行到SBUF=count这句的时候,
又会触发中断函数么?
追答
你再刷新一遍。。我的回答更新咯哦
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询