当前位置:文档之家› 串行通信及数据校验程序设计.

串行通信及数据校验程序设计.

中北大学单片机原理及接口技术课程设计说明书学生姓名:学号:学院:计算机与控制工程学院专业:自动化题目:串行通信及数据校验程序设计指导教师:职称:2013年12月22日中北大学单片机及其接口技术课程设计任务书12/13 学年第一学期学院:计算机与控制工程学院专业:自动化学生姓名:学号课程设计题目:串行通信及数据校验程序设计起迄日期:12月16 日~12月20 日课程设计地点:中北大学指导教师:沈小林下达任务书日期: 2013年12月16日课程设计任务书课程设计任务书目录一、设计任务 (2)1.任务 (2)2.通信技术要求 (2)二、基本原理 (2)1. AT89C51单片机的串行接口结构 (2)2.串行口方式1的发送和接收 (4)3.设置串行通信寄存器 (4)三、系统方案比较与论证 (5)1.汇编语言和C语言的特点及选择 (5)2.并行通信与串行通信的比较 (5)3.串行通信程序设计的比较 (6)4.同步通信与异步通信的区别 (6)四、系统电路设计 (6)五、软件设计 (7)1.发送程序设计 (7)2.接收程序设计 (7)3.校验程序设计 (8)4.系统软件总体流程图 (9)六、总结 (11)七、参考文献 (11)一、设计任务1.任务通过对单片机串行通信程序设计掌握单片机串行数据通讯的实现及数据校验的原理。

2.通信技术要求(1)串行通信波特率:9600bps;(2)数据长度:20字节二、基本原理1.AT89C51单片机的串行接口结构51单片机的串行接口是一个全双工的接口,它可以作为UART用,也可以作为同步移位寄存器用。

51单片机串行接口的结构如下:(1)数据缓冲器(SBUF)接受或发送的数据都要先送到SBUF缓存。

接收SBUF和发送SBUF用同一直接地址99H,两者在物理结构上是相互独立的,单片机用它们来接收和发送数据,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBUF中接收到的数据取出。

(2)串行控制寄存器(SCON)SCON用于串行通信方式的选择,收发控制及状态指示,各位含义如下:SM0,SM1:串行接口工作方式选择位,这两位组合成00,01,10,11对应于工作方式0、1、2、3。

串行接口工作方式特点见下表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)波特率计算串行口方式1波特率≌2SMOD /32×f OSC /12(256-X)下表列出了定时器T1工作于方式2常用波特率及初值。

.方式1真正用于串行发送或接收,为10位通用异步接口。

TXD与RXD分别用于发送与接收数据。

收发一帧数据的格式为1位的起始位(低位在前)﹑1位停止位,最高位TB8用来作奇偶校验位,共10位。

在接收时,停止位进入SCON的RB8,此方式的传送波特率可调。

串行口方式1的发送与接收时序如图7—12(a)和(b)所示。

图1—1 方式1发送和接收时序3.设置串行通信寄存器。

(1)确定定时器T1工作模式寄存器TMOD令TMOD=00100000B=10H,定时器工作于模式2(自动重装初始值定时器),这种模式下可以自动重新装载初始值,可省去用户软件中重装常数的语句,并可产生相当精确的定时时间,此时定时器T1用作波特率发生器,系统晶体振荡频率为11.059MHZ。

(2)设置串行通信控制寄存器SCON由于采用了方式1、全双工通信、允许接收,所以SCON中取(SM0 SM1)=0 1、REN =1,其余有关多机通信的控制位SM2、TB8、RB8和接收/发送中断标志TI、RI都应清0,因此SCON=01010000B=50H,基本设置如下表所示:(3令波特率控制位SMOD=0,波特率为设定值9600bps。

(4)计算定时器T1的初值XX≌256-fosc×(SMOD+1)/(384×波特率)解得:X≌FDH所以(TH1)=(TL1)=FDH。

(5)确定通信协议甲机:将片外数据存储器单元的内容向乙机发送,每发送一帧信息,乙机对接收的信息进行奇偶校验。

此处对发送的数据作偶校验,将P值放在TB8中。

若校验正确,则乙机向甲机回发“数据发送正确”的信号(以00H作为应答信号)。

甲机收到乙机“正确”的应答信号后,再发送下一个字节。

若奇偶校验有错,则乙机发出“数据发送不正确”的信号(以FFH作为应答信号)。

甲机接收到“不正确”应答信号后,重新发送原数据,直至发送正确。

甲机将该数据块发送完毕后停止发送。

其发送格式为:乙机:接收甲机发送的数据,并写入片外数据存储器中。

每接收一帧数据,乙机对所接收的数据进行奇、偶校验,并发出相应的应答信号,直至接收完所有的数据。

4 MAZ232芯片用8051串行接口通信,如果两台8051单片机之间的距离很近(不超过1.5m),可以采用直接将两台8051单片机的串行接口直接相连,利用其自身的TTL电平(0-5V)直接传输数据信息。

如果传输距离较远(超过1.5m),由于传输线的阻抗与分布电容,会产生电平损耗和波形畸变,以至于检测不出数据或数据出错。

此时可利用 RS232标准总线接口,将单片机输出的TTL电平转换为RS232标准电平(逻辑1为-15—-5V;逻辑0为+5-—+15V)。

用RS232可将传输距离提高到15m,如果想远距离传输,可以采用RS422或者RS485。

电平转换芯片MAX232是美信公司(MAXIM)生产,专用于进行将TTL电平转换为RS232电平的芯片,MAX232内部有泵电源,能将+5V电源电压在芯片内提高到RS232电平所需的+10V或者-10V电平。

5九针串口口,分别称为 COM1 和 COM2。

二、系统方案比较与论证1.汇编语言和C语言的特点及选择本设计是硬件电路和软件编程相结合的设计方案,选择合适的编程语言是一个重要的环节。

在单片机的应用系统程序设计时,常用的是汇编语言和C语言。

主机硬件,程序可读性和可一直性比较差。

而C语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算方便,表达花类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点。

本着学习和创新的精神,我们采用C语言编写了程序。

2.并行通信与串行通信的比较计算机与外界的信息交换称为通信,常用的通信方式有两种:并行通信和串行通信。

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

串行通信的特点是只用两条信号线即可完成通信,成本低,传输的距离较远。

3.串行通信程序设计的比较串行通信程序设计主要有微机发送接收程序和单片机发送接收程序。

微机发送接收程序复杂难懂,操作不便。

单片机发送接收程序简单易懂,操作方便。

故而,此系统采用后者。

4.同步通信与异步通信的区别“异步通信”是一种很常用的通信方式。

异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的。

异步通信的好处是通信设备简单、便宜,但传输效率较低。

异步通信也可以是以帧作为发送的单位。

接收端必须随时做好接收帧的准备。

这是,帧的首部必须设有一些特殊的比特组合,使得接收端能够找出一帧的开始。

“同步通信”的通信双方必须先建立同步,即双方的时钟要调整到同一个频率。

收发双方不停地发送和接收连续的同步比特流。

但这时还有两种不同的同步方式。

一种是使用全网同步,用一个非常精确的主时钟对全网所有结点上的时钟进行同步。

另一种是使用准同步,各结点的时钟之间允许有微小的误差,然后采用其他措施实现同步传输。

三、系统电路设计两个单片机采用全双工方式发送数据,甲机发送,乙机接收。

串行接口工作于方式 1两机均选用11..0592MHZ的振荡频率,波特率为9600bps。

双机通信的硬件连接图如下图:系统接口电路原理图四、软件设计1.发送程序设计#include<reg52.h> //包含单片机寄存器的头文件sbit key=P2^7;void main(){TMOD=0x20; //TMOD=0010 0000B,定时器T1工作于方式 2 SCON=0x40; //SCON=0100 0000B,串口工作方式1 1起始位8数据位1停止位PCON=0x00; //PCON=0000 0000B,波特率9600 晶振11.0592 TH1=0xfd; //根据规定给定时器T1赋初值TL1=0xfd; //根据规定给定时器T1赋初值TR1=1; //启动定时器T1while(1){unsigned int i,j;if(key==0){for(i=0; i<100; i++) //for语句先赋值即i=0,然后执行语句即后面的for语句,然后执行i++,然后判断为真是跳出循环for(j = 249; j > 0; j--); //什么也不做等待一个机器周期if(key==0){SBUF=P1; //发送数据while(TI==0); //检查发送完成中断标志如果未完成就等等否则复位发送标志位以便下个数据可以发送TI=0;}}}}2.接收程序设计#include<reg52.h>void main(){TMOD=0x20; //TMOD=0010 0000B,定时器T1工作于方式2 SCON=0x40; //SCON=0100 0000B,串口工作方式1 1起始位8数据位1停止位PCON=0x00; //PCON=0000 0000B,波特率9600 晶振11.0592TH1=0xfd; //根据规定给定时器T1赋初值TL1=0xfd; //根据规定给定时器T1赋初值TR1=1; //启动定时器T1while(1){unsigned int i,j;if(key==0){for(i=0; i<100; i++) //for语句先赋值即i=0,然后执行语句即后面的for语句,然后执行i++,然后判断为真是跳出循环for(j = 249; j > 0; j--); //什么也不做等待一个机器周期if(key==0){P1=SBUF; //接收数据}3仿真keil和multisim联合仿真五、总结在为期一周的单片机课程设计中,从选课题查资料,到学软件做仿真,再到检测与调试,我都收获了很多。

相关主题