|
选择做这个双机串口通讯
其实还有 移位寄存器的 例子,觉得不太常用, 就大概看了下,
还是做这个好了
按照 例子做好 PROTUES 电路
书中代码
但是错误
认真对比了下,将 SP 指针赋值 移到了 i定义 后,就可以通过了
将 SP 堆积指针 这句 去掉可以通过。
SP 初始值07,会和RAM 的R0-R7 重复,一般会后移?
装入HEX 可以正常运行。
但是我还是有疑问,
TI和RI 共一个中断入口,
这个程序并没有 在中断 程序中区别 TI,RI 中断。
发现这个调试功能很有作用,可以 手动设置 TI RI 位,
然后单步,可以跳出循环 或者进入中断,
于是在中断程序里面 加了 TI ,RI 的判断。
#include <reg51.h>
void main ()
{
unsigned char i;
//SP=0x60; 堆栈调整,
SCON=0x50; //串口方式1,
TMOD=0x20; // 定时器T1方式2
TL1=0xe6; //定时器初始值装载
TH1=0xe6;
TR1=1; // 启动定时器
EA=1; // 中断 串口允许
ES=1;
while(1)//发送部分
{
P1=0xFF; // P1口重置
i=P1; //读P1口
SBUF=i; //发送其数据
while(TI==0); //等待数据发送完成
TI=0;// 串口发送中断清除
}
}
void funins() interrupt 4 //串口中断 程序入口
{
EA=0; //关中断
if (TI==0) //判断 是否为接受中断
{ RI=0; // 串口 接受中断 清除
P2=SBUF; // 写P2口
};
EA=1; //开中断
}
HEX 加载入 PROTUES 也可以运行。
问题:
1,将 2个单片机设置不同的时钟频率,显示会乱,这个可以理解,自同步波特率又是怎么实现的?
2,SP 应该在所有变量定义后再调整,否则会出错,可能是KEIL编译规则要求?
3,这些控制字的值,看来是记不住了,只有用的时候看书来计算了,上76E003只有看说明书了。
4,这本教材上面BUG 不少。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|