汇编语言串口通信接收发送的程序题

更新时间:2023-09-23 22:49:01 阅读量: IT计算机 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

例2 利用定时/计数器T0的方式1,产生10ms的定时,并使P1.0引脚上输出周期为20ms的方波,采用中断方式,设系统时钟频率为12 MHz。 解:1、计算计数初值X:

由于晶振为12 MHz,所以机器周期Tcy为1 ?s。 所以:

N=t/ Tcy =10×10-3 / 1×10-6=10000 X=65536-10000=55536=D8F0H 即应将D8H送入TH0中,F0H送入TL0中 2、求T0的方式控制字TMOD:

M1M0=01,GATE=0,C/T=0,可取方式控制字为01H; ORG 0000H

LJMP MAIN ;跳转到主程序 ORG 000BH ;T0的中断入口地址 LJMP DVT0 ;转向中断服务程序 ORG 0100H

MAIN:MOV TMOD,#01H ;置T0工作于方式1 MOV TH0,#0D8H ;装入计数初值 MOV TL0,#0F0H

SETB ET0 ;T0开中断 SETB EA ;CPU开中断 SETB TR0 ;启动T0

SJMP $ ;等待中断 DVT0:CPL P1.0 ;P1.0取反输出 MOV TH0,#0D8H ;重新装入计数值 MOV TL0,#0F0H

RETI ;中断返回

END ? 2、串行口方式1的发送和接收

例7-4:89C51串行口按双工方式收发ASCII字符,最高位用来作奇偶校验位,采用奇校验方式,要求传送的波特率为1200b/s。编写有关的通信程序。

解:7位ASCII码加1位奇校验共8位数据,故可采用串行口方式1。

89C51单片机的奇偶校验位P是当累加器A中1的数目为奇数时,P=1。如果直接把P的值放入ASCII码的最高位,恰好成了偶校验,与要求不符。因此,要把P的值取反以后放入ASCII码最高位,才是要求的奇校验。 ? ?

2、串行口方式1的发送和接收

双工通信要求收、发能同时进行。收、发操作主要是在串行接口进行,CPU只是

把数据从接收缓冲器读出和把数据写入发送缓冲器。数据传送用中断方式进行,响应中断以后,通过检测是RI置位还是TI置位来决定CPU是进行发送操作还是接收操作。 发送和接收都通过调用子程序来完成,设发送数据区的首地址为20H,接收数据区的首地址为40H,fosc为6MHz,通过查波特率初值(表7-2)可知定时器的初装值为F3H。定时器T1采用工作模式2,可以避免计数溢出后用软件重装定时初值的工作。 ?

2、串行口方式1的发送和接收

主程序

MOV TMOD ,#20H ;定时器1设为模式2

MOV TL1 , #0F3H ;定时器初值 MOV TH1 ,#0F3H ;8位重装值

SETB TR1 ;启动定时器1 MOV SCON ,#50H ;设置为方式1, ;REN=1 MOV R0 ,#20H ;发送数据区首址 MOV R1 ,#40H ;接收数据取首址 ACALL SOUT ;先输出一个字符 SETB ES

SETB EA

SJMP $ ;等待中断 ?

2、串行口方式1的发送和接收

发送子程序

SOUT: CLR TI

MOV A , @R0 ;取发送数据到A

MOV C ,P ;奇偶标识赋予C CPL C ;奇校验 MOV ACC.7, C

INC R0 ;修改发送数据指针 MOV SBUF ,A ;发送ASCII码

RET ;返回 ? 2、串行口方式1的发送和接收 ? 例7-7:利用串行口和堆栈技术发送字符串常量。 ? 上面两个例子中,发送和接收的都是一些变量数据,且存放在内部RAM单元中。现说明如何利用堆栈技术发送存放在程序存储器内的字符串常量。 ? 下面的例子中,这些字符串是发送给CRT终端的,以回车符(CR)和换行符(LF)开始,以换码符(ESC)为结尾。下面是程序片断: ? 2、串行口方式1的发送和接收

CR EQU 0DH ;ASCII回车符

LF EQU 0AH ;ASCII换行符 ESC EQU 1BH ;ASCII换码符

……

MOV TMOD ,#20H ;设置定时器T1为模式2

MOV TL1 ,#0FDH ;设波特率位9600b/s

;(fosc=11.059MHz) MOV TH1 ,#0FDH

SETB TR1 ;启动T1运行 MOV SCON ,#01000000B ;设置串行口方式1 ACALL XSTRING

DB CR ,LF

DB ‘NU&BIAA’ ;字符串常量 DB ESC MOV B, #01H

…… ? ?

3、串行口方式2、方式3的发送和接收

串行口方式 2与方式 3基本一样(只是波特率设置不同),接收/发送 11位信息:

开始为l位起始位(0),中间8位数据位,数据位之后为1位程控位(由用户置SCON的TB8决定),最后是1位停止位(1)。只比方式l多了一位程控位。 3、串行口方式2、方式3的发送和接收

例7-8:用第9个数据位作奇偶校验位,编制串行口方式2的发送程序。

解:设计一个发送程序,将片内RAM 50H~5FH中的数据串行发送;串口设定为方

式2,TB8作奇偶校验位。在数据写入发送缓冲器之前,先将数据的奇偶位P写入TB8,这时,第9位数据作奇偶校验用。 程序清单如下:

TRT: MOV SCON ,#80H ;方式2设定

MOV PCON ,#80H ;取波特率为fosc/32 MOV R7 ,#10H ;数据长度10H→R7 LOOP: MOV A ,@R0 ;取数据→A MOV C ,PSW.0 ;P→TB8

MOV TB8 ,C

MOV SBUF ,A ;数据→SBUF,启动发送 WAIT: JBC TI ,CONT ;判断发送中断标志 SJMP WAIT CONT: INC R0

DJNZ R7 ,LOOP RET ? 3、串行口方式2、方式3的发送和接收

例7-9 编制一个串行口方式2接收程序,并核对奇偶校验位。

在方式2、方式3的发送过程中,将数据和附加在TB8中的奇偶位一块发向对方。因此,作为接收的一方应设法取出该奇偶位进行核对,相应的接收程序段为: RRR: MOV SCON ,#90H ;选方式2,并允许接收(REN=1) LOOP: JBC RI ,RECEIV ;等待接收数据并清RI

SJMP LOOP

RECEIV: MOV A ,SBUF ;将接收到的字符取出后,送到ACC。 ;传送指令影响PSW, 产生接收端的奇偶值

JB PSW.0 ,ONE ; P=1, 转判RB8 JB RB8 ,ERR ; P=0, 判RB8

? ?

SJMP RIGHT ; P=0, RB8=0接收正确 ONE: JNB RB8 ,ERR ; P=1, RB8=0转错误处理 RIGHT: ERR: ?

…… ; P=1, RB8=1接收正确 ……

…… ;接收有错

3、串行口方式2、方式3的发送和接收

例7-10:编制一个发送程序,将片内RAM中50H—5FH的数据串行发送。串行口设定为工

作方式2,TB8作奇偶校验位。 ? 解:在数据写入发送SBUF之前,先将数据的奇偶标志P写入TB8,此时,第9位

数据便可作奇偶校验用。可采用查询和中断两种方式发送。

(1)采用查询方式的程序段 MAIN:

ORG 0000H

AJMP MAIN ;上电,转向主程序 ORG 0100H ;主程序 MOV SCON ,#80H ;设工作方式2

MOV PCON ,#80H ;取波特率为fosc/32

MOV R0 ,#50H ;首址50H送R0 MOV R7 ,#10H ;数值长度送R7 LOOP: MOV A ,@R0 ;取数据 MOV C ,PSW.0 ;P→C

MOV TB8 ,C ;奇偶标志送TB8 MOV SBUF ,A ;发送数据 WAIT: JBC TI ,CONT

AJMP WAIT

;等待中断标志TI=1

CONT: INC R0

DJNZ R7 ,LOOP ;数值尚未发送完, 继续发送下一个数据 SJMP $ END

(2)采用中断方式的程序段

ORG 0000H

AJMP MAIN ;上电,转向主程序 ORG 0023H ;串行口的中断入口地址 AJMP SERVE ;转向中断服务程序 ORG 0100H ;主程序 MAIN:

MOV SCON ,#80H MOV PCON ,#80H

MOV R0 ,#50H MOV R7 ,#0FH

SETB ES ;允许串行口中断 SETB EA ;CPU允许中断 MOV A , @R0

MOV C , PSW.0 ;P→C MOV TB8 ,C

MOV SBUF ,A ;发送第一个数据 SJMP $ ? 3、串行口方式2、方式3的发送和接收

例7-11:编制一个接收程序,将接收的16B数据送入片内RAM的50H—5FH单元中。设串

行口工作于方式 3,波特率为2400b/s。 ?

解:方式3为11位异步通信方式,波特率取决于TI的溢出率。查 表7-2可知,

当晶振为11.059MHz,波特率为2400b/s时,可取SMOD=0。 源程序如下:

MAIN: MOV TMOD ,#20H ;设TI工作于模式2 MOV TH1 ,#0F4H ;赋循环计数初值

MOV TL1 ,#0F4H ;赋计数值

SETB TR1 ;启动定时器TI MOV R0 ,#50H ;首地址送R0 MOV R7 ,#10H ;数据长度送R7

MOV SCON ,#0D0H ;串行口工作于方式3,可接收 MOV PCON ,#00H ;设SMOD=0

WAIT: JBC RI ,PR1 ;接收完一帧数据,清RI,转PR1 SJMP WAIT ;否则等待 PR1: MOV A ,SBUF ;读入数据 JNB P ,PNP

;P=0,转PNP

JNB RB8 ,PER ;P=1,RB8=0,转出错处理 SJMP RIGHT

PNP: JB RB8 ,PER ;P=0,RB8=1,转出错处理 RIGHT: MOV @R0 ,A ;数据送内存

INC R0 ;修改地址指针

DJNZ R7 ,WAIT ;数据未接收完,继续接收下一个数据 CLR PSW.5 ;置正确接收完毕标志F0=0 RET

PER: SETB PSW.5 RET

1.MCS51的中断系统有几个中断源?几个中断优先级?中断优先级是如何控制的?在出现同级中断申请时,CPU按什么顺序响应(按由高级到低级的顺序写出各个中断源)?各个中断源的入口地址是多少?

答:MCS51单片机有5个中断源,2个中断优先级,中断优先级由特殊功能寄存器IP控制,在出现同级中断申请时,CPU按如下顺序响应各个中断源的请求:INT0、T0、INT1、T1、串口,各个中断源的入口地址分别是0003H、000BH、0013H、001BH、0023H。

2.已知单片机系统晶振频率为6MHz,若要求定时值为10ms时,定时器T0工作在方式1时,定时器T0对应的初值是多少?TMOD的值是多少?TH0=?TL0=?(写出步骤) 答:定时值为10ms时,定时器T0工作在方式1时,定时器T0对应的初值是1388H TMOD的值是00000001B,TH0=13H;TL0=88H。

3.MCS51系列单片机的内部资源有哪些?说出8031、8051和8751的区别。

答:MCS51系列单片机上有1个8位CPU、128B的RAM、21个SFR、4个并行口、1个串行口、2个定时计数器和中断系统等资源。8031、8051和8751的区别是8031内无ROM;8051内有4KB的掩膜ROM;8751内有4KB的EPROM。 简述行列式非编码键盘的工作原理。

答:行线通过电阻接+5V。没有键闭合时,行线呈高电平; 某键闭合时,该键对应的行线和列线被短路。此时行线电平由列线电位所决定。在某一时刻只让一条列线处于低电平,其他列线处于高电平。当这一列邮件按下时,该键所在的行电平将有高电平变成低电平,可判断该列相应的行是否有键按下。同理,逐列扫描各列,便可识别所有按键的动作。 1.

答: ?

对单片机的控制,其实就是对I/O口的控制,无论单片机对外界进行何种控制,亦简述MCS-51系列单片机I/O口的功能。

本文来源:https://www.bwwdw.com/article/7wzd.html

Top