|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
完全按照教材的内容,却出现了错误。内容是:甲乙两个单片机利进行串口方式1通信。甲机循环发送数字0-F,并根据乙机的返回值决定发送新数。
甲机
- #include<reg52.h>
- #define uchar unsigned char
- char code map[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9
- void delay(unsigned int time)
- {
- unsigned int j=0;
- for(;time>0;time--)
- for(j=0;j<125;j++);
- }
- void main(void)
- {
- uchar counter=0; //定义计数初值
- TMOD=0x20; //T1定时方式2
- TH1=TL1=0xf4; //2400bps
- PCON=0; //波特率不加倍
- SCON=0x50; //串口方式1,TI和RI清零,允许接收
- TR1=1; //启动T1
- while(1)
- {
- SBUF=counter; //发送联络信号
- while(TI==0) //等待发送完成
- TI=0; //清TI标识位
- while(RI==0); //等待乙机回答
- RI=0;
- if(SBUF==counter) //若返回值与发射值相同则组织新数据
- {
- P2=map[counter]; //显示乙发送值
- if(++counter>9) counter=0; //修正计数器
- delay(500);
- }
- }
- }
复制代码
乙机
- #include<reg52.h>
- #define uchar unsigned char
- char code map[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9
- void delay(unsigned int time)
- {
- unsigned int j=0;
- for(;time>0;time--)
- for(j=0;j<125;j++);
- }
- void main(void)
- {
- uchar counter=0; //定义计数初值
- TMOD=0x20; //T1定时方式2
- TH1=TL1=0xf4; //2400bps
- PCON=0; //波特率不加倍
- SCON=0x50; //串口方式1,TI和RI清零,允许接收
- TR1=1; //启动T1
- while(1)
- {
- SBUF=counter; //发送联络信号
- while(TI==0) //等待发送完成
- TI=0; //清TI标识位
- while(RI==0); //等待乙机回答
- RI=0;
- if(SBUF==counter) //若返回值与发射值相同则组织新数据
- {
- P2=map[counter]; //显示乙发送值
- if(++counter>9) counter=0; //修正计数器
- delay(500);
- }
- }
- }
复制代码
分别加载到两个单片机,却发现P2引脚的电平是1.5v。程序无法正常运行。
这是为什么啊? |
|