11、89C51定时器作定时和计数时其计数脉冲分别由谁提供?
答:作定时器时计数脉冲由89C51片内振荡器输出经12分频后的脉冲提供,作计数时计数脉冲由外部信号通过引脚P3.4和P3.5提供。
12、89C51定时器的门控信号GATE设置为1时定时器如何启动?
答:只有 (或 )引脚为高电平且由软件使TR0(或TR1)置1时,才能启动定时器工作。
13、已知89C51单片机的fosc=6MHz, 请利用T0和P1.0输出矩形波。矩形波高电平宽50μs,低电平宽300μs。
解:T0采用模式2作为50μs定时时的初值:
所以
作300μs定时时的初值:
所以
MOV TMOD,#02H ;设置定时器T0工作于模式2
L2:CLR P1.0 ;P1.0输出低电平
MOV TH0,#6AH ;置入定时300μs初值
MOV TL0,#6AH
SETB TR0 ;启动T0
LOOP1:JBC TF0,L1 ;查询300μs时间到?时间到,转L1
SJMP LOOP1 ;时间未到,转LOOP1,继续查询
L1:SETB P1.0 ;P1.0输出高电平
CLR TR0 ;关闭T0
MOV TH0,#0E7H ;置入定时300μs初值
MOV TL0,# 0E7H
SETB TR0 ; 启动T0
LOOP2:JBC TF0,L2 ;查询50μs时间到?时间到,转L2
SJMP LOOP2 ;时间未到,转LOOP2,继续查询
14、已知89C51单片机的fosc=12MHz, 用T1定时。试编程由P1.0和P1.1引脚分别输出周期为 2ms和500μs的方波。
解:采用模式0作 定时初值
所以
MOV R2,#04H ;R2为“250μs”计数器,置入初值4
CLR P1.0 ;P1.0输出低电平
CLR P1.1 ;P1.1输出低电平
MOV TMOD,#00H
L2:MOV TH1,#0F8H ;置入定时250μs初值
MOV TL1,#06H
SETB TR1 ;启动T1
LOOP:JBC TF1,L1 ;查询250μs时间到?时间到,转L1
SJMP LOOP ;时间未到,转LOOP,继续查询
L1:CPL P1.1 ;P1.1输出取反,形成周期为500μs
CLR TR1 ;关闭T1
DJNZ R2,L2 ;“250μs”计数器减1,到1ms吗?未到转L2
CPL P1.0 ;P1.0输出取反,形成周期为2ms方波
MOV R2,#04H ;重置“250μs”计数器初值4
LJMP L2 ;重复循环
15、单片机8031的时钟频率为6MHz,若要求定时值分别为0.1ms,1ms,10ms,定时器0工作在模式0、模式1和模式2时,其定时器初值各应是多少?
解:
(1)?? 0.1ms
模式0:
T0低5位01110B=0EH
T0高8位:
模式1:
模式2:
(2)?? 1ms
模式0:
T0低5位01100B=0CH
T0高8位:
模式1:
模式2:
在此情况下最长定时为512μs,无法一次实现定时1ms,可用0.1ms循环10次
(3)?? 10ms
模式0:
T0低5位11000B=18H
T0高8位:01100011B=63H
模式1:
模式2:在此情况下最长定时为512μs,无法一次实现定时10ms,可用0.1ms循环100次
16、89C51单片机的定时器在何种设置下可提供三个8位计数器定时器?这时,定时器1可作为串行口波特率发生器。若波特率按9600b/s,4800b/s,2400b/s,1200b/s,600b/s,100b/s来考虑,则此时可选用的波特率是多少(允许存在一定误差)?设fosc=12MHz。
解:当T0为模式3,T1为模式2时,可提供3个8位定时器。
可选100b/s
17、试编制一段程序,功能为:当P1.2引脚的电平上跳时,对P1.1的输入脉冲进行计数;当P1.2引脚的电平下跳时,停止计数,并将计数值写入R6,R7。
解:
MOV TMOD,#05H ;T0为计数方式且工作于模式1
JNB P1.2,$ ;等待P1.2引脚电平上跳
MOV TH0,#00H ; P1.2电平上跳,置入计数初值
MOV TL0,#00H
SETB TR0 ;启动T0