可编程定时 / 计数器应用实验

可编程定时 / 计数器应用实验

一、实验目的

了解定时器 / 计数器 8253 的原理,掌握编制定时器 / 计数器程序设计方法。

二、实验内容

设计连线和程序,以 1MHz 的信号为时钟信号,利用 8253 产生 1s 的定时控制发光二极管变化。

三、实验连线

  1. 用户时钟的 1MHz 输出接 8253 的 CLK1
  2. 8253 的 GATE1+5V (在实验箱的左上角和右上角)。
  3. 8253 OUT1 接 8253 的 CLK2
  4. 8253 的 GATE2+5V
  5. 8253 的 OUT2 的输出为 1s 方波,接 M 区的一个发光二极管。
    1. 区的 OE# 接实验箱的地线(在实验箱的左下角和右下角)。模块电源部分( L 区)的 JP7 (控制 LED)短接。
  6. 将 B 区 J1 的插头插上扁平电缆和微机相连。
  7. 将 A 区的电源开关拨到 “内” 位置。

四、编写程序

1. 各端口的地址
  • 0 号计数器地址 304H
  • 1 号计数器地址 305H
  • 2 号计数器地址 306H
  • 计数器控制寄存器地址 307H
2. 程序源代码
CODE    SEGMENT 'code'
ASSUME  CS:CODE
START:  MOV     DX,307H                 ;
        MOV     AL,01110110B            ;计数器一,先读写低八位,后读写高八位,方式 3,二进制计数
        OUT     DX,AL                   ;
        MOV     DX,305H                 ;一号计数器
        MOV     AL,0E8H                 ;
        OUT     DX,AL                   ;
        MOV     AL,03H                  ;
        OUT     DX,AL                   ;送计数初值 03E8H = 1000
        MOV     DX,307H                 ;
        MOV     AL,10110110B            ;计数器二,先读写低八位,后读写高八位,方式 3,二进制计数
        OUT     DX,AL                   ;
        MOV     DX,306H                 ;二号计数器
        MOV     AL,0E8H                 ;
        OUT     DX,AL                   ;
        MOV     AL,03H                  ;
        OUT     DX,AL                   ;送计数初值 03E8H=1000
        MOV     AH,4CH                  ;
        INT     21H                     ;
CODE    ENDS
        END START

五、思考题

利用 8253 和 8255 设计查询方式走马灯电路,8253 每秒使的 PC4 的电位变化一次,编程查询 PC4 的状态,当 PC4 为低电平时从 8255 的 A 端口输出一个数据,使得和 A 端口相连的 8 个发光二极管依次变亮且每次只亮一个。
1. 修改连线:
  • 8253 的 OUT2 的输出为 1s 方波,接 8255 的 PC4
  • 8255 的 PA0~PA7 接 M 区的发光二极管 L1~L8
  • 模块电源( L 区)短接 JP7
2. 修改程序:
PORTA=300H
PORTB=301H
PORTC=302H
CONTROL=303H
CODE SEGMENT 'code'
ASSUME CS:CODE
START:  MOV    DX,307H                 ;{工作方式初始化
        MOV    AL,01110110B            ;计数器一,先读写低八位,后读写高八位,方式3,二进制计数
        OUT    DX,AL                   ;}
        MOV    DX,305H                 ;{一号计数器
        MOV    AL,0E8H                 ;
        OUT    DX,AL                   ;
        MOV    AL,03H                  ;送计数初值 03E8H = 1000
        OUT    DX,AL                   ;}
        MOV    DX,307H                 ;{工作方式初始化
        MOV    AL,10110110B            ;计数器二,先读写低八位,后读写高八位,方式3,二进制计数
        OUT    DX,AL                   ;}
        MOV    DX,306H                 ;{二号计数器
        MOV    AL,0E8H                 ;
        OUT    DX,AL                   ;
        MOV    AL,03H                  ;送计数初值 03E8H = 1000
        OUT    DX,AL                   ;}
        MOV    DX,CONTROL              ;{工作方式初始化
        MOV    AL,88H                  ;A 口输出,C 口高四位输入
        OUT    DX,AL                   ;}
        MOV    BL,11111110B            ;二极管初始显示状态
        MOV    DX,PORTC                ;{
L1:     IN     AL,DX                   ;
        TEST   AL,10H                  ;判断 AL 第 5 位是否为 1
        JNZ    L1                      ;ZF = 0 转移到标号地址}
        MOV    DX,PORTA                ;{
        MOV    AL,BL                   ;将 BL 的值输出到二极管
        OUT    DX,AL                   ;}
        ROL    BL,1                    ;循环左移一位
L2:     MOV    DX,PORTC                ;{
        IN     AL,DX                   ;
        TEST   AL,10H                  ;判断 AL 第 5 位是否为 1
        JZ     L2                      ;ZF = 1 转移到标号地址}
        JMP    L1                      ;
        MOV    AH,4CH                  ;
        INT    21H                     ;
CODE    ENDS
        END START

六、实验小结

本次实验,加深了我对定时器 / 计数器 8253 的原理的了解,掌握了编制定时器 / 计数器程序设计方法。在最后的思考题中,通过不断的尝试、修改连线和程序,我对接口编程更加熟练了,为我今后的实验及课程设计打下了良好的基础。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值