单片机串口通信的问题
时间:10-02
整理:3721RD
点击:
- P0=0xf0;
- S2BUF=0xfc;
- P0=S2BUF; //为什么这里P0=0X00?
- while(!(S2CON & S2TI));
- S2CON &= ~S2TI;
单片机相同是STC15F60s2波特率相同,误差%0为什么P0会是0x00?中断里面什么都没
还是S2BUF读和写代表不同的寄存器?
- void main()
- {
- P_SW2 |= S2_S0; //S2_S0=1 (P4.6/RxD2_2, P4.7/TxD2_2)
- S2CON = 0x50; //8位数据,可变波特率
- AUXR |= 0x01; //串口1选择定时器2为波特率发生器
- AUXR |= 0x04; //定时器2时钟为Fosc,即1T
- T2L = 0x8F; //设定定时初值
- T2H = 0xFD; //设定定时初值
- AUXR |= 0x10; //启动定时器2
- IE2=0x01;
- EA=1;
- P0=0XF0;
- S2BUF=0xfc;
- P0=S2BUF; //为什么这里P0是0x00 ?
- while(!(S2CON & S2TI));
- S2CON &= ~S2TI;
- while(1)
- {
- }
- }
- void Uart2() interrupt 8 using 1
- {
- }
P0=S2BUF=0xfc;没有等于0x00。
我也知道啊,我是说,实物测试,无所谓P0是0x00
串口助手接收到的,确实是0xfc没错
这个有道理,S2BUF是2个寄存器,同个地址,收发相同地址,只是,应该如何印证确实是这样的呢
名字相同的缓冲器S2BUF,为什么能实现双机通信(发送和接收)?
名字相同地址不同啊,就相当于有2个缓冲器!
能实现发送和接收已经证明名称相同地址不同。
确定P0=0X00么? P0=0Xfc
不是的,手册说到,S2BUF是 发送缓存器和接收缓存器,是2个不同寄存器,但他们共用1个地址,共用1个名字,由CPU自己判断
确定、肯定、一定
既然有2个寄存器,就有2个地址,只是入口地址一样,但并不代表2个寄存器的地址就一样,如果一样的话,CPU就无法判断。
小编用串口肯定遇到了问题,何必拐弯抹角?不妨直接说出来!
没有遇到问题啊,就是为什么P0=0x00....晕...没拐弯,很直接了....
真是共用1个地址
问题已经解决。
虽然你不是正确答案,但你给了我提示,让我找到了答案,谢谢
谢谢拉,这就是我的最爱啦
大家一起共同学习
最近在研究 学习学习