单片机习题参考答案

RT: RETI

6.已知单片机系统时钟频率fosc=6MHz,试编写程序,利用定时器T0工作在方式3,使P1.0和P1.1分别输出周期为1ms和400μs的方波。

ORG 0000H

AJMP MAIN

ORG AJMP ORG AJMP ORG MOV MOV SETB SETB SETB SETB SETB SJMP

CTC250:CPL

MOV RETI CTC100:CPL

MOV RETI

000BH CTC250 001BH CTC100 0100H TMOD,#03H TL0,#6 TH0,#156 EA ET0 ET1 TR0 TR1 $ P1.0 TL0,#6 P1.1

TH0,#156

MAIN: MOV

7.将定时器T1设置为外部事件计数器,要求每计数100个脉冲,T1转为1ms定时方式,定时到后,又转为计数方式,周而复始。设系统时钟频率为6MHz,试编写程序。

ORG AJMP ORG

0000H MAIN 0050H JS100 0100H

TMOD,#01100000B TH1,#156 TL1,#156 EA ET1 TR1

TF1,NEXT1 LOOP1 TR1 DS1ms $

0200H

MAIN: SJMP

ORG

JS100: MOV

MOV

MOV SETB SETB

SETB

LOOP1: JB SJMP NEXT1: CLR

AJMP SJMP ORG

21

DS1ms: MOV

MOV MOV SETB SETB

TMOD,#00000000B TH1,#F0H TL1,#0CH EA ET1 TR1

TF1,NEXT2 LOOP2 TR1 JS100 $

SETB

LOOP2: JB SJMP NEXT2: CLR

AJMP SJMP END

8.设单片机系统时钟频率fosc=6MHz,现利用定时器T1方式2产生110bps波特率,试计算出定时器的初值。

依据公式: 波特率=2SMOD/32*T1溢出率 取SMOD=0

T1溢出率=1/(28—初值) 计算得出: 定时器的初值为114

9.由MCS-51单片机的串行口的方式1发送1,2,?,FFH等255个数据,试用中断方式编写发送程序(波特率为2400,fosc=12MHz)。

ORG 0000H

AJMP MAIN ORG 0100H

MAIN: MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H SETB EA SETB TR1 MOV MOV MOV MOV

PCON,#00H SCON,#50H A,#01H R5,#255

SETB TI SJMP $ ORG ACOUT: CLR MOV

0023H TI

SBUF,A

INC A

DJNZ R5,TNEXT CLR CLR TNEXT: RETI

22

ES TR1

END

10.设计一个单片机的双机通信系统,并编写通信程序。将甲机内部RAM 30H~3FH 存储区的数据块通过串行口传送到乙机内部RAM 40H~4FH存储区中去。

习题六

1.利用8051定时器的门控位测量某正脉冲高电平的宽度。已知正脉冲宽度小于10ms,fosc=12MHz。试编程测量脉宽,并把测试的结果转换为BCD码存入片内50H开始的连续单元中,十位和个位存入50H单元。

解:该题与[例5.6]类似。

分析:[例5.6] 当GATE=1、TR0=1,只有/INT0引脚上出现高电平时,T0才被允许计数。利用这一功能测试/INT0引脚上正脉冲的宽度(以机器周期数表示)。

设外部待测脉冲由/INT0 (P3.2)输入,T0工作在方式1,设置为定时状态,GATE置?1?,测试时,在/INT0端为?0?时置TR0 为?1?,当/INT0端变为?1?时启动计数; /INT0端再次变为?0?时停止计数。此时的计数值就是被测正脉冲的宽度。如下图所示:

/INT0 (P3.2) 对T0初始化 │←T0从0开始计数→│TR0←0,停止T0计数, TMOD←09H, 读出T0值

TR←1

程序如下: ORG

0000H

LJMP MAIN ORG 0100H

TMOD,#09H ;T0工作于方式1定时,GATE=1 TL0,#00H TH0,#00H P3.2, WAIT1

;等待P3.2变低 ;启动T0

;等待P3.2变高 ;等待P3.2再变低 ;T0停止计数

TR0 P3.2,WAIT2 P3.2,WAIT3 TR0

MAIN:

MOV MOV MOV WAIT1:JB SETB WAIT2:JNB WAIT3:JB

CLR

; 16位二进制数转换十进制数。

MOV MOV MOV MOV MOV

R7,TH0;存放计数值 R6,TL0 R5,#00H R4,#0AH R0,#50H 31H,#05 DDIV @R0,02H R0

MOV LOOP:

23

LCALL MOV INC

DJNZ SJMP

31H,LOOP $

DDIV: MOV A,R4 JNZ DDIV0 MOV A,R5

JZ DDIV0: MOV MOV MOV DDIV1:

CLR MOV RLC

MOV MOV RLC MOV MOV RLC MOV MOV RLC MOV MOV SUBB JC MOV MOV SUBB JC INC MOV MOV MOV DDIV2:

DJNZ

CLR

SJMP ERROR: SETB NEXT: RET

24

ERROR

R2,#00H R3,#00H R1,#16 C

A,R6 A R6,A A,R7 A R7,A A,R2 A R2,A A,R3 A R3,A A,R2 A,R4 DDIV2 30H,A A,R3 A,R5 DDIV2 R6 R3,A A,30H R2,A R1,DDIV1 F0 NEXT F0

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