双机通信课程设计报告.docx

上传人:b****7 文档编号:10633301 上传时间:2023-02-22 格式:DOCX 页数:14 大小:144.34KB
下载 相关 举报
双机通信课程设计报告.docx_第1页
第1页 / 共14页
双机通信课程设计报告.docx_第2页
第2页 / 共14页
双机通信课程设计报告.docx_第3页
第3页 / 共14页
双机通信课程设计报告.docx_第4页
第4页 / 共14页
双机通信课程设计报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

双机通信课程设计报告.docx

《双机通信课程设计报告.docx》由会员分享,可在线阅读,更多相关《双机通信课程设计报告.docx(14页珍藏版)》请在冰豆网上搜索。

双机通信课程设计报告.docx

双机通信课程设计报告

单片机课程设计报告

 

双机通信的设计与仿真

 

学院:

专业:

姓名:

 

2010年12月8日

 

目录

一、实验要求………………………………………………………..2

1、设计内容

2、设计要求

二、实验原理………………………………………………………...3

三、实验框图………………………………………………………...5

四、实验电路图……………………………………………………...7

五、实验程序………………………………………………………...8

六、实验器材………………………………………………………..12

七、总结……………………………………………………………..12

 

一、实验内容

1、设计内容

1)用双全共数据传送法实现两机互相通信。

2)完成双机通信的设计制作及仿真。

2、设计要求

1)能本机显示按键的数值。

2)能向对方机发送按键的数。

3)能接收对方机发送的数并显示。

4)发送数及按键用中断实现。

5)用串行口的双全工方式通信。

 

二、实验原理

计算机与外界的信息交换称为通信,常用的通信方式有两种:

并行通信和串行通信。

51单片机用4个接口与外界进行数据输入与数据输出就是并行通信,并行通信的特点是传输信号的速度快,但所用的信号线较多,成本高,传输的距离较近。

串行通信的特点是只用两条信号线(一条信号线,再加一条地线作为信号回路)即可完成通信,成本低,传输的距离较远。

串行数据通信要解决两个关键问题,一个是数据传送,另一个是数据转换。

所谓数据传送就是指数据以什么形式进行传送。

所谓数据转换就是指单片机在接收数据时,如何把接收到的串行数据转化为并行数据,单片机在发送数据时,如何把并行数据转换为串行数据进行发送。

单片机的串行通信使用的是异步串行通信,所谓异步就是指发送端和接收端使用的不是同一个时钟。

异步串行通信通常以字符(或者字节)为单位组成字符帧传送。

字符帧由发送端一帧一帧地传送,接收端通过传输线一帧一帧地接收。

51单片机的串行接口是一个全双工的接口,它可以作为UART(通用异步接受和发送器)用,也可以作为同步移位寄存器用。

51单片机串行接口的结构如下:

(1)数据缓冲器(SBUF)

接受或发送的数据都要先送到SBUF缓存。

有两个,一个缓存,另一个接受,用同一直接地址99H,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBUF中接收到的数据取出。

(2)串行控制寄存器(PCON)

SCON用于串行通信方式的选择,收发控制及状态指示,各位含义如下:

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

SM0,SM1:

串行接口工作方式选择位,这两位组合成00,01,10,11对应于工作方式0、1、2、3。

串行接口工作方式特点见下表

SM0

SM1

工作方式

功能

波特率

0

0

0

8位同步移位寄存器(用于I/O扩展)

fORC/12

0

1

1

10位异步串行通信(UART)

可变(T1溢出率*2SMOD/32)

1

0

2

11位异步串行通信(UART)

fORC/64或fORC/32

1

1

3

11位异步串行通信(UART)

可变(T1溢出率*2SMOD/32)

SM2:

多机通信控制位。

REN:

接收允许控制位。

软件置1允许接收;软件置0禁止接收。

TB8:

方式2或3时,TB8为要发送的第9位数据,根据需要由软件置1或清0。

RB9:

在方式2或3时,RB8位接收到的第9位数据,实际为主机发送的第9位数据TB8,使从机根据这一位来判断主机发送的时呼叫地址还是要传送的数据。

TI:

发送中断标志。

发送完一帧数据后由硬件自动置位,并申请中断。

必须要软件清零后才能继续发送。

RI:

接收中断标志。

接收完一帧数据后由硬件自动置位,并申请中断。

必须要软件清零后才能继续接收。

(3)输入移位寄存器

接收的数据先串行进入输入移位寄存器,8位数据全移入后,再并行送入接收SBUF中。

(4)波特率发生器

波特率发生器用来控制串行通信的数据传输速率的,51系列单片机用定时器T1作为波特率发生器,T1设置在定时方式。

波特率时用来表示串行通信数据传输快慢程度的物理量,定义为每秒钟传送的数据位数。

(5)电源控制寄存器PCON

其最高位为SMOD。

(6)波特率计算

当定时器T1工作在定时方式的时候,定时器T1溢出率=(T1计数率)/(产生溢出所需机器周期)。

由于是定时方式,T1计数率=fORC/12。

产生溢出所需机器周期数=模M-计数初值X。

 

三、实验框图

(1)发送端流程图

(2)接收端流程图

 

四、实验电路图

 

五、实验程序

#include

#defineucharunsignedchar

sbitRS=P2^0;

sbitRW=P2^1;

sbitLCDEN=P2^2;

ucharsenddata='';

ucharreceivedata='';

ucharns=0;

ucharnr=0;

ucharsposition=7,rposition=23;

ucharstr1[16]={"SENDING:

"};

ucharstr2[16]={"RECVING:

"};

/*-----------------------------------------------------*/

/*---------------------------子程序部分----------------*/

/*-----------------------------------------------------*/

codechar

keycode[16]={0xEE,0xDE,0xBE,0x7E,0xED,0xDD,0xBD,0x7D,0xEB,0xDB,0xBB,0x7B,0xE7,0xD7,0xB7,0x77};

codecharNumber[16]={'7','8','9','/','4','5','6','*','1','2','3','-','C','0','=','+'};

codecharksp[4]={0xFE,0xFD,0xFB,0xF7};

voiddelaykey(void)

{

uchari,j;

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

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

;

}

ucharkeypadscan()

{

charkey,i;

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

{

P1=ksp[i];

if(P1!

=ksp[i])

{

key=P1;

if(key!

=ksp[i])

{

while(P1!

=ksp[i]);

return(key);break;

}

}

}

}

chargotkey()

{

chartemp,i;

temp=keypadscan();

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

{

if(temp==keycode[i])returnNumber[i];

}

return'R';

}

voidDelayL()

{

ucharm,n;

m=0xA0;

n=0xFF;

while(m--)while(n--);

}

voidDelayS()

{

ucharii;

ii=0x1F;

while(ii--);

}

voidWriteCommand(ucharc)

{

DelayS();

LCDEN=0;

LCDEN=1;

RS=0;

RW=0;

P0=c;

}

voidWriteData(ucharc)

{

DelayS();

LCDEN=0;

LCDEN=1;

RS=1;

RW=0;

P0=c;

}

voidShowChar(ucharpos,ucharc)

{

ucharp;

if(pos<0x10)p=pos+0x80;

elsep=pos+0xB0;

WriteCommand(p);

WriteData(c);

}

voidShowString(ucharline,uchar*prt)

{ucharL,i;

L=line*0x10;

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

{ShowChar(L,*(prt+i));

L++;}

}

voidInitLcd()

{

DelayL();

WriteCommand(0x38);

WriteCommand(0x38);

WriteCommand(0x06);

WriteCommand(0x0C);

WriteCommand(0x01);

WriteCommand(0x80);

}

/*-----------------------------------------------------*/

/*---------------------主程序部分----------------------*/

/*-----------------------------------------------------*/

voidmain(void)

{ucharu;

EA=0;//关总中断;

TMOD=0x20;//定时器1工作于方式2,8位自动重装;

TH1=0xF8;

TL1=0xF8;//波特率4800位/s;

SCON=0x50;//串口工作于方式1(8位),波特率可变;

PCON=0x00;//波特率不加倍;

IT0=1;

IP=0x11;//外部中断0和串口高优先级;

TR1=1;//启动定时器1;

EX0=1;//外部中断0允许;

ES=1;//串口中断允许;

EA=1;//开总中断;

SP=0x50;

InitLcd();

DelayL();

ShowString(0,str1);

ShowString(1,str2);

while

(1)

{

P1=0xF0;

DelayL();

if(sposition>15){for(u=8;u<16;u++)ShowChar(u,'');sposition=8;}

if(sposition>7)ShowChar(sposition,senddata);

if(rposition>31){for(u=24;u<32;u++)ShowChar(u,'');rposition=24;}

if(rposition>23)ShowChar(rposition,receivedata);

}

}

/*-----------------------------------------------------*/

/*----------------------中断子程序---------------------*/

/*-----------------------------------------------------*/

voidINT00(void)interrupt0

{EA=0;

senddata=gotkey();

SBUF=senddata;

EA=1;

}

voidES0(void)interrupt4

{

if(RI){RI=0;rposition++;receivedata=SBUF;}

else{TI=0;sposition++;}

}

 

六、实验器材

4×3矩阵键盘

2个AT89C52

2个LCD

串口连接线

七、总结

经过一周的课程设计,我们小组终于完成了设计任务。

虽然在这段时间里有时很迷茫,但却得到了很多的收获。

经过课程设计,在查阅资料及老师的指导下,掌握了基于单片机的C语言程序设计,了解了单片机串行通信的基本知识,对于以后的学习和工作都有很大的益处。

在学习的过程中,也遇到了一些困难,比如开始的时候,由于发送端和接收端的通信协议没有做好,导致数据不能正确的传输,在解决问题的过程中,对于通信协议的实现有了深刻的认识。

通过这次课程设计,锻炼了我们的独立思考的能力,在设计过程中培养了团结协作的精神。

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

当前位置:首页 > 医药卫生 > 基础医学

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

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