数码之家

 找回密码
 立即注册
搜索
查看: 2549|回复: 0

[C51] 单片机原理 C51 ,PROTUES仿真 串口 双机通讯

[复制链接]
发表于 2020-12-26 22:00:23 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
01.jpg

选择做这个双机串口通讯

其实还有 移位寄存器的 例子,觉得不太常用, 就大概看了下,
还是做这个好了

图像 052.jpg

图像 055.jpg

按照 例子做好 PROTUES 电路

图像 056.jpg

书中代码

图像 057.jpg

但是错误

图像 058.jpg

认真对比了下,将 SP 指针赋值 移到了 i定义 后,就可以通过了
图像 059.jpg
将 SP 堆积指针 这句 去掉可以通过。

SP 初始值07,会和RAM 的R0-R7 重复,一般会后移?

图像 060.jpg
图像 061.jpg

图像 062.jpg

装入HEX 可以正常运行。




图像 065.jpg
图像 063.jpg
但是我还是有疑问,

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;  //开中断
}


图像 066.jpg

HEX 加载入 PROTUES 也可以运行。

问题:
1,将 2个单片机设置不同的时钟频率,显示会乱,这个可以理解,自同步波特率又是怎么实现的?
2,SP 应该在所有变量定义后再调整,否则会出错,可能是KEIL编译规则要求?
3,这些控制字的值,看来是记不住了,只有用的时候看书来计算了,上76E003只有看说明书了。
4,这本教材上面BUG 不少。



打赏

参与人数 2家元 +40 收起 理由
锰子 + 20
家睦 + 20

查看全部打赏

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-23 15:03 , Processed in 0.358801 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表