单片机原理及应用习题答案 联系客服

发布时间 : 星期五 文章单片机原理及应用习题答案更新完毕开始阅读05f89f130b4e767f5acfcebe

定时时间t=(2-T0初值) ×T 方式0:

x=13,则T0初值=2-300μs/1μs=8192-300=7892D=11110110 10100B 所以TH0=0F6H,TL0=14H 方式1:

x=16,则T0初值=2-300μs/1μs=65536-300=65236D=0FED4H 所以TH0=0FEH,TL0=0D4H 方式2和方式3:

x=8,最长定时时间tMAX=(2-0) ×1μs=256μs<300μs 所以方式2和方式3不能实现

5.10 当T0工作在方式3下,TR1和TF1已被T0占用,如何控制T1的开启和关闭?

解:T0设置为工作方式3,T0被分成两个独立的8位计数器TH0和TL0。其中TH0被固定为定时方式,并占用T1的状态控制位TR1、TF1。在这种情况下,T1可工作于方式0、1、2,作为串行口的波特率发生器。这时控制T1的启停由设置工作方式0~2(自动启动T1计数)和写入T1的方式字为方式3(停止计数)来实现。

5.11已知8051型单片机的系统时钟频率为6MHz,试利用定时器T0在P1.1输出周期为300?s的正方波。

解:设T0工作在方式0, 欲产生300 ?s的等宽正方波脉冲,只需在P1.0端以150 ?s为周期交替输出高低电平即可实现,为此定时时间应为150 ?s。使用6MHz晶振,则一个机器周期为2?s。

设待求的计数初值为X,则:

(213-X)×2?s =150 ?s

求解得:X=8117D=11111101 10101B。十六进制表示,高8位为0FDH,低5位为15H。其中高8位放入TH0,即TH0=0FDH;低5位放入TL0,即TL0=15H。

TMOD寄存器初始化:

把T0设定为方式0,则M1M0=00;为实现定时功能,应使C/T=0;为实现用TR0控制T0的运行,GATE=0。因此TMOD寄存器应初始化为00H。

采用软件查询方式程序如下: 程序如下:

ORG 0000H LJMP

MAIN

TMOD, ?00H ;设置T0为工作方式0 IE, ?00H TR0

;禁止中断

;启动定时 ;设置计数初值 ;查询计数溢出?

ORG 1000H

MAIN: MOV

MOV

SETB

LOOP: MOV

JNB CPL AJMP

END

8

1613

x

TH0,?0FDH TF0,$

P1.1 LOOP

MOV TL0,?15H

CLR TF0

;计数溢出标志位清“0” ;输出取反

;重复循环

本题也可用中断方式,读者可参考例5.8自己完成。

5.12设单片机的系统时钟频率为12MHz,试编程输出频率为100KHZ,占空比为2:10的矩形波。 解:信号频率为100KHz,则周期为1/100kHz=10 ?s,占空比为2:10即高电平为2 ?s,低电平为8 ?s

的方波,设采用定时器T0工作在方式2,P1.0输出该矩形波。

定时2?s:(28-x)×12/12=2,x=254=0FEH 定时8?s:(28-x)×12/12=8,x=248=0F8H 程序如下:

ORG 0000H LJMP MAIN ORG 000BH LJMP PULSE

MAIN: MOV

MOV MOV SETB SETB CLR CLR SETB SJMP MOV MOV SJMP MOV CPL END

TOMD,#02H ;T0方式2 TH0,#0F8H TL0,#0F8H ET0 EA P1.0 F0 $

TR0

;输出低电平

;F0=0,输出低电平标志 ;启动定时器 ;等待中断 ;中断服务程序 ;定时2?s

;开中断 ;定时8?s

PULSE:JNB F0,NEXT1 TH0,#0FEH FL0,#0FEH NEXT2 TL0,#0F8H F0 P1.0

NEXT1:MOV TH0,##0F8H ;定时8?s

NEXT2: CPL

5.13 设8031型单片机的时钟频率为6MHz,请编写程序在P1.0输出周期为2s的方波的程序。

解:1、输出周期为2s的方波,采用T0定时时间应为1s。 因定时时间较长,先求T0各种工作方式的最长定时时间tmax: 方式0时,计数器为13位,tmax=213×12×1/6MHz=16.384ms 方式1时,计数器为16位,tmax=216×12×1/6MHz=131.072ms 方式2时,计数器为8位,tmax=28×12×1/6MHz=512?s

本题定时为1s,可选方式1,每隔100ms中断一次,中断10次为1s。 2、求计数初值x为: 故

(216-x)×12/6=100×103

x=15536D=3CB0H TH0=3CH,TL0=0B0H 所以

3、对于中断10次,可采用T1工作于计数方式,也可采用循环程序的方法实现,本题采用循环程序法。 4、确定方式控制字(T0工作于方式1) TMOD=01H 5、程序如下:

ORG 0000H

AJMP MAIN ORG 000BH

;转向主程序

;定时器T0的中断入口地址

AJMP TSER

ORG 1000H

;转向中断服务程序

主程序: MAIN: MOV

MOV

MOV

SP,#60H ;设堆栈指针 R0,#0AH ;设循环次数

TMOD,#01H;设置T0为工作方式1

MOV TH0,#3CH ;设置计数初值 MOV TL0,#0B0H SETB EA SETB ET0

;开中断 ;T0允许中断 ;启动定时器1

SETB TR0

HERE: SJMP HERE 中断服务程序:

;等待中断

TSER: MOV TH0,#03CH ;重新设置计数初值

MOV TL0,#0B0H DJNZ

LOOP: RETI

END

R0,LOOP

; 输出取反

;中断返回

CPL P1.0

5.14 利用8051型单片机的定时器测量某正单脉冲宽度,采用何种工作方式可以获得最大的量程?若系统时钟频率为6MHz,那么最大允许的脉冲宽度是多少?

答:门控位GATE=1时,仅当INTX(x=0、1)为高电平时,计数器才对

fosc/12计数。利用这一特性,

可测量输入到INTX引脚的脉冲宽度(机器周期数)。采用方式1(16位计数器)可获得最大的量程,且要求脉冲宽应小于65 536个机器周期。当f=6MHz时,允许测量的最大脉宽为65 536×12/6=μs=131.07ms。

osc5.15 试编写程序将内部RAM以30H为起点地址的X个数传送到外RAM以BUF为起点地址的区域,要求每隔500ms传送一个数据,设8031型单片机的时钟频率为6MHz。

解:设用T0方式1来定时100ms,循环5次为500ms。定时100ms的初值x为:

(2-x)×12/6=100×103

16

则 x=15 536=3CB0H 即:TH0=3C,TL0=0B0H 参考程序如下:

ORG MOV MOV MOV MOVX LCALL INC INC DJNZ MOV SETB

1000H R0,#30H R1,#X A,@R0 @DPTR,A DEY500 R0 DPTR R2,#5 TR0

;调500ms延时子程序 ;修改源地址指针 ;修改目标地址指针 ;未传送完则继续 ;500ms延时子程序

;源数据块首址 ;数据块长度

DPTR,#BUF ;目标数据块首址

LOOP: MOV

R1,LOOP TMOD,#01H

DEY500: MOV

LL:

MOV MOV JNB CLR DJNZ RET END

TL0,#0B0H TH0,#3CH TF0,$ TF0 R2,LL

习题6解答

6.1. 在MCS—51单片机系统中,外接程序存储器和数据存储器共用16位地址线和8位数据线,为什么不会发生冲突?

答: MCS—51单片机采用不同控制信号: CPU访问片外ROM时,外部ROM用PSEN选通;访问外部RAM或扩展I/O口时,由RD(读)信号和WR(写)信号选通。因此,尽管程序存储器地址和数据存储器地址空间重叠,但不会发生混乱。

6.2. 用两片EPROM 2716给8051单片机扩展一个4KB的外部程序存储器,要求地址空间与8051的内部ROM相衔接,请画出逻辑连接图。

解:外部ROM的逻辑连接如图所示,8051内部ROM的4KB地址空间为0000H~0FFFH,两片EPROM 2716扩展的外部ROM 4KB地址空间分别为:

IC1:1000H~17FFH,IC2:1800H~1FFFH。

P2.4P2.3P2.2P2.1P2.074LS3738051P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0ALED7D6D5D4D3D2D1D0GQ7Q6Q5Q4Q3Q2Q1Q0OEA10A9CEA82716A7D7A6D6A5D5A4D4A3IC1D3A2D2A1D1A0D0OE≥1A10A9CEA82716A7D7A6D6A5D5A4D4A3IC2D3A2D2A1D1A0D0OE≥1PSEN习题6.2 图 两片2716芯片扩展4KB外部程序存储器6.3. 试用一片EPROM 2716和一片RAM 6116组成一个既有程序存储器又有数据存储器的存储器扩展系统,请画出逻辑连接图,并说明各芯片的地址范围。

解:2716是2KB的EPROM,6116是2KB的RAM,两者都需要11根地址线。由于没有规定地址范围,故可以采用线选法。程序存储器的地址必须从0开始,基本地址为0000H~07FFH。数据存储器的地址为0000H~07FFH。逻辑连接如图所示,两个芯片的片选端都用P2.3=0时来选定。