找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2393|回复: 3
收起左侧

单片机和单片机之间通信仿真 含主机与丛机的源程序

[复制链接]
ID:424884 发表于 2018-11-12 10:41 | 显示全部楼层 |阅读模式
使用中断方式C51程序设计_单片机与一个单片机串口通信仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png

单片机与1个单片机串口通信设计任务:
1个单片机(主机)通过串行口将十六进制数发送给另一个单片机(从机),驱动从机继电器动作,并在数码管显示接收到的数。从机接收到数据后,返回原数据给主机并在数码管显示。

0.png

手动输入:通过开发板上的数字量输入拨动开关来实现数据输入(00 01 10 11)

单片机源程序如下:
  1. #include<reg51.h>
  2. #include<string.h>

  3. #define        uint        unsigned int
  4. #define uchar        unsigned char

  5. /****************************开关端口定义*********************************************/   
  6. sbit sw_0=P3^3;   
  7. sbit sw_1=P3^4;   

  8. /****************************数码显示 键盘接口定义****************************************/   
  9. sbit PS0=P2^4;//数码管个位   
  10. sbit PS1=P2^5;//数码管十位               
  11. sfr  P_data=0x80;//P0口为显示数据输出口
  12. sbit P_K_L=P2^2;//键盘列
  13.    
  14. uchar tab[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};//字段转换表
  15. uchar temp=0; //存放数据区
  16. uint a;        
  17. uint sw_in(void);//开关量输入采集
  18. void display(uint a);//显示函数
  19. void delay(uint delay_time);//延时函数     
  20. void init_serial(void);

  21. void main(void)
  22. {         
  23.         init_serial();

  24.         temp=sw_in();
  25.         TI=0;
  26.         SBUF=temp;
  27.         
  28.         while(1);
  29. }
  30. /**************************串口初始化函数**************************/
  31. /*函数原型:void init_serial(void)
  32. /*函数功能:设置串口通信参数及方式
  33. /*输入参数:无
  34. /*输出参数:无
  35. /*调用模块:无
  36. /******************************************************************/
  37. void init_serial(void)
  38. {        TMOD=0X20;//定时器1方式2
  39.         TH1=0XFA;
  40.         TL1=0XFA;
  41.         PCON=0X80;
  42.         SCON=0X50;//串口方式1,允许接收,波特率9600bit/s
  43.         TR1=1;        //开始计时
  44.         ES=1;
  45.         EA=1;
  46. }
  47. //串口中断处理函数
  48. void serial_int() interrupt 4
  49. {        
  50.         if(RI==1)
  51.         {        RI=0;
  52.                 temp=SBUF;        //接收数据
  53.                 for(a=0;a<200;a++)//显示,兼有延时的作用
  54.                 display(temp);
  55.         }
  56.         if(TI==1)
  57.         {        temp=sw_in();
  58.                 SBUF=temp;
  59.                 TI=0;
  60.         }
  61. }
  62. /**************************数据采集函数**************************/
  63. /*函数原型:unsigned int sw_in(void)
  64. /*函数功能:数据采集
  65. /*输入参数:无
  66. /*输出参数:a
  67. /*调用模块:无
  68. /******************************************************************/
  69. uint sw_in(void)
  70. {
  71.    unsigned int a=0;
  72.         if(sw_0)
  73.           {  a=a+1;}
  74.         if(sw_1)
  75.             {a=a+0x10;}
  76.     return a;
  77. }
  78. /**************************数码管显示函数**************************/
  79. /*函数原型:void display(void)
  80. /*函数功能:数码管显示
  81. /*输入参数:无
  82. /*输出参数:无
  83. /*调用模块:delay()
  84. /******************************************************************/
  85. void display(unsigned int a)
  86. {        
  87.     bit b=P_K_L;
  88.         P_K_L=1;//防止按键干扰显示
  89.    
  90.     P_data=tab[a&0x0f];//显示个1位
  91.     PS0=0;                 
  92.         PS1=1;
  93.         delay(200);
  94.    
  95.          P_data=tab[(a>>4)&0x0f]; //显示十位
  96.     PS0=1;                 
  97.         PS1=0;
  98.         delay(200);        

  99.     P_K_L=b;//恢复按键
  100.         P_data=0xff;//恢复数据口
  101. }
  102. /*******************************延时函数*********************************/
  103. /*函数原型:delay(unsigned int delay_time)
  104. /*函数功能:延时函数
  105. /*输入参数:delay_time (输入要延时的时间)
  106. /*输出参数:无
  107. /*调用模块:无
  108. /**********************************************************************/
  109. void delay(unsigned int delay_time)   //延时子程序
  110. {for(;delay_time>0;delay_time--)
  111. {}
  112.   }
复制代码
0.png 0.png
所有资料51hei提供下载:
单片机通信.zip (150.55 KB, 下载次数: 30)
回复

使用道具 举报

ID:1 发表于 2018-11-14 02:44 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:46999 发表于 2018-11-14 09:18 | 显示全部楼层
好资料,谢谢楼主的分享!
回复

使用道具 举报

ID:426839 发表于 2018-11-15 09:10 | 显示全部楼层
厉害
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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