发布时间 : 星期五 文章单片机原理及应用习题答案更新完毕开始阅读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时来选定。