求大侠赐教,我这个单片机检测红外线低脉冲,返回给PC,程序出了什么问题,我找了很久,详细越好
include<reg52.h>#defineuncharunsignedchar;uchara[70];unchari,flag;sbitp3_3=P3^3;voidm...
include<reg52.h>
#define unchar unsigned char ;
uchar a[70] ;
unchar i,flag;
sbit p3_3=P3^3;
void main()
{
EA=1;
ET0=1;
TH0=(65535-100)/256;
TL0=(65535-100)%256;
ES=1;
TMOD=0X21;
TH1=0XFD;
TL1=0XFD;
SM1=1;
ET1=1;
TR1=1;
EX1=1;
IT1=1;
while(i!=70);
TR0=0;
EX1=0;
for(i=0;i<70;i++) //发送
{
SBUF=a[i];
while(TI!=1);
TI=0;
}
while(1) ;
}
void ex1() interrupt 2
{
TR0=1;
EX1=0;
p3_3=1;
while(p3_3==0);
a[i++]=flag;
flag=0;
EX1=1;
}
void et0 interrupt 1
{
TH0=(65535-100)/256;
TL0=(65535-100)%256;
flag++;
}
晶振为11.0295,p3_3是红外线接收器和MCU 连接处
我的目的是想想通过检测红外线遥控器的低电平的时间(转化可得到),通过串口发给PC
我是个新手,不知道到底哪里出了问题,请给位大侠帮忙,最好是自己下到单片机里运行成功了的 展开
#define unchar unsigned char ;
uchar a[70] ;
unchar i,flag;
sbit p3_3=P3^3;
void main()
{
EA=1;
ET0=1;
TH0=(65535-100)/256;
TL0=(65535-100)%256;
ES=1;
TMOD=0X21;
TH1=0XFD;
TL1=0XFD;
SM1=1;
ET1=1;
TR1=1;
EX1=1;
IT1=1;
while(i!=70);
TR0=0;
EX1=0;
for(i=0;i<70;i++) //发送
{
SBUF=a[i];
while(TI!=1);
TI=0;
}
while(1) ;
}
void ex1() interrupt 2
{
TR0=1;
EX1=0;
p3_3=1;
while(p3_3==0);
a[i++]=flag;
flag=0;
EX1=1;
}
void et0 interrupt 1
{
TH0=(65535-100)/256;
TL0=(65535-100)%256;
flag++;
}
晶振为11.0295,p3_3是红外线接收器和MCU 连接处
我的目的是想想通过检测红外线遥控器的低电平的时间(转化可得到),通过串口发给PC
我是个新手,不知道到底哪里出了问题,请给位大侠帮忙,最好是自己下到单片机里运行成功了的 展开
1个回答
展开全部
发出第一个字节后死机。原因在3。
1、line1缺“#”
2、line2多“;”
3、line13 ES=1;去掉。
1、line1缺“#”
2、line2多“;”
3、line13 ES=1;去掉。
追问
谢谢,这几处确实是,不过还是运行不---KEIL的编译结果
Build target 'Target 1'
assembling STARTUP.A51...
compiling kun.c...
KUN.C(48): error C136: 'et0': 'void' on variable
KUN.C(48): error C129: missing ';' before '{'
Target not created
为什么要把串口ES=1;去掉呢,那不发不出去了?,请教大侠
追答
1、编译主要问题:et0后面加()
2、功能发现的问题:
a。 ES=1表示打开串口中断,不是使能串口。此行去掉;
b。 ET1也要关掉。此行去掉。
c。 TR0忘了关,在flag赋值前。加上TR0=0;
d。 ET0的优先级要高于EX1,配置IP。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询