单片机双机通信程序(8051单片机)

>> 单片机双机通讯(方式1) 单片机双机通讯(方式1)
单片机双机通讯(方式1) 单片机双机通讯(方式1)
所属分类:
下载地址:
danpianjishuangjiton文件大小:101.23 kB
分享有礼! 》
请点击右侧的分享按钮,把本代码分享到各社交媒体。
通过您的分享链接访问Codeforge,每来2个新的IP,您将获得0.1 积分的奖励。
通过您的分享链接,每成功注册一个用户,该用户在Codeforge上所获得的每1个积分,您都将获得0.2 积分的分成奖励。
单片机双机通讯(方式1) 单片机双机通讯(方式1)-Single-chip dual-machine communication (mode 1) Single-chip dual-machine communications (one way)
Sponsored links
源码文件列表
温馨提示: 点击源码文件名可预览文件内容哦 ^_^
1.86 kB11-10-05 16:45
168.00 B17-09-05 09:27
s.DSN84.20 kB17-09-05 09:52
s.PWI1.09 kB01-09-08 12:50
u13.36 kB12-10-05 13:34
496.00 B17-09-05 09:52
u1.hex425.00 B12-10-05 13:34
u1.lnp21.00 B12-10-05 13:34
u1.LST2.43 kB12-10-05 13:34
u1.M516.97 kB12-10-05 13:34
u1.OBJ3.57 kB12-10-05 13:34
u1.Opt1.13 kB22-09-05 11:50
u1.plg157.00 B12-10-05 13:34
u1.Uv21.64 kB17-09-05 09:36
u23.09 kB12-10-05 13:34
425.00 B17-09-05 09:52
u2.hex347.00 B12-10-05 13:34
u2.lnp21.00 B12-10-05 13:34
u2.LST2.15 kB12-10-05 13:34
u2.M516.69 kB12-10-05 13:34
u2.OBJ3.29 kB12-10-05 13:34
u2.Opt1.12 kB30-09-05 08:48
u2.plg157.00 B12-10-05 13:34
u2.Uv21.64 kB17-09-05 09:53
16_323.47 kB02-01-07 18:30
16_32.DSN98.67 kB02-01-07 19:16
16_32.hex2.24 kB02-01-07 18:30
16_32.lnp26.00 B02-01-07 18:30
16_32.M516.49 kB02-01-07 18:30
16_32.Opt992.00 B02-01-07 18:30
16_32.plg2.08 kB02-01-07 18:30
16_32.PWI742.00 B01-09-08 12:50
16_32.Uv21.64 kB02-01-07 17:46
16_32_Opt.Bak992.00 B02-01-07 18:23
&16_32_Uv2.Bak&0.00 B02-01-07 17:30
32-16_vXSHi0Ovid0S.jpg36.38 kB16-06-07 16:56
4.35 kB02-01-07 18:30
CODE.LST6.88 kB02-01-07 18:30
CODE.OBJ3.83 kB02-01-07 18:30
&Last&0.00 B14235 14%
&用51做的32×16点阵显示&0.00 B04-09-07 17:12
&串口方式1&0.00 B04-09-07 17:12
&单片机双机通讯(方式1)&0.00 B04-09-07 17:12
(提交有效评论获得积分)
评论内容不能少于15个字,不要超出160个字。
评价成功,多谢!
下载danpianjishuangjiton
CodeForge积分(原CF币)全新升级,功能更强大,使用更便捷,不仅可以用来下载海量源代码马上还可兑换精美小礼品了
您的积分不足,优惠套餐快速获取 30 积分
10积分 / ¥100
30积分 / ¥200原价 ¥300 元
100积分 / ¥500原价 ¥1000 元
订单支付完成后,积分将自动加入到您的账号。以下是优惠期的人民币价格,优惠期过后将恢复美元价格。
支付宝支付宝付款
微信钱包微信付款
更多付款方式:、
您本次下载所消耗的积分将转交上传作者。
同一源码,30天内重复下载,只扣除一次积分。
鲁ICP备号-3 runtime:Elapsed:ms - init:0.1;find:15.5;t:17.9;tags:85.4;related:48.4;comment:0.7; 5.8
登录 CodeForge
还没有CodeForge账号?
Switch to the English version?
^_^"呃 ...
Sorry!这位大神很神秘,未开通博客呢,请浏览一下其他的吧单片机课程设计-双机通信的设计与制作 - 课程设计-
当前位置:
单片机课程设计-双机通信的设计与制作
馆藏:58132
下载此文档
同系列文档
Baidu Button END -->
官方公众微信————————————————————————————————————————————
实验7.4:RS232串口应用实例
设计要求:
通过串口发送接收数据(串口工作方式1)
实现思路:
定时器设置
开启定时/计数器
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
实现代码:
1 #include &reg51.h&
TMOD = <span style="color: #x20;
SM0 = <span style="color: #;
SM1 = <span style="color: #;
REN = <span style="color: #;
PCON = <span style="color: #;
TH1 = <span style="color: #xFD; //<span style="color: #3=256-(1*11.)/(384*9600)
<span style="color: #
TL1 = <span style="color: #xFD;
<span style="color: #
TR1 = <span style="color: #;
<span style="color: #
P1 = SBUF;
<span style="color: #
while(!RI);
<span style="color: #
RI = <span style="color: #;
<span style="color: #
SBUF = P1;
<span style="color: #
while(!TI);
<span style="color: #
TI = <span style="color: #;
<span style="color: # }
————————————————————————————————————————————
实验7.5:MAX487多机通信应用实例
设计要求:
在主从3个单片机中进行双机通信,当从机显示的数字和主机相同,则表示该主机和从机正在通信。按下主机按键切换当前对象。
实现思路:
在主机中设置定时器和串口参数,并一直保持发送数据的状态。
通过MAX487芯片将3个单片机连接,并通过设置/RE、DE管脚控制单片机输入输出状态。
需要按下主机按键时检测按键状态,切换当前对象,设置中断,并标记此时状态是从机1或从机2。
//中断发生时按照中断优先级,主机先执行cort++并发送信息,主机中断结束后才进入从机中断。
如果是从机1,输出状态下发送对应数字,输入状态下设置单片机通信(非多机通信)接收并显示对应数字,重置输出状态。从机2同理。
设置与主机相同的串口参数和定时器和默认显示值。允许接收中断
当按键被按下,判断主机要通信的是否是自己,是则显示对应数字并向主机发送数字,否则重置状态。
执行流程:(多机通信模式)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
实现代码:SM2=1,多机通信模式!
1 #include &reg51.h&
2 #include &intrins.h&
3 unsigned char cort = <span style="color: #;
4 sbit P3_5 = P3 ^ <span style="color: #;
5 key_serial() interrupt <span style="color: # using <span style="color: #
if (cort == <span style="color: #)
cort = <span style="color: #;
<span style="color: # }
<span style="color: # void main()
<span style="color: # {
<span style="color: #
P2 = <span style="color: #xff;
<span style="color: #
TMOD = <span style="color: #x20;
<span style="color: #
TH1 = <span style="color: #xFD;
<span style="color: #
TL1 = <span style="color: #xFD;
<span style="color: #
PCON = <span style="color: #x00;
<span style="color: #
TR1 = <span style="color: #;
<span style="color: #
SCON = <span style="color: #xF8;
<span style="color: #
EA = <span style="color: #;
<span style="color: #
EX0 = <span style="color: #;
<span style="color: #
IT0 = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
while(<span style="color: #)
<span style="color: #
<span style="color: #
if (cort == <span style="color: #)
<span style="color: #
<span style="color: #
SBUF = <span style="color: #x01;
<span style="color: #
while(TI != <span style="color: #);
<span style="color: #
TI = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
RB8 = <span style="color: #;
<span style="color: #
while(RI != <span style="color: #);
<span style="color: #
RI = <span style="color: #;
<span style="color: #
P2 = SBUF;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
<span style="color: #
if(cort == <span style="color: #)
<span style="color: #
<span style="color: #
SBUF = <span style="color: #x02;
<span style="color: #
while(TI != <span style="color: #);
<span style="color: #
TI = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
RB8 = <span style="color: #;
<span style="color: #
while(RI != <span style="color: #);
<span style="color: #
RI = <span style="color: #;
<span style="color: #
P2 = SBUF;
<span style="color: #
SM2 = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: # }
1 #include &reg51.h&
2 #include &intrins.h&
3 sbit P3_5 = P3 ^ <span style="color: #;
4 void serial(void) interrupt <span style="color: # using <span style="color: #
ES = <span style="color: #;
RI = <span style="color: #;
if (SBUF == <span style="color: #x01)
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
RI = <span style="color: #;
<span style="color: #
TB8 = <span style="color: #;
<span style="color: #
P1 = <span style="color: #x10;
<span style="color: #
SBUF = <span style="color: #x10;
<span style="color: #
while(!TI);
<span style="color: #
TI = <span style="color: #;
<span style="color: #
<span style="color: #
else P1 = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
ES = <span style="color: #;
<span style="color: # }
<span style="color: # void main()
<span style="color: # {
<span style="color: #
P1 = <span style="color: #x00;
<span style="color: #
TMOD = <span style="color: #x20;
<span style="color: #
TH1 = <span style="color: #xFD;
<span style="color: #
TL1 = <span style="color: #xFD;
<span style="color: #
PCON = <span style="color: #x00;
<span style="color: #
TR1 = <span style="color: #;
<span style="color: #
SCON = <span style="color: #xF0;
<span style="color: #
EA = <span style="color: #;
<span style="color: #
ES = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
while(<span style="color: #)
<span style="color: #
<span style="color: # }
1 #include &reg51.h&
2 #include &intrins.h&
3 sbit P3_5 = P3 ^ <span style="color: #;
4 void serial() interrupt <span style="color: # using <span style="color: #
ES = <span style="color: #;
RI = <span style="color: #;
if (SBUF == <span style="color: #x02)
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
RI = <span style="color: #;
<span style="color: #
TB8 = <span style="color: #;
<span style="color: #
P1 = <span style="color: #x20;
<span style="color: #
SBUF = <span style="color: #x20;
<span style="color: #
while(!TI);
<span style="color: #
TI = <span style="color: #;
<span style="color: #
<span style="color: #
else P1 = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
ES = <span style="color: #;
<span style="color: # }
<span style="color: # void main()
<span style="color: # {
<span style="color: #
P1 = <span style="color: #x00;
<span style="color: #
TMOD = <span style="color: #x20;
<span style="color: #
TH1 = <span style="color: #xFD;
<span style="color: #
TL1 = <span style="color: #xFD;
<span style="color: #
PCON = <span style="color: #x00;
<span style="color: #
TR1 = <span style="color: #;
<span style="color: #
SCON = <span style="color: #xF0;
<span style="color: #
EA = <span style="color: #;
<span style="color: #
ES = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
while(<span style="color: #)
<span style="color: #
<span style="color: # }
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
实现代码:SM2=0,单机通信模式!
1 #include &reg52.h&
2 unsigned char cort = <span style="color: #;
3 sbit P3_5 = P3 ^ <span style="color: #;
4 void key_serial() interrupt <span style="color: # using <span style="color: #
8 void main()
<span style="color: #
P2 = <span style="color: #x0f;
<span style="color: #
TMOD = <span style="color: #x20;
<span style="color: #
TH1 = <span style="color: #xFD;
<span style="color: #
TL1 = <span style="color: #xFD;
<span style="color: #
PCON = <span style="color: #x00;
<span style="color: #
TR1 = <span style="color: #;
<span style="color: #
SCON = <span style="color: #xD0;
<span style="color: #
EA = <span style="color: #;
<span style="color: #
EX0 = <span style="color: #;
<span style="color: #
IT0 = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
while(<span style="color: #)
<span style="color: #
<span style="color: #
if (cort == <span style="color: #)
<span style="color: #
<span style="color: #
SBUF = <span style="color: #x01;
<span style="color: #
while(!TI);
<span style="color: #
TI = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
while(!RI);
<span style="color: #
RI = <span style="color: #;
<span style="color: #
P2 = SBUF;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
<span style="color: #
if(cort == <span style="color: #)
<span style="color: #
<span style="color: #
SBUF = <span style="color: #x02;
<span style="color: #
while(!TI);
<span style="color: #
TI = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
while(!RI);
<span style="color: #
RI = <span style="color: #;
<span style="color: #
P2 = SBUF;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
<span style="color: #
if (cort == <span style="color: #)
<span style="color: #
cort = <span style="color: #;
<span style="color: #
<span style="color: # }
1 #include &reg51.h&
2 #include &intrins.h&
3 sbit P3_5 = P3 ^ <span style="color: #;
4 void serial(void) interrupt <span style="color: # using <span style="color: #
ES = <span style="color: #;
RI = <span style="color: #;
if (SBUF == <span style="color: #x01)
<span style="color: #
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
P1 = <span style="color: #x10;
<span style="color: #
SBUF = <span style="color: #x30;
<span style="color: #
while(!TI);
<span style="color: #
TI = <span style="color: #;
<span style="color: #
<span style="color: #
else P1 = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
ES = <span style="color: #;
<span style="color: # }
<span style="color: # void main()
<span style="color: # {
<span style="color: #
P1 = <span style="color: #x00;
<span style="color: #
TMOD = <span style="color: #x20;
<span style="color: #
TH1 = <span style="color: #xFD;
<span style="color: #
TL1 = <span style="color: #xFD;
<span style="color: #
PCON = <span style="color: #x00;
<span style="color: #
TR1 = <span style="color: #;
<span style="color: #
SCON = <span style="color: #xD0;
<span style="color: #
EA = <span style="color: #;
<span style="color: #
ES = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
while(<span style="color: #)
<span style="color: #
<span style="color: # }
————————————————————————————————————————————
关于该实验在多机通信和单机通信下不同情况的讨论
在单机通信模式下,SM2 == 0,
初始化:SCON = D0;
发送完毕:TI=0;
接收完毕:RI=0;
中断触发条件:RI=0且SM2=0,RI置位
此情况下,发送和接收信息结束后需要对RI和TI手动置为0即可。
在多机通信模式下,SM2在0和1之间调整
初始化:主机:SCON = F8;从机:SCON = F0;
中断触发条件:接收到的第九位RB9==1,RI置位(如果RB8=0,RI就会等于0,就不能进入接收中断,自然丢失信息了。)
51单片机原理及应用(陈海宴)书P129案例是在主机发送状态下使用多机通信,接收状态下使用单机通信,在理解上容易出现错误,过程分析及代码如下:
实现代码:
1 #include &reg51.h&
2 #include &intrins.h&
3 unsigned char cort = <span style="color: #;
4 sbit P3_5 = P3 ^ <span style="color: #;
5 key_serial() interrupt <span style="color: # using <span style="color: #
9 void main()
<span style="color: # {
<span style="color: #
P2 = <span style="color: #xff;
<span style="color: #
TMOD = <span style="color: #x20;
<span style="color: #
TH1 = <span style="color: #xFD;
<span style="color: #
TL1 = <span style="color: #xFD;
<span style="color: #
PCON = <span style="color: #x00;
<span style="color: #
TR1 = <span style="color: #;
<span style="color: #
SCON = <span style="color: #xF8;
<span style="color: #
EA = <span style="color: #;
<span style="color: #
EX0 = <span style="color: #;
<span style="color: #
IT0 = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
while(<span style="color: #)
<span style="color: #
<span style="color: #
if (cort == <span style="color: #)
<span style="color: #
<span style="color: #
SBUF = <span style="color: #x01;
<span style="color: #
while(TI != <span style="color: #);
<span style="color: #
TI = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
SM2 = <span style="color: #;
<span style="color: #
while(RI != <span style="color: #);
<span style="color: #
RI = <span style="color: #;
<span style="color: #
P2 = SBUF;
<span style="color: #
SM2 = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
<span style="color: #
if(cort == <span style="color: #)
<span style="color: #
<span style="color: #
SBUF = <span style="color: #x02;
<span style="color: #
while(TI != <span style="color: #);
<span style="color: #
TI = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
SM2 = <span style="color: #;
<span style="color: #
while(RI != <span style="color: #);
<span style="color: #
RI = <span style="color: #;
<span style="color: #
P2 = SBUF;
<span style="color: #
SM2 = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
<span style="color: #
if (cort == <span style="color: #)
<span style="color: #
cort = <span style="color: #;
<span style="color: #
SM2 = <span style="color: #;
<span style="color: #
<span style="color: # }
1 #include &reg51.h&
2 #include &intrins.h&
3 sbit P3_5 = P3 ^ <span style="color: #;
4 void serial(void) interrupt <span style="color: # using <span style="color: #
ES = <span style="color: #;
RI = <span style="color: #;
if (SBUF == <span style="color: #x01)
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
SM2 = <span style="color: #;
<span style="color: #
P1 = <span style="color: #x10;
<span style="color: #
SBUF = <span style="color: #x10;
<span style="color: #
while(!TI);
<span style="color: #
TI = <span style="color: #;
<span style="color: #
<span style="color: #
else P1 = <span style="color: #;
<span style="color: #
SM2 = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
ES = <span style="color: #;
<span style="color: # }
<span style="color: # void main()
<span style="color: # {
<span style="color: #
P1 = <span style="color: #x00;
<span style="color: #
TMOD = <span style="color: #x20;
<span style="color: #
TH1 = <span style="color: #xFD;
<span style="color: #
TL1 = <span style="color: #xFD;
<span style="color: #
PCON = <span style="color: #x00;
<span style="color: #
TR1 = <span style="color: #;
<span style="color: #
SCON = <span style="color: #xF0;
<span style="color: #
EA = <span style="color: #;
<span style="color: #
ES = <span style="color: #;
<span style="color: #
P3_5 = <span style="color: #;
<span style="color: #
while(<span style="color: #)
<span style="color: #
<span style="color: # }
阅读(...) 评论()8051双机通信简例
51双机通信
8051双机通信简例下载
下载资料需要,并消耗一定积分。
下载此资料的人还喜欢:
技术交流、我要发言! 发表评论可获取积分! 请遵守相关规定。
本周热点资料
电子资料热门词
上传者其它资料
单片机下载排行论文发表、论文指导
周一至周五
9:00&22:00
Proteus中实现单片机双机通信实验
  【摘要】本文针对单片机项目设计中出现的问题和基本方法,提出了将Proteus仿真软件和Keil软件引入到单片机项目式开发中。以“单片机双机通信实验”项目为例,详细阐述Proteus软件在单片机课程教学中的使用方法和仿真调试过程。实践证明,该方法能激发开发热情,锻炼创新能力和单片机软硬件综合开发能力,是提高单片机开发效率和设计产品质量的一种有效方法。 中国论文网 /8/view-6435605.htm  【关键词】单片机开发;Proteus软件;仿真调试   引言   单片机开发是一项综合性、实践性、应用性很强的技术。传统的单片机开发采用“先理论设计,再动手实验”的开发模式,该模式造成编程与之实验结果分离,不便于调试,效果并不理想。鉴于此,本文将Proteus和引入到单片机的项目式开发中,通过仿真的直观性和真实感,不仅节约了硬件资源的投入,而且提高了单片机开发效率和产品质量。   一、Proteus简介   Proteus软件是英国Labcenter electronics公司开发的电路分析与实物仿真软件,它除了具有其他EDA工具的原理布图、PCB自动或人工布线、电路仿真等功能外,Proteus最大的特点是基于微控制器的设计连同所有的外围电路一起仿真,可直接在单片机虚拟系统上对MCU编程,并可对软件源代码进行实时调试。同时,它具有电路互动仿真功能,通过动态外设模型,如键盘、LED/LCD等,可实时显示系统输入、输出结果,以实现交互仿真,或配合Proteus配置的虚拟仪器如示波器、逻辑分析仪等,使单片机虚拟系统实现预期的实验效果。   此处还需要用Keil软件来协助。Keil软件是美国Keil Software公司出品的兼容单片机C语言软件的开发系统,是目前世界上最好的51单片机开发工具之一。它提供了丰富的库函数和功能强大的集成开发调试工具,生成的目标代码效率高,多数语句生成的汇编代码很紧凑,容易理解。   Proteus和Keil各自都可以进行仿真调试,但效果不是很理想,如把两者结合起来相互配合,则可发挥Proteus和Keil的优势使其在仿真过程中的软件调试和硬件设计更加便捷、高效。   二、仿真项目教学案例   (一)项目要求   本项目要求用两片AT89C51单片机实现A机检测输入键盘信息,并通过串行通信方式,传送给B机,在B机用数码管显示A机所按下的对应按键代号,“0-9”显示对应数字,其余按键显示“-”。   (二)任务分析   项目开发过程是紧紧围绕一个或多个完整的项目展开的,因此项目的设计,是单片机课程教学成败的关键。按照本项目要求,通过分析,该项目实际上是一个双机单向通信项目,只要掌握了该项目,双向通信问题不难理解。具体思路是:   1.A、B单片机均采用AT89C51,A机须完成矩阵键盘扫描识别、键盘代码串行传送两项任务。B机须完成串行接收代码、数码显示两项任务。本项目程序的关键就是串行通信程序部分。   2.A机通过检测P2口外接的矩阵键盘信息,并进行识别处理,产生相应的键盘代码,然后通过串行发送端TXD/P3.1发送给B机;   3.B机收到A机发送的键盘代码后,通过处理,从P0口输出七段数码管段码信号,驱动共阳极七段数码管显示键盘代码。   图1   图2   图3   (三)硬件仿真图绘制   通过以上的任务分析,我们先设计出硬件电路,并将电路在Proteus中绘制出来。电源电路用5V,具体电路省略。时钟电路用来产生时钟信号供单片机工作,晶振采用12MHz,平衡电容采用33pF。复位电路在系统上电或运行过程中对单片机进行初始化操作。   图4   图5   1.单片机最小系统   本案例所用单片机型号为AT89C51,其结构简单,控制灵活。其最小系统主要包括主芯片、电源电路、时钟电路、复位电路。   2.本例单片机最小系统   在这里要特别说明的是,在Proteus中单片机可以默认以最小系统工作。即可以不加上电源电路、复位电路、时钟电路也可以工作。不过为了便于直观观察,我们还是画出这些路。在绘制时,双机只画出单机的这些电路,另一个不画。并且为了不产生标号冲突,B机的引脚标号用数字表示。   本例中A机的主电路、电源电路、时钟电路、复位电路见附图。B机的系统图和A机系统大同小异。   3.本例输入、输出系统及通信连接   本例中的输入系统是矩阵键盘电路,从A机输入。利用P2口作为键盘检测口,P2.0-P2.3为行线扫描,P2.4-P2.7为列线检测。   本例中的通信连接是将双机的RXD和TXD两脚,即P3.0和P3.1交叉相边即可。B机的这两脚标号和A机对应。   本例中的输出系统是单个LED共阳数码管显示电路,从B机P0输出段码控制信号。   4.本例硬件仿真总图见附1。   (四)软件系统流程图   A机主程序流程图如图1所示,键盘扫描检测程序流程图如图2所示,B机主程序流程图如图3所示。具体的程序见附3。编程输入Kei uVsion4软件并生成A机和B机的”.hex”格式可执行文件。   图6   图7   图8   附1 双机通信实验仿真电路原理图   附2 电源原理图   (五)Proteus ISIS载入仿真   1.加加载源程序和目标程序文件、目标代码文件、设置时钟频率   在ISIS菜单中单击Source(源程序),弹出下拉菜单,点击“Add/Remove Source File…”,弹出如图1.9所示的对话框,选取A机芯片,点击 ,加入源程序“双机通信实验A机发送程序.C”,如图4所示;选取B机芯片,点击 ,加入源程序“双机通信实验B机接收程序.C”,如图5所示。点击确定。
  在ISIS编辑窗口中双击A机AT89C51芯片,在弹出的对话框中点击如图6所示的按钮,选择前面所生成的“双机通信实验A机发送程序.hex”代码文件,再在Clock Frequency:栏中设置时钟为12MHz,点击“OK”即可。B机同样设置。如图7所示。   2.PROTEUS交互仿真   代码装载完毕后即可进行仿真,只需点击运行仿真按钮即可运行仿真。仿真运行效果如图8所示。   (六)本例仿真电路原理图及程序部分源代码   1.本例仿真电路原理图(附1、附2)   2.本例程序部分源代码(附3)   A机检测发送程序:   #include &at89x51.h&   #define uchar unsigned char   #define uint unsigned int   #define key_4x4_port P2 &//定义P3口为键盘输入    & &//按键值   void delayms(uint xms);//1ms延时程序   void key_4x4_scan(); & &//键盘扫描指示程序   uchar d[11]={0,1,2,3,4,5,6,7,8,9,10}; //发送的数据   void delay();   /*--------------Xms延时程序----------------*/   void delayms(uint xms)   { & & & &uint i,j;    for(i=i&0;i--) //i=xms时延时xms    for(j=110;j&0;j--);   }   /*---------------键盘扫描指示程序--------------*/   {省略}   /*---------------A机检测发送程序--------------*/   main(){      PCON=0x80;//波特率加倍   SCON=0x40;//方式1,波特率与T1溢出率相关    TMOD=0x20;//T1方式2   TH1=0//串口速度为19.2Kb/s   TL1=0   TR1=1;//启动T1   while(1){   key_4x4_scan();   SBUF=d[key];//启动串口并发送数据   while(1)   {   if(TI==1)   {//检测,发送完发送下一数据   TI=0;//清中断      }   }   delay();//发送速度控制   }   }   void delay(){      for(i=0;i&40;i++){   }   }   B机接收显示程序:   #include &at89x51.h&   unsigned char code d[11]= &//LED字符码   { &0xc0,0xF9,0xA4,0xB0,0x99,    0x92,0x82,0xF8,0x80,0x90,0xbf   };   main(){   PCON=0x80;//波特率加倍   SCON=0x50;//方式1,允许接收   IE=0x90;//开串口中断   TMOD=0x20;//T1方式2   TH1=0//串口速度为19.2Kb/s   TL1=0   TR1=1;//启动T1   while(1){   if(RI==1){//检测   P0=d[SBUF];//显示   RI=0;//清中断   }   }   }   三、结论   通过本次实验,可以熟悉单片机串行通信的编程方法,提高键盘扫描检测程序、定时器的使用技巧,熟悉ProteusISIS的使用方法,将其与Keil uVsion4有机结合,使用该软件有利于直观观察仿真结果,培养单片机综合应用能力,明显地提高单片机开发效率和教学质量。   参考文献   [1]谷秀荣,单片机原理与应用(C51版),北京交大出版社,2009.7.   [2]李全利.单片机原理及应用技术.北京:高等教育出版社,2001.7.
转载请注明来源。原文地址:
【xzbu】郑重声明:本网站资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有,如有不愿意被转载的情况,请通知我们删除已转载的信息。
xzbu发布此信息目的在于传播更多信息,与本网站立场无关。xzbu不保证该信息(包括但不限于文字、数据及图表)准确性、真实性、完整性等。

我要回帖

更多关于 单片机双机通信原理 的文章

 

随机推荐