找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2980|回复: 0
打印 上一主题 下一主题
收起左侧

52单片机双机通信Proteus仿真程序

[复制链接]
跳转到指定楼层
楼主
在PROTEUS上采用双单片机A和B,采取TXD连接另一个单片机的RXD,建立一对一通信A外接4个按键,编号1~3;B外接一个数码管,平时显示0。 A按键后,B显示相应键号0.3秒;

进阶要求1:A的TXD与B的RXD间加入按键开关K,通过K的ON/OFF来控制通信连接的有效和无效;
                  运行中,K由ON改为OFF,通信无效时,B不响应A的按键表示通信未建立;

进阶2:通信无效时,B显示9,表示通信无效;运行中K由OFF改为ON,系统自动回复正常
1,首先考虑资源分配
波特率设置要用定时器1自动重装载模式。
定时器1用于产生10ms中断
定时器2用来产生20ms中断
故可选用89c52单片机
2:主函数完成3个定时器初始化函数,之后在while(1)休眠或啥也不干。
3:定时器2中断服务函数:
自动重装载模式不需要重置本定时器
按键扫描函数获取键号,若无按键键号为0
重置并启动超时定时器(tim0)
根据S_OK状态点亮LED(S_OK=0时点亮)
4:接收中断模块
S_OK置1
关闭超时定时器
5:10ms定时中断模块
S_OK=0
关闭超时定时器
接收B板模块
同样需要3个定时器
1:main函数中三个定时器初始化
2:接收中断
直接显示键号,开启0.3s定时器
重置启动超时定时器
发送信息给A板
3:0.3s定时中断
关闭本定时器
显示0
4:超时中断函数
S_OK=0
数码管显示9
关闭本定时器
关闭0.3s定时器

发送A板主函数文件程序示例。完整程序和proteus图见附件。


单片机源程序如下:
  1. #include <reg52.h>
  2. #include"init.h"

  3. //sfr T2MOD=0XC9;


  4. void send(uchar num); //声明子函数的时候要加分号
  5. void delay(int z)        //晶振11.592.延时z毫秒
  6. {
  7.   uint x,y;
  8.   for(x=z;x>0;x--)
  9.   for(y=110;y>0;y--);
  10. }
  11. void key()
  12. {
  13.         if(key3==0)
  14.         flash=4;
  15.         else if(key2==0)
  16.         flash=3;
  17.         else if(key1==0)
  18.         flash=2;
  19.         else if(key0==0)
  20.         flash=1;
  21.         else
  22.         flash=0;

  23. }







  24. void send(uchar num)
  25. {
  26.   SBUF=num;      //把发送的内容写进sbuf,自动发送 ,发送数据时TI为0,!0为1
  27.   while(!TI);   //!逻辑非,发送完数据,发送完数据时TI为1.!1为0,停止发送
  28. // led=1;
  29.   TI=0;             //TI需要软件清零
  30. }

  31. void tim0() interrupt 1//超时中断
  32. {
  33.          static unsigned char count;
  34.                                            //定义变量,记录中断次数
  35. //         TH0=0xd8;  
  36. //          TL0=0xf0;           //定时器重置,一帧数据一来一回两个多毫秒,定时10ms够了
  37.         S_OK=0;                           //进入超时中断,说明通信已经中断
  38.         led=1;
  39.         led2=1;
  40.         TR0=0;                           //通信已经中断,关闭超时定时器        
  41. //        count++;
  42. //        if(count==50)
  43. //         {
  44. //        led2=~led2;
  45. //        count=0;
  46. //        }
  47. }
  48. void receive() interrupt 4        
  49.                                                  //串行接收和发送中断           
  50. {
  51.      if(RI==1)
  52.          {
  53.          S_OK=1;                        //进入接收中断说明通信正常   
  54.      RI = 0;                        //RI要手动清0
  55.          led=0;
  56.          led2=0;
  57.          TR0=0;                                //关闭超时定时器
  58.          }
  59.          if(TI==1)
  60.          {
  61.                 TI=0;
  62. //                TH0=0xd8;  
  63. //          TL0=0xf0;  
  64. TH0=0xec;  
  65.           TL0=0x78;
  66.         TR0=1;   
  67.          }
  68.   }
  69. void timer_T2() interrupt 5       //中断函数
  70. {
  71.     static unsigned char count1;     //定义变量,记录中断次数
  72.     TF2=0;                      //软件清零定时器2溢出标志位
  73.         
  74.     count1++;
  75.         
  76.          
  77.          
  78.                                    //重置并启动超时定时器
  79.                                          //根据S_OK点亮led3
  80.     if(count1==3)      
  81.     {
  82.     key();                           //扫描按键
  83.         SBUF=flash;       //发送一次键号key();                           //扫描按键
  84.         
  85.         count1=0;         //清零
  86.       
  87.     }
  88. }







  89. void main()
  90. {
  91.    //待运行一次的初始化函数
  92.         tim2init();
  93.         tim1init() ;
  94.            tim0init();
  95.         TR0=0;
  96.         led=0;
  97.         led2=0;
  98.         led3=0;
  99.           while(1)
  100.            {
  101. //                    send(flash);
  102. //           if(S_OK==0)
  103. //           led3=1;
  104. //           else
  105. //           led3=0;
  106.                   //key();   

  107.                   
  108.            }
  109. }
复制代码
全部资料51hei下载地址:
程序源码和原理图.rar (105.97 KB, 下载次数: 31)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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