您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

80C51单片机双机通信与多机通信的使用方法

2024/3/6 18:46:20发布22次查看
80c51单片机之间的串行通信主要可分为双机通信和多机通信,本节举例说明双机通信与多机通信的使用方法。
1.双机通信硬件电路
如果两个80c51单片机系统距离较近,那么就可以将它们的串行口直接相连,实现双机通信,如图1所示。
图1 双机异步通信接口电路
为了增加通信距离,减少通道和电源干扰,可以在通信线路上采用光电隔离的方法,利用rs-422a标准进行双机通信,实用的接口电路如图2所示。
图2 rs-422a双机异步通信接口电路
2.双机通信软件编程
对于双机通信采用两种方法:查询方式和中断方式。
(1)查询方式
例 在双机通信中,设置串行口工作于方式3,波特率为9600,定时器t1工作于方式2,允许接收,单片机主频fosc=6mhz,编写初始化编程序。
分析:
①设置scon寄存器
串行口工作于方式3,sm0sm1=11。双机通信不需要发送地址,sm2=0。允许接收ren=1。所以scon=11010000b=0d0h。
②计算定时器t1计数初值,波特率不加倍,smod=0。
由 可写出:
count=254=0feh
③初始化程序
例 当1号机开始发送时,先送出一个“a1”信号,2号机收到后回答一个“b2”信号,表示同意接收。当1号机收到“b2”信号后,开始发送数据,每发送一次求一个“校验和,以提高通信的可靠性。设数据块为10个字节,数据缓冲区的起始地址是40h,数据块发完后马上发送“校验和”。2号机接收数据并将其转存到40h开始的缓冲区,每接收到一个数据也求一次“校验和”,数据块收完后,再接收1号机发来的“校验和”,并与2号机求出的结果相比较。如二者相等,说明接收正确,2号机回答“00h”;若两者不等,说明接收错误,2号机回答“0ffh”,请求重发。1号机收到“00h”的回答后,结束发送。若收到的答复非零,则将数据重发一次。假定双方约定的传输波特率为1200bps,振荡频率为11.0592hz,t1工作在方式2。
解:
查表可知,th1=tl1=0e8h,pcon的smod位为0。程序流程图如图所示,程序清单如下。
(2)中断方式
为提高cpu的利用效率,大多数的通信程序特别是接收程序使用中断方法。
例 单工形式的双机通信。 假定甲乙机以方式1进行串行数据通信,其波特率为1200, 甲机发送,发送数据在外部ram 4000h-401fh单元中。乙机接收,并把接收到的数据块首末地址和数据依次放入外部ram 5000h开始的区域中。
分析:
①设甲、乙机的时钟频率均为6mhz,从而机器周期为2μs。
②smod波特率不倍增,从而pcon=00h,至于smod什么时候为0,什么时候为1,可以根据需要来决定,具体地说,波特率较大,则smod=1,否则smod=0
③由公式可知波特率为:
计数初值=count=243=f3h
④串行数据的发送(或接收)的内容包括数据块首末地址和数据两部分内容。对数据块首末地址以查询方式传送,而数据则以中断方式传送。因此在程序中要先禁止串行中断,后允许串行中断。
甲机发送主程序:
甲机中断服务程序:
acint: clr ti ;清发送中断
movx a,@dptr ;读数据
mov sbuf,a ;发送字符
inc dptr
djnz r7, loop ;未发送完转loop
clr es ;禁止串行中断
clr tr1 ;定时器1停止计数
loop: reti ;中断返回
乙机接收主程序:
注意:上述程序4个接收地址的程序段可用一个循环程序来代替,此处为了与发送程序对应故分为4段书写。
乙机中断服务程序:
在实验过程中,应先执行乙机的接收程序,然后执行甲机的发送程序。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product