单片机原理接口及应用李群芳版习题解答参考 联系客服

发布时间 : 星期四 文章单片机原理接口及应用李群芳版习题解答参考更新完毕开始阅读aae8879485868762caaedd3383c4bb4cf7ecb7ff

MAIN: MOV A,#0FEH MOV P1,A ;第一灯亮 SETB EA

SETB EX0 SETB IT0 SJMP $

汇编语言中只有一个中断源,不存在占用别的中断源向量地址问题,程序顺序排下,应注意程序的执行过程。C语言无循环移位指令移位后,后面补零,因此和01相或。 4.14 略 4.15

图4.13

ORG 0000H AJMP MAIN

ORG 0003H ;中断服务 XRL P1,#0FFH DJNZ R0,NE CLR EA

ORG 0030H SETB EX0

SETB IT0 MOV P1,#0FFH

MOV R0,#0AH SJMP $ ;等待中断

MAIN: SETB EA

NE: RETI

因一亮一灭为一次,所以共十次。

aa EQU 08H ;存储高四位的段码 bb EQU 09H ;存储第四位的段码 i EQU 0AH ORG 0000H AJMP MAIN ORG 0013H AJMP INTR MOV DPTR,#Tab CLR A

MOVC A,@A+DPTR MOV aa,A MOV bb,A CLR P3.0 CLR P3.1 SETB EA SETB EX0 SETB IT0 SETB P3.0 CLR P3.1 MOV P1,bb ACALL Delay

;显示低位 ;延时

;开中断 ;a=b=Tab[0] ;存储计数值

;段码表略

DB 3FH,06H……

4.16 两个数码管阳极经驱动器接P1口,阴极分别接P3.0、P3.1。

CLR P3.0 SETB P3.1 MOV P1,aa ACALL Delay SJMP LOOP CLR EX0 INC i MOV A,i ANL A,#0FH MOV DPTR,#Tab MOVC A,@A+DPTR

MOV bb,A ;查表b=Tab[i的低位] MOV A,i ANL A,#0F0H SWAP A

;取i的高位

MOVC A,@A+DPTR

MOV aa,A ;查表a=Tab[i的高位] SETB EX0 RETI ;略 END

;取i的低位

;i加一 ;显示高位 ;延时

Tab:

INTR:

MAIN:

LOOP:

Delay:

4.17 提示:将X1至X3分别接至一个三输入或非门的三个输入端,同时还分别接至单片机的三个

9

IO口,或非门的输出端接至单片机的外部中断引脚。中断服务程序中检查三个IO口的值,便可知道具体的故障源。程序略。

第五章、单片机的定时/计数器与串行接口

5.1~5.3 请参考教材

5.4 方式0: 16.38ms 方式1: 131ms 方式2: 512μs 5.5 使用方式2 计数初值C=100H-0AH=F6H 查询方式:

ORG 0000H MOV TMOD,#06H MOV TH0,#0F6H

ABC: JNB TF0,$ CLR TF0 CPL P1.0 SJMP ABC

MOV TL0,#0F6H SETB TR0 中断方式:

ORG 0000H

MOV TH0, #0F6H SETB EA SETB ET0 SETB TR0

SJMP $ ; 等待中断

AJMP MAIN ORG 0000BH CPL P1.0 RETI

MAIN: MOV TMOD,#06H

5.6 1000HZ的周期为1ms,即要求每500μsP1.0变反一次,使用方式T1方式1,MC=12 / fosc=1μs,

C=216-500μs /1μs =FE0CH,除TMOD=10H,TH0=FEH,TL0=0CH外, 程序与5.5题相同,注意每次要重置TH0和TL0

5.7 f=6MHz MC=2μs 方式2的最大定时为 512μs合乎题目的要求。50μs时,计数初值为

C1=256-25=E7H,350μs时计数初值为C2=256-175=51H 汇编语言程序

ORG 0000H

SJMP AB1 EXT: SETB P1.2

MOV TH0,#0E7H

MOV TL0,#0E7H AB2: JBC TF0,NEXT SJMP AB2

MOV TMOD,#02H

NEXT: MOV TH0,#51H MOV TL0,#51H CLR P1.2 SETB TR0 AB1: JBC TF0,EXT

上述的计数初值没有考虑指令的执行时间,因此误差较大,查每条指令的机器周期,扣除这些时间,算得C=E3H,这样误差较小。 5.8 P1.0输出2ms脉冲,P1.0输出50μs脉冲。

汇编语言程序 ORG 0000H

MOV TMOD,#02H MOV TH0,#06H MOV TL0,#06H SETB TR0 MOV R0,#04H

NE: JNB TF0,$ CLR TF0 CPL P1.1 DJNZ R0,NE CPL P1.0 AJMP NE

10

5.9

ORG 0000H MOV TMOD,#15H LCALL Counter LCALL Timer SJMP LOOP MOV TL0,#18H SETB TR0 CLR TR1 JNB TF0,$

CLR TF0 RET

MOV TH1,#0F9H MOV TL1,#30H SETB TR1 CLR TR0 JB TF1,$ CLR TF1 RET END

MAIN: LOOP:

Timer:

Counter: MOV TH0,#0FDH

5.10 略

5.11 参见教材5.3.1节

5.12 方式3为每桢11位数据格式 3600*11/60=660(波特)

5.13 T1的方式2模式不需要重装时间常数(计数初值),不影响CPU执行通信程序.

设波特率为fbaut计数初值为x, 依据公式 fbaut=2

somd

/32*(fosc/12(256-x)) 求得x=256-((2D/32)*(fosc/fbaut)) fbaut=(1/32)*( fosc/(12(256-0))=61

SMO

5.14 最低波特率为T1定时最大值时,此时计数初值为256,并且SOMD=0,

最高波特率为T1定时最小值(1)且SOMD=1时

fbaut=(2/32)* fosc/(12(256-1))=31250

5.15 取SMOD=1 计算TH1=TL1=B2

发送

ORG 0000H MOV TMOD,#20H MOV TH1,#0B2H MOV TL1,#0B2H SETB TR1 MOV SCON,#40H MOV A,#0 ORG 0000H MOV TMOD,#20H MOV TH1,#0B2H MOV TL1,#0B2H SETB TR1 MOV SCON,#50H MOV R0,#20H

NEXT: MOV SBUF,A TES:

JBC T1,ADD1

SJMP TES ADD1: INC A

CJNE A,#20H,NEXT SJMP $ END

接收

TEC: JBC RI,REC

SJMP TEC INC R0

CJNE R0,#40H,TEC SJMP $ END

REC: MOV @R0,SBUF

5.16 略

5.17利用串行通信方式2(波特率固定),采用奇校验方式,将校验位放在TB8中,乙机检验校验位,

如正确,则存于片外4400H开始的RAM中,如错误,通知对方重发,R6存放数据块长度汇编语言程序如下:

发方

11

ORG 0000H MOV DPTR,#3400H MOV R6,#0A1H MOV SCON,#90H MOV SBUF,R6

L2: JBC T1,L3 AJMP 1.2 L3: MOV 1,@DPTR

JB P,L4

SETB TB8 L4: MOV SBUF ,A

收方

ORG 0000H MOV DPTR,#4400H MOV SCON,#90H L1: JBC RI,L2 AJMP L1 L2: MOV A,SBUF MOV R6,A L3: JBC RI,L4 AJMP L3 L4: MOV A,SBUF

JB P, L5 JNB RB8,L8

SJMP $ 5.18 电路图见教材中图5.18,程序如下:

ORG 0000H MOV R5,#03H CLR A MOV SCON,A LOOP: SETB P3.3

CLR A MOV R7,A

DEF: MOV A,R5

;循环4次

MOV DPTR,#tab

MOVC A,@A+DPTR;查表A=tab[R5] MOV SBUF,A DEC R5 JNB T1,$ CLR T1

CJNE R5,#0FFH,ABC;若R5==255,

则R5=7

MOV R5,#07H

ABC: INC R7

L5: JBC T1,L6 AJMP L5 L6: JBC RI,L7 AJMP L6

L7: MOV A,SBUF

CJNE A,#0FF0H,L8 AJMP L3 L8: INC DPL

DJNZ R6,L4

SJMP $ L5: JB JB8,L8 L6: MOVX @DPTR,A INC DPL INC DPH DJNZ R6,L3 SJMP $ L8: MOV A,#0FFH MOV SBUF,A L9: JBC TI,L3

AJMP L9 SJMP $

END

CJNE R7,#04H,DEF ;循环4次

CLR P3.3 LCALL timer SJMP LOOP

timer: MOV A,#64H FOR: JZ ENDD

MOV TMOD,#01H MOV TH0,#0D9H MOV TL0,#0F0H SETB TR0 JNB TF0,$ CLR TF0 DEC A SJMP FOR

ENDD: RET

tab:

DB 0c0H,0f9H,0a4H……;略

END

12