数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 2841|回复: 0

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

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


选择做这个双机串口通讯

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





按照 例子做好 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

打赏

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

查看全部打赏

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-21 06:09 , Processed in 0.140400 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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