单片机习题参考答案

DJNZ R6,$;2VS

DJNZ R7,LOOP0 DJNZ R5,LOOP1 RET

⑶ 中断服务程序(PITO)

中断服务程序的主要功能是进行计时操作。程序开始先判断计数溢出是否满了8次, 满8次表明还没达到最小计时单位秒,中断返回;如满8次则表明已达到最小计时单位秒,顺序继续向下执行,进行计时操作。中断服务程序流程如图9-8所示。

中断子程序清单: INTT0: PUSH ACC

PUSH PSW SETB PSW.3 MOV TL0,#0DCH MOV TH0,#0CH MOV A,30H

DEC A

MOV 30H,A JNZ RET0 MOV 30H,#08H MOV R0,#7AH ACALL DAAD1 MOV A,R2 XRL A,#60H

JNZ

RET0

ACALL CLR0 MOV R0,#7CH ACALL DAAD1 MOV A,R2 XRL

A,#60H JNZ RET0 ACALL CLR0

MOV R0,#7EH ACALL DAAD1 MOV A,R2 XRL

A,#24H JNZ RET0

ACALL CLR0 RET0: POP ACC POP PSW

RETI

⑷ 清缓冲单元子程序 CLR0: CLR A MOV @R0,A

33

1组通用寄存器

1

8次转移 8次开始计时 1

1后秒值在R2 60秒

60S显示单元清0 1 60分 60分显示单元清0 1 24小时 24小时清缓冲单元

0

;现场保护;选;计数器重新加载 ;循环次数减

;不满;满;秒显示缓冲单元;秒加;加;判是否到;不到转移;到;分显示缓冲单元地址;分加;判是否到;到;时显示缓冲单元地址;时加;判是否;到;现场恢复;中断返回;清缓冲单元子程序;十位数缓冲单元清

DEC R0 MOV @R0,A ;个位数缓冲单元清0 RET ;返回 (5) 加1子程序(DAAD1)

加1子程序用于完成对秒、分和时的加1操作,

中断服务程序中在秒、分、时加1时共有三处调用此子程序。加1子程序流程图如图9-7所示。

加1子程序清单:

DAAD1: MOV A,@R0

DEC R0 SWAP A ORL ADD DA

A,@R0 A,#01H A

;;R0= ;加1子程序,十位送A ;十位数占高4位 ;个位数占低4位 ;加1

;十进制调整

;全值暂存R2中

;屏蔽十位数,取个位数 ;个位值送显示缓冲单元

MOV R2,A ANL A,#0FH MOV @R0,A MOV INC ANL SWAP MOV RET DB DB

A,R2 R0

A,#0F0H A

;屏蔽个位数取出十位数 ;使十位数占低4位 ;十位数送显示缓冲单元 ;返回

;字形代码表0 ;字形代码表1 ;字形代码表2 ;字形代码表3 ;字形代码表4 ;字形代码表5 ;字形代码表6 ;字形代码表7 ;字形代码表8 ;字形代码表9 ;字形代码表A ;灭

TAB:

@R0,A 0C0H 0F9H 0A4H 0B0H 99H 92H 82H 0F8H 80H 90H 88H 0FFH

DB DB DB DB DB DB DB DB DB DB

END

说明:1、上述程序经过软件模拟调试成功,但未与硬件联调。

2、程序中没有日的加1计算。

7.设计一个单片机的双机通信系统。试变成将甲机片外RAM 8001H~9000H存储区的数据块通过串行口传送到乙机片外RAM 3001H~4000H存储区中去。要求发送和接收均采用中断方式。

解:用串行口工作方式1进行甲(发送)、乙(接收)两机的异步通信,串行通信的波特率定为1200bps。

34

定时器T1采用工作方式2,作为波特率发生器。由表5-1可知,fosc取11.059MHz时,定时器T1的初始值为0E8H,波特率为1200。

甲机发送:将甲机外部RAM首地址为8001H~9000H单元的数据块,通过串行口的发送端TXD发送到乙机。

乙机接收:接收来自串行输入端RXD的数据,将接收到的数据块依次存入乙机片外RAM 3001H~4000H存储区中。

;甲机发送程序

ORG LJMP ORG LJMP

ORG TRANSFER: MOV MOV MOV SETB CLR E CLR MOV SETB MOV MOV MOV MOV

SETB

TWAIT:

SJMP ;中断服务程序 TINT: MOV CLR

MOV

CLR

SUBS1:

MOV SUBB MOV MOV SUBB MOV ORL JNZ

35

0000H

TRANSFER 0023H TINT

0100H

TMOD,#20H TH1,#0E8H TL1,#0E8H EA

T1

ES PCON,#10H TR1 SCON,#10H R1,#00H R2,#10H

DPTR,#8001H ES

TWAIT X A,@DPTR

TI SBUF,A C A,R1 A,#1 R1,A A,R2 A,#00

R2,A A,R1

TNEXT

T1方式2

T1装入时间常数 T1中断 T1

1 1000H

;从数据块中取数

;定时器;定时器;禁止;关闭串行口中断;波特率不增倍;启动;置串口方式;数据块长度;数据块首地址;允许串行口中断;等待中断 ;清除串行口中断标志;发送数据;数据块未完,则继续

CLR ES

CLR

TR1

RETI TNEXT: INC DPTR RETI END

;乙机接收程序

ORG 0000H LJMP

RECEIVE ORG

0023H

LJMP RINT ORG 0100H

RECEIVE: MOV TMOD,#20H MOV TH1,#0E8H MOV TL1,#0E8H SETB EA

CLR ET1

CLR ES

MOV PCON,#00H SETB TR1 MOV R2,#10H MOV R1,#00H

MOV DPTR,#3001H

MOV

SCON,#50H SETB ES

RWAIT: SJMP

RWAIT

;中断服务程序 RINT: MOV A,SBUF CLR

RI

MOVX @DPTR,A SUBS1:

MOV A,R1 SUBB A,#1 MOV R1,A MOV A,R2 SUBB A,#00

MOV R2,A ORL A,R1

JNZ

RNEXT

36

;数据结束关中断 ;关定时器

;指向下一个数据单元

;定时器T1方式2 ;定时器T1装入时间常数

;禁止T1中断 ;关闭串行口中断 ;波特率不增倍 ;启动T1

;共接收1000H个字节数据;数据存放区首地址

;串行口方式1,允许接收 ;串行口中断允许 ;等待中断

;接收数据

;清除接收数据中断标志

;存放数据

;未完,则继续

CLR CLR

ES TR1

;接收数据已完成,关中断 ;关闭定时器T1

RETI RNEXT: INC

RETI END

DPTR ;指向下一个单元

37

联系客服:779662525#qq.com(#替换为@)