单片机双机通信接口应用.docx

上传人:b****7 文档编号:10599997 上传时间:2023-02-21 格式:DOCX 页数:16 大小:201.34KB
下载 相关 举报
单片机双机通信接口应用.docx_第1页
第1页 / 共16页
单片机双机通信接口应用.docx_第2页
第2页 / 共16页
单片机双机通信接口应用.docx_第3页
第3页 / 共16页
单片机双机通信接口应用.docx_第4页
第4页 / 共16页
单片机双机通信接口应用.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

单片机双机通信接口应用.docx

《单片机双机通信接口应用.docx》由会员分享,可在线阅读,更多相关《单片机双机通信接口应用.docx(16页珍藏版)》请在冰豆网上搜索。

单片机双机通信接口应用.docx

单片机双机通信接口应用

一、实验目的与要求:

课程设计目的:

1.通过课程设计巩固、深化和扩展理论知识与初步的专业技能,提高综合运用知识的能力,逐步增强实际工程训练。

2.培养正确的设计思想,掌握课程设计的主要内容、步骤和方法。

3.培养获取信息和综合处理信息的能力、文字和语言表达能力以及协作工作能力。

4.提高运用所学的理论知识和技能解决实际问题的能力及其基本工程素质。

课程设计要求:

1、能够根据设计任务和指标要求,综合运用单片机课程中所学到的理论知识与实践技能独立完成一个设计课题,了解并掌握单片机系统设计的一般设计方法,具备初步的独立设计能力;。

2、根据课题需要选择参考书籍,查阅手册、图表等有关文献资料。

要求通过独立思考、深入钻研课程设计中所遇到的问题,培养自己分析、解决问题的能力。

3、学会撰写课程设计总结报告。

4、通过课程设计,逐步形成严肃认真、一丝不苟、实事求是的工作作风和科学态度,培养学生树立一定的全局观点。

5、在课程设计过程中,要做到团结协作。

意义:

 单片机应用系统设计是单片机课程的实践性教学环节,既涉及到许多理论知识(设计原理与方法),又强调系统设计能力的锻炼,培养创新设计的能力,养成一丝不苟的工作作风,为今后从事单片机行业的工作打下基础。

二、功能要求:

单片机双机通信接口应用。

设计电路并编写程序,完成单片机与单片机之间的通信,甲机发送键盘输入的键号,乙机接收键号并在最右边的LED以十六进制的方式显示出来,通信协议:

以方式2工作,波特率为2400b/s,信息格式为8个数据位,无奇偶校验位。

三、方案论证:

1、总体设计方案:

甲机扫描键盘获得键值,乙机显示键盘的值,使用4*4的矩阵键盘,通信时,当有键按下,甲机先发送0AAH,乙机受到0AAH后发送0BBH表示可以接受,甲机只有收到0BBH后才发送键值,以保证通信的畅通与准确,波特率为2400b/s,故时钟频率为fosc=2400*64或者2400*32,选择不加倍,PCON=00h,仿真时设置如图1-1;

甲机:

扫描键盘,无键按下发送0FFH,让乙机继续等待,重新扫描;有键按下,先发送0AAH,接受0BBH后发送键值。

乙机:

接受数据,不等于0AAH,继续接收数据;等于0AAH,就发送0BBH,然后接受键值并显示键值。

图1-1

系统框图设计如图1-2所示:

图1-2

四、系统硬件设计:

(一)、所用的元器件及其常识:

按钮,LED数码管,AT89C51芯片。

系统硬件设计如图1-3所示:

图1-3系统硬件设计

说明:

甲机的与乙机的GND相连,两机RXD与TXD相连,乙机利用P1做I/O口接LED。

5、软件设计:

1、程序流程图如图所示:

1-4为甲机程序框图,1-5为乙机程序框图

 

 

图1-4

 

 

否是

 

图1-5

2、程序:

(1),甲级的c程序:

/*甲机发送,串口控制字为10010000b,1.单片机双机通信接口应用。

设计电路并编写程序,完成单片机与单片机之间的通信,甲机发送键盘输入的键号,乙机接收键号并在最右边的LED以十六进制的方式显示出来,通信协议:

以方式2工作,波

特率为2400b/s,信息格式为8个数据位,无奇偶校验位SM2为0,无论TB8和RB8为0或者1,都可以接收,使数据只有八位*/

#include

#defineucharunsignedchar

voiddelay(uchar);//延时程序

ucharscan_key(void);//键扫描程序

voidmain(void)

{

uchari=0,j=0,k,keyvalue;

SCON=0x90;//串口初始化,方式2,允许接收

PCON=0x00;//电源控制,波特率不加倍

while

(1)

{

keyvalue=scan_key();//获取键值

if(keyvalue==0x0ff)//判断是否有键按下,有键按下为0H到00fH,无键按下为0FFH

{//发送0FF,使乙机继续等待

SBUF=0x0ff;

while(TI==0){;}

TI=0;

}

else//有键按下

{

while

(1)

{

SBUF=0x0aa;//发送0AAH

while(TI==0){;}

TI=0;

while(RI==0){;}

RI=0;

k=SBUF;

if(k==0x0bb)//收到0BBH代表乙机允许接收,不是继续发送0AAH

{

SBUF=keyvalue;//发送键值

while(TI==0);

TI=0;

break;//发送完后跳出此循环,继续获取键值

}

}}}}

voiddelay(ucharn)//延时子程序

{

charj;

while(n--)

for(j=1;j<122;j++)

{;}

}

ucharscan_key(void)//键盘扫描

{

uchari,j,temp_i,temp_j,key_value=0x0ff;

uchara,b;

temp_i=0x10;

temp_j=0x01;

P1=0x0f0;

a=P1;

if(a!

=0x0f0)//判断有无键按下以及消抖

{

delay(10);

if(a!

=0x0f0)

for(i=0;i<4;i++)

for(j=0;j<4;j++)

{

b=~(temp_i<

P1=b;

a=P1;

if((a&(temp_j<

key_value=i*4+j;

}}

returnkey_value;

}

(2)甲机汇编程序:

ORG0000H

LJMPMAIN

ORG0100H

MAIN:

CLRA;主程序

MOVSCON,#90H;串口初始化

MOVPCON,#00H;波特率不加倍

LOOP:

LCALLSCAN_KEY

LOOP1:

CJNER7,#0FFH,YOUJIAN;有键按下转移

MOVSBUF,#0FFH

WAIT1:

JNBTI,WAIT1

CLRTI

SJMPLOOP

YOUJIAN:

MOVSBUF,#0AAH;有键按下,先发AA再发键值

WAIT2:

JNBTI,WAIT2

CLRTI

WAIT3:

JNBRI,WAIT3

CLRRI

MOVR6,SBUF

CJNER6,#0BBH,YOUJIAN

MOVSBUF,R7

WAIT4:

JNBTI,WAIT4

CLRTI

LJMPLOOP

DELAY:

MOVR5,#04H;延时子程序,10ms

LOOP5:

MOVR6,#0FAH

LOOP6:

DJNZR6,LOOP6

DJNZR5,LOOP5

RET

SCAN_KEY:

MOVR7,#0FFH;键扫描通过R7返回

MOVA,#0F0H

MOVP1,A

MOVA,P1

XRLA,#0F0H

JZLOOP1

LCALLDELAY

MOVA,P1

XRLA,#0F0H

JZLOOP1

KEY1:

MOVA,#0FEH

MOVP1,A

MOVA,P1

CJNEA,#0EEH,S01

MOVR7,#00H

LJMPLOOP1

S01:

CJNEA,#0DEH,S02

MOVR7,#04H

LJMPLOOP1

S02:

CJNEA,#0BEH,S03

MOVR7,#08H

LJMPLOOP1

S03:

CJNEA,#7EH,KEY2

MOVR7,#0CH

LJMPLOOP1

KEY2:

MOVA,#0FDH

MOVP1,A

MOVA,P1

CJNEA,#0EDH,S04

MOVR7,#01H

LJMPLOOP1

S04:

CJNEA,#0DDH,S05

MOVR7,#05H

LJMPLOOP1

S05:

CJNEA,#0BDH,S06

MOVR7,#09H

LJMPLOOP1

S06:

CJNEA,#7DH,KEY3

MOVR7,#0DH

LJMPLOOP1

KEY3:

MOVA,#0FBH

MOVP1,A

MOVA,P1

CJNEA,#0EBH,S07

MOVR7,#02H

LJMPLOOP1

S07:

CJNEA,#0DBH,S08

MOVR7,#06H

LJMPLOOP1

S08:

CJNEA,#0BBH,S09

MOVR7,#0AH

LJMPLOOP1

S09:

CJNEA,#7BH,KEY4

MOVR7,#0EH

LJMPLOOP1

KEY4:

MOVA,#0F7H

MOVP1,A

MOVA,P1

CJNEA,#0E7H,S10

MOVR7,#03H

LJMPLOOP1

S10:

CJNEA,#0D7H,S11

MOVR7,#07H

LJMPLOOP1

S11:

CJNEA,#0B7H,S12

MOVR7,#0BH

LJMPLOOP1

S12:

CJNEA,#77H,S13

MOVR7,#0FH

LJMPLOOP1

S13:

LJMPLOOP1;RET

END

(3)乙机C语言程序:

/*串口控制字为10010000b,方式2;foc=2400*32(或者2400*64)SM2为0,无论TB8和RB8为0或者1,都可以接收,使数据只有八位*/

#include

#defineucharunsignedchar

Ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

voidmain(void)

{

uchari,j,k,h;

SCON=0x90;//串口初始化

PCON=0x00;//电源控制字,波特率不加倍

P1=0x00;//初始状态不显示

while

(1)

{

REN=1;

while(RI==0){;}//接收

RI=0;

k=SBUF;

if(k==0x0aa)//判断接收的是不是0AAH,不是继续接收

{

SBUF=0x0bb;//是,发送0BBH

while(TI==0){;}

TI=0;

while(RI==0){;}//接收键值

RI=0;

i=SBUF;

P1=table[i];//显示

for(j=0;j<254;j++)//延时

{

for(h=0;h<254;h++)

{;}

}}}}

(4)乙机汇编程序:

ORG0000H

AJMPMAIN

ORG0100H

MAIN:

MOVSCON,#90H;串口初始化

MOVPCON,#00H

MOVP1,#00H

LOOP:

SETBREN

WAIT1:

JNBRI,WAIT1;接收发送信号

CLRRI

MOVA,SBUF

CJNEA,#0AAH,LOOP

MOVSBUF,#0BBH

WAIT2:

JNBTI,WAIT2

CLRTI

WAIT3:

JNBRI,WAIT3

CLRRI

MOVA,SBUF

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP1,A

MOVR5,#01H

LOOP1:

MOVR6,#0FAH

LOOP2:

MOVR7,#0FAH

LOOP3:

DJNZR7,LOOP3

DJNZR6,LOOP2

DJNZR5,LOOP1

LCALLLOOP

TABLE:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H

DB7FH,6FH,77H,7CH,39H,5EH,79H,71H;显示码表

END

六、仿真图:

如图1-6所示

图1-6仿真图

七、心得体会:

通过这次单片机应用系统设计,培养了我们的独立设计能力,实际分析问题和动手能力,,获取信息和综合处理信息的能力、文字和语言表达能力以及协作工作能力,养成理论联系实际和一丝不苟的工作作风,使我们更加充分的了解了课本上所学不到的知识,并能够应用于实践当中。

这次课程设计,让我们觉得学术遥远,自己才疏学浅。

单片机应用系统的研究何其复杂,这次设计其实只能是涉其皮毛,距离理想之境还有很长的路。

课程设计能够顺利完成,并非其中一人之功。

组员之间都给了对方很多帮助,使我们都互相交流学到了许多知识,还有老师在实验室不倦地指导和教诲,在此深深地感谢他们:

感谢指导过我们的老师!

勤劳合作的队友!

感谢对方对彼此的帮助和鼓励。

这次设计的实现凝结着两人的智慧、心血和鼓励。

回顾起此次课程设计,从到定题目到顺利完成,从理论到实践,在整个学习的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

在设计中遇到了很多难以解决的问题,最后都在老师的帮助、两人的辛勤努力下,终于迎刃而解。

同时,在老师的身上我们学得到很多实用的知识,我再次表示感谢!

感谢我们的指导老师!

只要是您提醒过该注意的地方,我们都会记下来。

事实证明,这些指导对我们的帮助很大。

从您身上,我们还学到了很多处事的道理,它们使我们终身受益。

衷心地感谢!

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

当前位置:首页 > 总结汇报 > 工作总结汇报

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

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