代码如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit led=P1^1;
uchar rebuf[32],renum=0,flagRI=0,numpm25=0;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint xms);
void display(uchar t)
{
uchar ge,shi,bai;
ge=t%10;
shi=t%100/10;
bai=t/100;
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(5);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(5);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delayms(5);
}
void init()
{
TMOD=0x20; //设定T1定时器工作方式2
TH1=0xfd; //装初值
TL1=0xfd;
TR1=1; //启动T1定时器
REN=1;//允许串口接收
SM0=0; //设定串口工作方式
SM1=1;
EA=1; //开总中断
ES=1; //开串口中断
}
void main()
{
init();
while(1)
{
if(flagRI==1)
{
// led=0;
// display(numpm25);
flagRI=0;
}
}
}
void receive() interrupt 4
{
if(RI==1)
{
// led=0;
RI=0; //清除标志位
rebuf[renum++]=SBUF; //单片机接收串口数据
if(!(rebuf[0]==0xaa)) //如果帧头错误,清缓存
{
renum=0;
rebuf[0]=0;
}
led=0;
if(renum==10) //数据接收完毕
{ //led=0;
if(rebuf[9]==0xab) //判断帧尾
{
numpm25=(rebuf[3]*256+rebuf[2])/10;
flagRI=1;
}
renum=0; //清缓存
}
}
}
有没有大佬能帮我看一下,,
此帖出自
小平头技术问答
手里有一块开发板,我是将传感器的TX RX 分别接到单片机P3^0和P3^1口,程序烧好后将传感器GND接GND,VCC接VCC,这样对吗?串口配置除了波特率又那些要特别注意?
请问我的代码有问题吗?
有设备就测一下 传感器发送的波形。确定 传感器发送了了数据。就检查一下单片机能不能进入接收中断。。
在中断里,把一个变量置为1. 主循环,里,进行判断,根据变量值 串口打印数据 。
代码里设置了flagRI,收到10个数据判断帧尾帧尾正确后flagRI置1,主函数里判断flagRI是1的话数码管扫描数据,是这样吗?
一周热门 更多>