微机原理8253计数初值计算

计数初值的计算公式

计数初值在计算时以下几种情况:

一、当计数器工作在方式2或者方式3的时候,功能实际上是一个分频器,因此计数常数就是分频系数。

分频系数=输入CLK频率/OUT端输出频率

二、当计数器作为定时器工作时,CLK一般来自系统内部的时钟,计数常数就是定时系数。

定时系数(计数初值)N = 定时时间(T)× 输入时钟频率(ƒCLK)
            = 定时时间(T)/时钟脉冲周期(tCLK)

注:

  • 1GHz=1000MHz,1MHz=1000kHz,1kHz=1000Hz
  • 1s=1000ms,1 ms=1000μs,1μs=1000ns
  • s(秒)、ms(毫秒)、μs(微秒)、ns(纳秒)

时钟周期与时钟频率互为倒数,可得如下

  • 时钟频率 时钟周期
    1Hz 1s
    1KHz 1ms
    1MHz 1μs
    1GHz 1ns
  • 知道这些,便能很快换算周期与频率.
    比方10KHz, 那么就是1/10 = 0.1ms, 即100μs.
    比方100ns, 那么就是1/100 = 0.01GHz, 即10MHz.

例题练习

  1. 8253通道0的CLK0外接频率ƒCLK为1MHz的时钟信号,若按二进制计数方式工作,若要定时10ms则设置的计数初值为多少?
  • 解:时钟脉冲周期(tCLK)=1/1MHz=1/106=10-6 秒=10-3 毫秒
      定时系数(计数初值)N = 10/10-3 =10000

  1. 计数器0工作在方式3下,输出的重复频率为2KHz,计数脉冲的输入为2.5MHz,计算计数初值。
  • 解:(计数初值) N=2.5MHz/2KHz=2.5×106Hz/2×103 Hz=1250

  1. 设某8088系统中,8253占有口地址70H~73H,其实现产生电子时钟基准(定时时间为50ms)和产生方波用作扬声器音调控制(频率为1kHz),设系统中提供计数频率为2MHz
    ,试为其编制8253的初始化程序。
  • 解:

(1)根据题意8253的3个通道和控制寄存器口地址分别为:

通道0通道1通道2控制寄存器
70H71H72H73H

(2)产生电子时钟基准可采用方式2,计数初值N=50ms/(1/2MHz)=100000>65535故要两个计数通道协作完成,选用通道0和通道1

通道0通道1
控制字=00110100B,计数初值N0=1000控制字=01010100B,计数初值N1=100

(3)产生方波方式采用方式3
(计数初值)N=2MHz/1KHz=2×106Hz/1×103 Hz=2000 可选用计数通道2,控制字=10100111B
初始化程序段:

;对通道0初始化
	MOV AL,00110100B
	OUT 73H,AL    ;送通道0的方式控制字
	MOV AX,1000
	OUT 70H,AL
	MOV AL,AH
	OUT 70H,AL    ;送通道0的计数初值
;对通道1初始化
	MOV AL,01010100B
	OUT 73H,AL    ;送通道1的方式控制字
	MOV AL,100
	OUT 71H,AL    ;送通道1的计数初值
;对通道2初始化
	MOV AL,10100111B
	OUT 73H,AL    ;送通道2的方式控制字
	MOV AL,20H
	OUT 72H,AL
  • 93
    点赞
  • 311
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
8253是一个可编程定时计数器芯片,可以用来生成各种时间基准和定时器。下面是一个简单的实时钟程序,使用8253芯片来实现: ```assembly .MODEL SMALL .STACK 100h .DATA count DW 0 last_time DW 0 .CODE ; 定义中断处理函数 TIMER_HANDLER PROC FAR PUSH AX PUSH BX PUSH CX PUSH DX CALL GET_TIME MOV BX, DX SUB BX, last_time CMP BX, 100 JL SKIP_OUTPUT MOV last_time, DX MOV AX, DX MOV CX, 3600 DIV CX MOV DL, AH MOV AH, 2 INT 21h MOV DL, ':' MOV AH, 2 INT 21h MOV AX, DX MOV CX, 60 DIV CX MOV DL, AH MOV AH, 2 INT 21h MOV DL, ':' MOV AH, 2 INT 21h MOV DL, AL MOV AH, 2 INT 21h MOV DL, 0dh MOV AH, 2 INT 21h MOV DL, 0ah MOV AH, 2 INT 21h SKIP_OUTPUT: INC count MOV AL, 20h OUT 20h, AL POP DX POP CX POP BX POP AX IRET TIMER_HANDLER ENDP GET_TIME PROC MOV AH, 2ch INT 21h MOV DX, CX RET GET_TIME ENDP MAIN PROC MOV AX, @DATA MOV DS, AX MOV DX, OFFSET TIMER_HANDLER MOV AX, SEG TIMER_HANDLER MOV DS:[0*4], AX MOV DS:[0*4+2], DX MOV AL, 34h OUT 43h, AL MOV AX, 1000 OUT 40h, AL MOV AL, AH OUT 40h, AL MOV AX, 8 CLI MOV DS, AX MOV AX, WORD PTR DS:[0*4] MOV DS:[8*4], AX MOV AX, WORD PTR DS:[0*4+2] MOV DS:[8*4+2], AX MOV AX, 9 MOV DX, OFFSET TIMER_HANDLER MOV DS:[AX*4], DX MOV AX, SEG TIMER_HANDLER MOV DS:[AX*4+2], DX STI MOV AH, 4ch INT 21h MAIN ENDP END MAIN ``` 这个程序使用了8253芯片来产生1000Hz的中断信号,每次中断时会检查当前时间与上次中断时间的差值,如果超过1秒就输出当前时间。程序的主循环中使用了`int 21h`指令调用DOS的`exit`函数,以正常结束程序。在程序结束前需要将中断处理函数恢复为原来的函数,以避免对系统造成不良影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值