《第七章-串行接口.doc》由会员分享,可在线阅读,更多相关《第七章-串行接口.doc(4页珍藏版)》请在金锄头文库上搜索。
1、第七章 串行接口 71 什么是串行异步通信?它有哪些特点?有哪几种帧格式?答:串行通信即所传送数据的各位按顺序一位一位地发送或接收。串行通信分同步和异步两种方式。 在异步通信中数据或字符是一帧(frame)一帧地传送的。帧定义为一个字符的完整的通信格式 ,通常也称为帧格式。 它的主要特点:由于异步通信每传送一帧有固定格式,通信双方只需按约定的帧格式来发送和接收数据,所以硬件结构比同步通信方式简单;此外,它还能利用校验位检测错误。帧格式的一般形式是先用一个起始位0表示字符的开始,然后是数据位,其后是奇偶校验位,最后是停止位,用以表示字符的结束。不同的帧格式主要表现在数据位可以不同,例如其位数为5
2、8位,停止位可以是1、1.5、2位;起始位和奇偶校验位可以有,也可以没有。起始位、数据位、奇偶校验位、停止位的不同组合就形成了多种形式的帧格式。不同的计算机规定适用的帧格式有所不同,例如适用于80C51的帧格式只有三种:8位数据位;一位起始位、8位数据位、一位停止位;一位起始位、8位数据位、一位奇偶校验位、一位停止位。72 某异步通信接口按方式 3传送,己知其每分钟传送 3600个字符,计算其传送波特率。答:设每个字符由1个起始位、8个数据位、1个可编程位和1个停止位组成,则其传送波特率为: llb3600/60s=660b/s73 为什么定时器Tl用做串行口波特率发生器时,常采用工作方式2?
3、若己知系统时钟频率、通信选用的波特率,姑何计算其初值?答:在串行通信中,收发双方对发送或接收的数据速率(即波特率)要有一定的约定。我们通过软件对80C51串行口编程可约定4种工作方式。其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器Tl的溢出率控制。定时器Tl用做串行口波特率发生器时,因为工作方式2是自动重装载方式,因而当定时器Tl作波特率发生器时常采用工作方式2。 在方式2中,TLl作计数用,而自动重装载的值放在THl内。如果已知系统时钟频率、通信选用的波特率,计算初值的方法如下:设计数初值为X,那么每过256一X个机器周期定时器1就会产生一次溢出。溢出周期为:
4、 12T= (256-X) f ose 溢出率为溢出周期之倒数,所以2SMOD f ose波特率= 32 l2(256-X) 则定时器 Tl在方式 2 时的初值为: f ose2SMOD X=256- 384波特率74 己定时器T1设置为方式2,用做波特率发生器 ,系统时钟频率为 6 MHz ,求可能 产生的最高和最低的波特率是多少 ?答 : 最高波特率 : TH l= 0FFH TLl= 0FFH 波特率最高 =2/326000 000/(12(256- 255)b/s= 31 250 b/s最低波特率 : TH l= OOH TLl= OOH波特率最低 = 1/32 6 000 000/(
5、12(256- 0)b/s= 61 b/s75 设计 一 个 80C51 单片机的双机通信系统,并编写程序将甲机片外 RAM 3400H 3500H的教据块通过串行口传送到乙机的片外RAM 4400H 4500H单元中去 。答:设波特率为 9600 b/s。当晶体频率为 f= 11.0592 MHz和SMOD=1时,定时器T1按方式2工作 ,TH l=0FAH ,TLl=0FAH 。 甲机发送程序 SEND_SUB: MOV TMOD,#20H ;设定时器TlI:作在方式2MOV THl,#0FAH ;设定时器Tl的初值MOV TLl,#0FAH MOV PCON,#80H ;置SMOD=lM
6、OV SCON,#50H ;串口初始化为方式1,允许接收SETB TR1 ;启动定时器TlEX5_SEND1: MOV DPTR,#3400H ;置数据块首地址 MOV R6,#00H ;长度寄存器初始化 MOV R5,#00H ;校验和寄存器初始化 MOV SBUF,R6 ;发送长度 JNB TI,$ ;等待发送 CLR TI EX5_SEND2: MOVX A,DPTR ;读取数据 MOV SBUF,A ;发送数据 ADD A,R5 ;形成累加和送R5 MOV R5,A INC DPTR ;修改地址指针JNB TI,$ ;等待发送CLR TI DJNZ R6,EX5_SEND2 ;发送末完
7、,继续MOV SBUF,R5 ;发校验码JNB TI,$CLR TIJNB RI,$ ;等乙机回答CLR RI MOV A,SBUFJZ EX5_SENDOK ;发送正确返回LJMP EX5_SEND1 ;发送有错,重发EX5_SENDOK: RET乙机接收程序 RECEIVE_SUB:. MOV TMOD,#20H ;定时器Tl初始化 MOV THl,#0FAH MOV TLl,#0FAH MOV PCON,#80H MOV SCON,#50H SETB TR1 EX5_RCV1: MOV DPTR,#4400HJNB RI,$CLR RIMOV A,SBUF ;接收发送长度MOV R6,A
8、MOV R5,#00H ;累加和清0 EX5JRCV2; JNB RI,$CLR RIMOV A,SBUF ;接收数据MOVX DPTR,A ;存储数据INC DPTR ;修改地址指针ADD A,R5MOV R5,ADJNZ R6,EX5_RCV2 ;未接收完,继续JNB RI,$ ;接收校验码CLR RIMOV A,SBUFXRL A,R5 ;比较校验码 JZ EX5_RCVOK ;正确转EX5_RCVOKMOV SBUF,#0FFH ;出错送0FFHJNB TI,$ CLR TILJMP EX5_RCV1 ;重新接收EX5_RCVOK: MOV SBUF,#00H ;正确送00HJNB T
9、I,$ ;发迭完,返回CLR TIRET76 利用80C51串行口控制8位发光二极管每隔1s交替地亮、灭,画出电路并偏写程序。答:画出电路,见题图7-1。图中74HC164的CK等引脚分别由单片机的P3.1等引脚控制。 ;P3.1 EQU CLK ;P3.0 EQU SDA(A,B) ;P1.0 EQU CLR CLR P1. 0 ;清输出SETB P1. 0 ;允许串行移位MOV SCON,#00 H ;置串行工作方式。MOV A,#055H ;显示初值EX6_RPT: MOV SBUF,A ;将数据送出JNB TI, $ CLR TI LCALL DLY_1S ;调延时1s子程序(省略)RR A ;更新输出数据LJMP EX6_RPT ;循环