【求助】用proteus仿真了单片机和串口,烧写了程序,为什么发送的数据总是同一个?
程序是:#include<reg52.h>#include<absacc.h>#defineuintunsignedint#defineucharunsignedchar...
程序是:
#include <reg52.h>#include <absacc.h>#define uint unsigned int#define uchar unsigned charuchar date;uchar recFlag; //接收数据标识,0 未接收数据 1 接收数据
uchar code duma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00}; //共阴的数码管段选,P2口要取的数值uchar code wema[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //P1口的片选位
void init_serial();void send();void receive();
void delay(uint x){ uint a,b; for(a=x;a>0;a--) for(b=50;b>0;b--);}void show(uchar i){ P1=wema[4]; P2=duma[i/1000]; i=i%1000; delay(1); P1=wema[5]; P2=duma[i/100]; i=i%100; delay(1); P1=wema[6]; P2=duma[i/10]; i=i%10; delay(1); P1=wema[7]; P2=duma[i]; delay(1); }
main(){ init_serial(); IE=0; //屏蔽中断 while(1) { show(date); receive(); send();}}
void init_serial() //初始化串口{ TMOD=0x20; //定时器T1使用工作方式2 TH1=255; //设置初值 TH0=255; TR1=1; //开始计时 PCON=0x80; //SMOD=1; SCON=0x50; //工作方式1,波特率9600bit/s,允许接收 TI=1;}
void send(){ if(TI==1) //检测输出是否READY { if(recFlag==1) //是否接收过数据 { SBUF=date; //发送数据 recFlag=0; TI=0; } }}
void receive(){ if(RI==1) //检测是否有数据接收 { date=SBUF; //接收数据 recFlag=1; //设置接收标识符 RI=0; }}
不论给单片机发送什么数据总是接收到:E0,是电路图问题还是程序问题? 展开
#include <reg52.h>#include <absacc.h>#define uint unsigned int#define uchar unsigned charuchar date;uchar recFlag; //接收数据标识,0 未接收数据 1 接收数据
uchar code duma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00}; //共阴的数码管段选,P2口要取的数值uchar code wema[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //P1口的片选位
void init_serial();void send();void receive();
void delay(uint x){ uint a,b; for(a=x;a>0;a--) for(b=50;b>0;b--);}void show(uchar i){ P1=wema[4]; P2=duma[i/1000]; i=i%1000; delay(1); P1=wema[5]; P2=duma[i/100]; i=i%100; delay(1); P1=wema[6]; P2=duma[i/10]; i=i%10; delay(1); P1=wema[7]; P2=duma[i]; delay(1); }
main(){ init_serial(); IE=0; //屏蔽中断 while(1) { show(date); receive(); send();}}
void init_serial() //初始化串口{ TMOD=0x20; //定时器T1使用工作方式2 TH1=255; //设置初值 TH0=255; TR1=1; //开始计时 PCON=0x80; //SMOD=1; SCON=0x50; //工作方式1,波特率9600bit/s,允许接收 TI=1;}
void send(){ if(TI==1) //检测输出是否READY { if(recFlag==1) //是否接收过数据 { SBUF=date; //发送数据 recFlag=0; TI=0; } }}
void receive(){ if(RI==1) //检测是否有数据接收 { date=SBUF; //接收数据 recFlag=1; //设置接收标识符 RI=0; }}
不论给单片机发送什么数据总是接收到:E0,是电路图问题还是程序问题? 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询