DISP: ; 显示子程序
RET
3) 方式 2 应用
方式 2 是定时器自动重装载的操作方式, 在这种方式下, 定时器 0 和 1 的工作是相同的, 它的工作过程与方式 0、 方式 1 基本相同, 只不过在溢出的同时, 将 8 位二进制初值自动重装载, 即在中断服务子程序中, 不需要编程送初值, 这里不再举例。定时器 T1 工作在方式 2 时, 可直接用作串行口波特率发生器,
4) 方式 3 的应用
定时器 T0 工作在方式 3 时是 2 个 8 位定时器 /计数器。 且TH0 借用了定时器 T1 的溢出中断标志TF1和运行控制位 TR1。
例 3 假设有一个用户系统中已使用了两个外部中断源, 并置定时器 T1 于方式 2, 作串行口波特率发生器用, 现要求再增加一个外部中断源, 并由 P1.0 口输出一个 5K Hz的方波(假设晶振频率为 6 MHz)。
在不增加其它硬件开销时, 可把定时器/计数器 T0 置于工作方式 3, 利用外部引脚 T0端作附加的外部中断输入端, 把 TL0 预置为 0FFH, 这样在 T0 端出现由 1至 0 的负跳变时, TL0 立即溢出, 申请中断, 相当于边沿激活的外部中断源。 在方式 3下, TH0 总是作 8 位定时器用, 可以靠它来控制由 P1.0 输出的 5 kHz方波。
由 P1.0 输出 5 kHz的方波, 即每隔 100 μs使 P1.0 的电平发生一次变化。则TH0中的初始值 X=M-N=256-100/2=206。
MOV TL0, #0FFH
MOV TH0, #206 MOV TL1, #BAUD ; BAUD根据波特率要求设置常数 MOV TH1, #BAUD MOV MOD, #27H ; 置T0工作方式3
; TL0工作于计数器方式
MOVTCON, #55H ; 启动定时器 T0、 T1, 置外部中断 0 和 1
; 为边沿激活方式
MOVIE, #9FH ; 开放全部中断
TL0 溢出中断服务程序(由 000BH单元转来):
TL0INT: MOV TL0, #0FFH
; 外部引脚 T0 引起中断处理程序 RETI
TH0 溢出中断服务程序(由 001BH转来):
TH0INT: MOVTH0, #206
CPL P1.0
RETI
此处串行口中断服务程序、 外中断 0和外中断 1的中断服务程序没有列出。
例
设MCS-51单片机系统时钟频率ФCLK为6MHZ,请编出利用定时/计数器T0在P1.0引脚上产生周期为2秒,占空比为50%的方波信号的程序
(1)主程序
1)T0工作方式的设定: 选择方式1(16位方式)