单片机实训之单片机与单片机的通信课程设计.doc
《单片机实训之单片机与单片机的通信课程设计.doc》由会员分享,可在线阅读,更多相关《单片机实训之单片机与单片机的通信课程设计.doc(16页珍藏版)》请在冰豆网上搜索。
单片机课程设计
题目:
单片机与单片机的通信
学校:
福州大学至诚学院
专业:
电气工程及其自动化
年级:
07
班级:
1
姓名:
李敏昱
学号:
21079201
目录
设计概述————————————1
硬件电路图———————————2
软件设计————————————3
结论——————————————10
参考文献————————————11
附录——————————————11
一、设计概述
1、设计一块电路板,板上有两个单片机(AT89C51),单片机的外围接有开关和发光二极管,当A机开关发生变位时,其状态在B单片机中的发光二极管中反映出来,B机的开关状态在A机的二极管中也反映出来。
功能说明:
单片机U1的开关的变位,会体现在单片机U2的LED二极管D2上
单片机U2的开关的变位,会体现在单片机U1的LED二极管D1上
2、设计一块电路板,板上有3个单片机(AT89C51),3个单片机之间实现多帧通信:
A单片机为主机,I/O口上接有2个开关,和一个数码管。
当第一个开关合上的时候,A机与B机通信,将A机的地址显示在B机的数码管上,C机的数码管显示0;当第二个开关合上的时候,A机与C机通信,将A机的地址显示在C机的数码管上,B机的数码管显示0。
A机数码管显示与之通信单片机的地址。
2个开关实现互锁。
要求,先发送地址帧,再发送数据帧,数据信息可以在从机的数码管上显示。
功能说明:
单片机U1(地址为1)为主机,单片机U2(地址为2),U3(地址为3)为从机
开关SW1打向左端时,U1与U2通信,U1的数码管显示U2的地址2,U2的数码管显示U1的地址1,U3因没有单片机与之通信,其数码管显示0
开关SW1打向右端时,U1与U3通信,U1的数码管显示U3的地址3,U3的数码管显示U1的地址1,U2因没有单片机与之通信,其数码管显示0
3、设计并制作电路板,板上有3块单片机(AT89C51),可以同时实现以上2个功能,并扩展部分功能。
功能说明:
单片机U1(地址为1)为主机,单片机U2(地址为2),U3(地址为3)为从机
①开关SW1闭合时,允许多机通信。
开关SW2打向上端时,U1与U2通信,U1的数码管显示U2的地址2,U2的数码管显示U1的地址1(扩展:
之后显示5~9),U3因没有单片机与之通信,其数码管显示0
开关SW2打向下端时,U1与U3通信,U1的数码管显示U3的地址3,U3的数码管显示U1的地址1(扩展:
之后显示9~5),U2因没有单片机与之通信,其数码管显示0
②开关SW2断开时,禁止多机通信,单片机A、B之间实现状态显示
单片机U1的开关SW3的变位,会体现在单片机U2的LED二极管D2上
单片机U2的开关SW4的变位,会体现在单片机U1的LED二极管D1上
二、硬件电路图
1、
2、
3、
三、软件设计
1、程序
;//******实现两机开关变位时的状态显示******//
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:
MOV SCON, #50H ;//设置串行口工作在模式1下,接
;//收使能
MOV TMOD, #20H ;//使用定时器1,工作在模式2下
MOV TH1, #0F3H ;//波特率2400
MOV TL1, #0F3H
SETB TR1 ;//启动定时器1
START:
JNB P0.0, LOOP1 ;//P0.0为低电平,即有按键按下时,
;//跳转至LOOP1;否则顺序执行
MOV SBUF, #0FFH ;//传送信号至B机,使其对P1.0输
;//出高电平,截止LED灯,熄灭
JBC TI, S1 ;//发送结束时,跳转至S1,查询有
;//无信号接收
SJMP $-3 ;//等待发送结束信号
LOOP1:
MOV SBUF, #0FEH ;//传送信号至B机,使其对P1.0输
;//出低电平,导通LED灯,发光
JBC TI, S1 ;//发送结束时,跳转至S1,查询有
;//无信号接收
SJMP $-3 ;//等待发送结束信号
S1:
JBC RI, LOOP2 ;//接收到信号后,跳转LOOP2,并
;//清0信号接收标志RI
SJMP FIN ;//若无信号接收,跳转至FIN,准
;//备开始新一轮循环
LOOP2:
MOV A, SBUF ;//将接收到的信号导入P1口,对
;//LED灯进行控制
MOV P1, A
FIN:
SJMP MAIN ;//跳转,新循环
END
流程图5-1见附录
2、程序
主机(地址为1):
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:
MOV SCON, #0D0H ;//设置串行口工作在模式3下,接
;//收使能
MOV TMOD, #20H ;//使用定时器1,工作在模式2下
MOV TH1, #0E6H ;//波特率1200
MOV TL1, #0E6H
SETB TR1 ;//启动定时器
JNB P1.6, CASE1 ;//开关左拨与B机(地址为2)通
;//讯
JNB P1.7, CASE2 ;//开关右拨与C机(地址为3)通
;//讯
SJMP LOOP
;//**********与B机(地址为2)通信**********//
CASE1:
SETB TB8 ;//第9位发送1
CLR TI ;//清发送中断标志位
MOV SBUF, #02H ;//发送地址02H
JNB TI, $ ;//等待发送结束
CLR TI ;//清发送中断标志位
CLR TB8 ;//第9位发送0
MOV SBUF, #06H ;//发送本机地址01H,06H为共阴
;//极LED显示1字型编码
JNB TI, $ ;//等待发送结束
CLR RI ;//清接收中断标志位
JNB RI, $ ;//等待接收结束
MOV P2, SBUF ;//显示接收信息
JNB P1.6, $ ;//等待开关变换
SJMP MAIN ;//开始新的判断
;//**********与C机(地址为3)通信**********//
CASE2:
SETB TB8 ;//第9位发送1
CLR TI ;//清发送中断标志位
MOV SBUF, #03H ;//发送地址03H
JNB TI, $ ;//等待发送结束
CLR TI ;//清发送中断标志位
CLR TB8 ;//第9位发送0
MOV SBUF, #06H ;//发送本机地址01H,06H为共阴
;//极LED显示1字型编码
JNB TI, $ ;//等待发送结束
CLR RI ;//清接收中断标志位
JNB RI, $ ;//等待接收结束
MOV P2, SBUF ;//显示接收信息
JNB P1.7, $ ;//等待开关变换
SJMP MAIN ;//开始新的判断
END
从机1(B机,地址为2):
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:
MOV TMOD, #20H ;//使用定时器1,工作在模式2下
MOV TH1, #0E6H ;//波特率1200
MOV TL0, #0E6H
SETB TR1 ;//启动定时器
MOV SCON, #0D0H ;//设置串行口工作在模式3下,接收
;//使能
SETB SM2 ;//接收主机送出的地址码
CLR RI ;//清接收中断标志位
JNB RI, $ ;//等待接收结束
MOV A, SBUF ;//判断主机所要通信从机的是否为
;//本机,不是则跳转OFF
CJNE A, #02H, OFF
CLR SM2 ;//接收主机送出的按钮状况
CLR RI ;//清接收中断标志位
JNB RI, $ ;//等待接收结束
MOV A, SBUF ;//显示接收信息
MOV P2, A
CLR TI //清发送中断标志位
MOV SBUF, #5BH ;//发送本机地址02H,5BH为共阴极
;//LED显示2字型编码
JNB TI, $ ;//等待发送结束
AJMP MAIN ;//跳转等待下一次多机通信
OFF:
MOV P2, #3FH ;//显示0,3FH为共阴极LED显示0
;//字型编码
AJMP MAIN
END
从机2(C机,地址为3):
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:
MOV TMOD, #20H ;//使用定时器1,工作在模式2下
MOV TH1, #0E6H ;//波特率1200
MOV TL0, #0E6H
SETB TR1 ;//启动定时器
MOV SCON, #0D0H ;//设置串行口工作在模式3下,接收
;//使能
SETB SM2 ;//接收主机送出的地址码
CLR RI ;//清接收中断标志位
JNB RI, $ ;//等待接收结束
MOV A, SBUF ;//判断主机所要通信从机的是否为
;//本机,不是则跳转OFF
CJNE A, #03H, OFF
CLR SM2 ;//接收主机送出的按钮状况
CLR RI ;//清接收中断标志位
JNB RI, $ ;//等待接收结束
MOV A, SBUF ;//显示接收信息
MOV P2, A
CLR TI ;//清发送中断标志位
MOV SBUF, #4FH ;//发送本机地址03H,4FH为共阴极
;//LED显示3字型编码
JNB TI, $ ;//等待发送结束
AJMP MAIN ;//跳转等待下一