汇编语言实现双机通信.docx

上传人:b****1 文档编号:2103273 上传时间:2022-10-26 格式:DOCX 页数:12 大小:93.54KB
下载 相关 举报
汇编语言实现双机通信.docx_第1页
第1页 / 共12页
汇编语言实现双机通信.docx_第2页
第2页 / 共12页
汇编语言实现双机通信.docx_第3页
第3页 / 共12页
汇编语言实现双机通信.docx_第4页
第4页 / 共12页
汇编语言实现双机通信.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

汇编语言实现双机通信.docx

《汇编语言实现双机通信.docx》由会员分享,可在线阅读,更多相关《汇编语言实现双机通信.docx(12页珍藏版)》请在冰豆网上搜索。

汇编语言实现双机通信.docx

汇编语言实现双机通信

西安邮电大学

单片机课程设计报告

题目:

单片机之间的通信综合设计

 

班级

测控1002班

仵俊娇(06102048)

朱凌萱(06102053)

刘俊廷(06102038)

刘宇(06102043)

指导老师

赵广元

实习时间

12-12-03-----12-12-13

单片机之间的通信综合设计

一、设计要求:

1.A机,B机进行全双工通信,并用2位一体的数码管显示发送的数据和接收的数据。

2.加扩展功能。

二、实验步骤:

1.根据单片机原理,分析实验要求,编写程序。

2.设计硬件电路,并且在Proteus中进行模拟仿真。

3.仿真成功后,合理布线,进行焊接。

4.进行检查调试。

三、所需元器件:

器件名称

数量

AT89C52

2

管脚座

4

晶振

2

30pF电容

2

2k欧电阻

4

纽扣开关

1

220欧电阻

4

两位一体共阳数码管

2

电路板

1

四、主要功能描述:

双机通讯系统实现A机指定数据段对B机指定数据段循环发送数据,建立通信时A机与B机进行一次握手确认,在接收过程中由B机对A机发送的数据进行校验,并可对错误字节进行重新接收。

A机数码管显示A机发送的数据,B机数码管显示B机接收的数据。

五、实验电路图:

六、实验源程序及流程图:

A机程序:

ORG0000H

LJMPAMAIN

ORG0040H

AMAIN:

MOVSP,#5FH

MOVTMOD,#20H;定时器1置为方式2

MOVTH1,#0F4H;装载定时器初值,波特率2400

MOVTL1,#0F4H

MOVSCON,#50H;串口工作在方式2

MOVPCON,#00H;SMOD=0

SETBTR1;启动定时器

SETBET1;开定时器1

SETBES;允许串行口中断

CLRTI;发送中断标志位清零

MOVP2,#00H;

MAIN:

JNB,KEY2;判断按键是否按下

LJMPMAIN

KEY2:

LCALLD10MS;延时,消抖

JB,MAIN;再判断按键是否真的按下

WAIT:

JNB,WAIT;等待按键松手

CALLINIT;调试用数据产生

DIALOG:

MOVA,#0E1H

CALLTXBYTE;发送“E1”联络信号

CALLRXBYTE

CJNEA,#0E2H,DIALOG;B机允许发送

RETX:

CALLTXDATA;发送数据块

CALLRXBYTE

CJNEA,#00H,RETX;B机接受正确

LJMPDIALOG

TXBYTE:

MOVSBUF,A;发送字节子程序

CALLTRANS;调用显示

MOVA,SBUF

JNBTI,$

CLRTI

RET

RXBYTE:

JNBRI,$;接受字节子程序

MOVA,SBUF

CLRRI

RET

TXDATA:

MOVR7,#15;发送数据块子程序

MOVR0,#40H

MOVR6,#00H

LDATA:

MOVA,@R0

CALLTXBYTE

MOVA,R6

ADDA,@R0;求校验和

MOVR6,A;保存校验和

INCR0

DJNZR7,LDATA;整个数据块是否发送完毕

MOVA,R6;发送校验和

CALLTXBYTE

RET

INIT:

MOVR0,#40H;调试用数据产生子程序

MOVR7,#15

MOVA,#36H

L0:

MOV@R0,A

INCA

INCR0

DJNZR7,L0

RET

;延时消抖程序

D1S:

MOVR6,#100

D10:

CALLD10MS

DJNZR6,D10

RET

D10MS:

MOVR5,#10

D1MS:

MOVR4,#249

DL:

NOP

NOP

DJNZR4,DL

DJNZR5,D1MS

RET

;显示子程序

TRANS:

MOVB,#16;采用16进制显示

DIVAB

MOVR1,B

MOVR2,A

MOVR3,#17

DISP:

MOVA,R2

SETB

ACALLDISPLAY

ACALLD10MS

CLR

MOVA,R1

SETB

ACALLDISPLAY

ACALLD10MS

CLR

DJNZR3,DISP

RET

DISPLAY:

MOVDPTR,#TABLE1;设置数据指针地址初值

MOVCA,@A+DPTR;根据有效地址查询

MOVP1,A;结果传送到输出口P1

RET

;共阳

TABLE1:

DB0C0H,0F9H,0A4H,0B0H

DB99H,92H,82H,0F8H

DB80H,90H,88H,83H

DB0C6H,0A1H,86H,8EH

;共阴

TABLE2:

DB3FH,06H,5BH,4FH

DB66H,6DH,7DH,07H

DB7FH,6FH,77H,7CH

DB39H,5DH,79H,71H

END

 

B机程序:

ORG0000H

LJMPBMAIN

ORG0040H

BMAIN:

MOVSP,#5FH

MOVTMOD,#20H;定时器1置为方式2

MOVTH1,#0F4H;装载定时器初值,波特率2400

MOVTL1,#0F4H

MOVSCON,#50H

MOVPCON,#00H;SMOD=0

SETBTR1;启动定时器

WDIALOG:

CALLRXBYTE

CJNEA,#0E1H,WDIALOG;等待联络信号

MOVA,#0E2H

CALLTXBYTE;发送“E2”联络信号

RERX:

CALLRXDATA;接受校验块

XRLA,R6;校验和正确

JNZNO;不正确,转NO

MOVA,#00H;正确

CALLTXBYTE

LJMPWDIALOG

NO:

MOVA,#0FFH

CALLTXBYTE

LJMPRERX

TXBYTE:

MOVSBUF,A;发送字节子程序

JNBTI,$

CLRTI

RET

RXBYTE:

JNBRI,$;接受字节子程序

MOVA,SBUF

CLRRI

RET

RXDATA:

MOVR7,#15;接受数据块子程序

MOVR0,#40H

MOVR6,#00H

LDATA:

CALLRXBYTE

MOV@R0,A

CALLTRANS;调用显示

MOVA,@R0

MOVA,R6

ADDA,@R0;求校验和.................

MOVR6,A;保存校验和

INCR0

DJNZR7,LDATA;整个数据块是否接受完毕

CALLRXBYTE

RET

D1S:

MOVR6,#100

D10:

CALLD10MS

DJNZR6,D10

RET

D10MS:

MOVR5,#10

D1MS:

MOVR4,#249

DL:

NOP

NOP

DJNZR4,DL

DJNZR5,D1MS

RET

TRANS:

MOVB,#16;采用16进制显示

DIVAB

MOVR1,B

MOVR2,A

MOVR3,#17

DISP:

MOVA,R2

SETB

ACALLDISPLAY

ACALLD10MS

CLR

MOVA,R1

SETB

ACALLDISPLAY

ACALLD10MS

CLR

DJNZR3,DISP

RET

DISPLAY:

MOVDPTR,#TABLE1;设置数据指针地址初值

MOVCA,@A+DPTR;根据有效地址查询

MOVP1,A;结果传送到输出口P0

RET

;共阳

TABLE1:

DB0C0H,0F9H,0A4H,0B0H

DB99H,92H,82H,0F8H

DB80H,90H,88H,83H

DB0C6H,0A1H,86H,8EH

;共阴

TABLE2:

DB3FH,06H,5BH,4FH

DB66H,6DH,7DH,07H

DB7FH,6FH,77H,7CH

DB39H,5DH,79H,71H

END

 

A,B机通信流程图(省略按键与显示流程):

A机流程图B机流程图

七、设计原理:

本次课程设计的主要原理有:

1.串行口通信,通过简单的握手验证,在定时器控制下实现字节接收:

如果两个单片机应用系统相距很近,将他们的串行口直接相连即可实现双机通信。

通信时首先A机发送“E1”请求传送数据。

B机收到后发送应答数据“E2”(因此时E2未放入B机数据缓冲区所以B机数码管不显示),表示同意接收。

当A机收到应答信号“E2”后开始发送数据(此时“E2”为A机接收的数据,不显示),每发送一个数据字节都要计算“校验和”,然后B机接收数据并转存到数据缓冲区,接收一个次数据字节便计算一次“校验和”,再接收A机发送的校验和,进行比较若不相等请求A机重发。

2.数码管的动态显示:

数码管的abcdefgh与单片机数据输出端相连,将和和数码管使能端相连,通过控和的高低电平对数码管的高低位进行位选通控制,就使各个数码管轮流受控显示,这就是动态驱动。

在轮流显示过程中,每位数码管的点亮时间为1~2ms由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

3.按键的检测与软件去抖:

作为一个按键,从没有按下到按下以及释放是一个完整的过程,当我们按下一个按键时,总希望某个命令只执行一次,而在按键按下的过程中,不可避免会产生干扰,这些干扰可能造成误触发过程。

为了防止这种现象的产生,需要在按键按下的时候把各种干扰信号滤除掉,一般情况下,我们可以采用电容来滤除掉这些干扰信号,但会增加硬件成本及硬件电路的体积。

对于实时性要求不高的系统,可以采用软件滤波的方法去除干扰信号:

一个按键按下的时候,总是在按下的时刻存在着一定的干扰信号,按下之后就基本上进入了稳定的状态。

从按键被识别按下之后,延时4ms以上,可以避开了干扰信号区域,此时再检测一次按键是否真得已经按下,若真的已经按下,这时肯定输出为低电平,若这时检测到的是高电平,证明之前是由于干扰信号引起的误触发,处理单元便会舍弃本次的按键识别过程。

从而提高了系统的可靠性。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1