双机通信课程设计报告.docx
- 文档编号:10633301
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:14
- 大小:144.34KB
双机通信课程设计报告.docx
《双机通信课程设计报告.docx》由会员分享,可在线阅读,更多相关《双机通信课程设计报告.docx(14页珍藏版)》请在冰豆网上搜索。
双机通信课程设计报告
单片机课程设计报告
双机通信的设计与仿真
学院:
专业:
姓名:
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语言程序设计,了解了单片机串行通信的基本知识,对于以后的学习和工作都有很大的益处。
在学习的过程中,也遇到了一些困难,比如开始的时候,由于发送端和接收端的通信协议没有做好,导致数据不能正确的传输,在解决问题的过程中,对于通信协议的实现有了深刻的认识。
通过这次课程设计,锻炼了我们的独立思考的能力,在设计过程中培养了团结协作的精神。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 双机 通信 课程设计 报告