单片机双机通信例题_基于51单片机的双机串行通信

一,初学者的要求

1、掌握51单片机串行口的结构和工作特点。

2、掌握双机串行通信时主、从机的区别与联系。

3、熟练掌握串行中断服务程序的设计方法及技巧。

4、掌握Proteus仿真软件中双机通信电路的画法和实际硬件电路的注意事项。

二,本次实践任务

如后图所示,实现编程将主机数据传输到从机中并显示;利用K1作为主机发送启动按钮。

具体工作方式可在串行口方式一、二、三中灵活选择,例程为方式一实现。

e595dd120b4517166a1d29946e815a48.png

三,程序代码(分两部分)

  1. 主机代码
#include  #define uchar unsigned char #define uint unsigned int sbit DUAN=P2^6;sbit WEI=P2^7;sbit K1=P3^4;/*¶¨ÒåÆô¶¯°´¼üK1*/uchar j=0;uchar data led[6]={1,2,3,4,5,6};uchar data ledwei[6]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};uchar data displaytab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay()  /*ÑÓʱº¯Êý,Ô¼1mS*/{uchar x,y;for(x=2; x>0; x--)for(y=250; y>0; y--);}void delay10ms() /*ÑÓʱº¯Êý,Ô¼10mS*/{uchar m,n;for(m=20; m>0; m--)for(n=250; n>0; n--);}void display(){uchar i;for (i=0;i<6;i++){P0=displaytab[led[i]];DUAN=1;DUAN=0;P0=ledwei[i]; WEI = 1;WEI = 0;delay();P0=0xff;/*ÏûÓ°*/ WEI = 1;WEI = 0;}}void main(){TMOD=0x06; //0000 0110,T0¹¤×÷ÔÚ·½Ê½¶þ,¼ÆÊýģʽTH0=0xff; //³õֵΪÁÙ½çÖµ£¬T0×÷ΪÖ÷»úÆô¶¯°´¼ü TL0=0xff;TR0=1;EA=1;ET0=1;PS=1;while(1){display();}}void t0() interrupt 1 {delay10ms(); /*ÆÕͨÏû¶¶Ç°²¿*/if(K1==0){TMOD=0x26; //0010 0110,T0ÑÓÐøÖ÷º¯ÊýÖй¦ÄÜ£¨T0¹¤×÷ÔÚ¼ÆÊýģʽ£¬·½Ê½¶þ£¬³õֵΪÁÙ½çÖµ£¬×÷ΪÖ÷»úÆô¶¯°´¼ü£© //´ËʱT1¹¦ÄÜ,·½Ê½¶þ,×÷Ϊ²¨ÌØÂÊ·¢ÉúÆ÷£¬²Î¼ûP197-198˵Ã÷SCON=0x50; //0101 0000,´®¿Ú¹¤×÷ÔÚ·½Ê½Ò»,ÔÊÐí½ÓÊÕTH1=0xff; //12MHz¾§Õñ,²¨ÌØÂÊ62.5kb/s TL1=0xff; //³õÖµ¿É²Î¼û¿Î±¾P198±í8-2PCON=0x80; //1000 0000£¬²¨ÌØÂʱ¶ÔöÓÐЧTR1=1;ES=1; SBUF=led[j];}while(!K1); /*ÆÕͨÏû¶¶ºó²¿*/delay10ms();while(!K1);}void uart() interrupt 4{if(j<6){j++;SBUF=led[j];}else{j=0;} TI=0; /*Çå´®Ðз¢ËÍÖжÏÇëÇó±êÖ¾TI*/} 
23ea50a52f021d8fffe9ee836480ab96.png
b553390b82561326d528be9a032a2274.png
78e2125bdd8fdaf4c65abda57f8de1b4.png
50f16a6faa4c7b68c3d7b0aa013a3d05.png
e3aa8ea248b6843e210043f3d4b6146c.png
04d6f21ad285ba748d53f939cf232cc2.png
089021cac6d95d256ef8a394d238a931.png
ef0a7d069bccc989a401f667c7a36154.png

2.从机代码

#include  #define uchar unsigned char #define uint unsigned int sbit DUAN=P2^6;sbit WEI=P2^7;uchar j=0;uchar data led[6]={0,0,0,0,0,0};uchar data ledwei[6]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};uchar data displaytab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay()  /*ÑÓʱº¯Êý,Ô¼1mS*/{uchar x,y;for(x=2; x>0; x--)for(y=250; y>0; y--);}void display(){uchar i;for (i=0;i<6;i++){P0=displaytab[led[i]];DUAN=1;DUAN=0;P0=ledwei[i]; WEI = 1;WEI = 0;delay();P0=0xff;/*ÏûÓ°*/ WEI = 1;WEI = 0;}}void main(){ TMOD=0x20;//´ËʱT1¹¦ÄÜ,·½Ê½¶þ,×÷Ϊ²¨ÌØÂÊ·¢ÉúÆ÷£¬²Î¼ûP197-198˵Ã÷SCON=0x50;//0101 0000,´®¿Ú¹¤×÷ÔÚ·½Ê½Ò»,ÔÊÐí½ÓÊÕTH1=0xff;//12MHz¾§Õñ,²¨ÌØÂÊ62.5kb/s TL1=0xff;//³õÖµ¿É²Î¼û¿Î±¾P198±í8-2PCON=0x80;//1000 0000£¬²¨ÌØÂʱ¶ÔöÓÐЧTR1=1;ES=1;EA=1;while(1){display();}}void uart() interrupt 4{if(j<6){led[j]=SBUF;j++;}else{j=0;} RI=0;/*Çå´®ÐнÓÊÕÖжÏÇëÇó±êÖ¾RI*/} 

四,仿真结果

注意:利用K1作为主机发送启动按钮

e1e6551ee897522b5c5afe35d68da57f.png
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值