8254定时/计数器用方式3二分频实现小灯周期闪烁

  • 实验内容

d3f171a1ef4f42c6a107e14ebeb2a7f7.png

  • 实验目的

掌握8254定时/计数器方式的应用及编译原理

  • 实验步骤

1根据实验内容画出实验程序流程图,用汇编语言编写实验程序,

2、连接实验线路,注意连线的颜色标记
3、打开计算机进入TDPIT软件
4点击文件衡建,输入所编写的汇编语言程序,存E盘。
5编译汇编语言源程序,观察信息栏,如提示有错,修改汇编语
言源程序。
6、链接编译后生成的目标文件,观察信息栏,如提示有错,修改
汇编语言源程序。
7,打开实验系统电源,运行链接完成后的可执行文件,观察输出
发光二极管的变化情况。

  • 实验分析:

(1)MY8254_COUNT0  EQU   IOY0+00H*4  ;8254计数器0端口地址;;

分析: 因为试验系统是32位,地址宽度为4字节(B),而AL等寄存器为8位  ,因此应该对IOYO的低字节乘4。所以计数器0的端口地址:E400~E403,计数器1的端口地址:E403~E406,计数器2的端口地址:E407~E40A,计数器3的端口地址E40B~E40E,

(2)定时计数器8254的工作方式有控制字寄存器的内容来选择。所以在进行工作方式初始化之前应该先MOV DX,MY8254_MODE来选择控制字寄存器。AL=01110110H,说明选择1通道,技术通道的读写规则:先读CR或OR的低8位,再读写高八位。011表示选择方式三,最低位的零表示:读写数据为二进制

(3)由于该系统设置存储方式为小端存储,因此在设置初值时应该先将低字节的数据送入,再将高字节的数据送入寄存器

(4)由于实验要求实现1.8432MHZ分频输出1HZ的方波,因此由题目知:要求产生频率为F的信号的定时常数T=(CLK)/f=1.8432*10^6/1HZ =1843200;但方式三最大只能为1.19318MHZ因此需要两次分频才能实现,可改为通道零先实现100分频,通道1实现18432分频。

 

  • 实验流程图

 

初始化8254工作方式

开始

设置计数器0下的工作方式

取出频率值计算出计数初值

装入计数器0计数初值为100

 

设置计数器1下的工作方式

装入计数器1计数初值为18432

 

结束

 

  • 实验结果

;T8254-1.asm

;查看端口资源分配情况,记录实验系统I/O端口始地址

 

INTR_IVADD     EQU   003CH       ;INTR对应的中断矢量地址IOY0      EQU   E400H         ;片选IOY0对应的端口始地址

MY8254_COUNT0  EQU   IOY0+00H*4  ;8254计数器0端口地址MY8254_COUNT1  EQU   IOY0+01H*4  ;8254计数器1端口地址

MY8254_COUNT2  EQU   IOY0+02H*4  ;8254计数器2端口地址MY8254_MODE    EQU   IOY0+03H*4 ;8254控制寄存器3端口地址

                     

STACK1 SEGMENT STACK

DW 256 DUP(?)   ;

STACK1 ENDS

 

CODE SEGMENT

        ASSUME CS:CODE,DS:DATA

 

START:

MOV DX,MY8254_MODE     ;初始化8254的工作方式

MOV AL,01110110H

OUT DX,AL

 

Mov DX ,MY8254_COUNT1

MOV AL,64H        ;装入计数初值实现100分频

OUT DX,AL

MOV AL,00H

OUT DX,AL

 

MOV DX,MY8254_MODE     ;初始化8254的工作方式

MOV AL,36H  ;要送入AL中的内容代码表示用十进制和二进制都可以

OUT DX,AL

 

MOV DX, MY8254_COUNT0

MOV AL,00H    ;装入计数初值实现18432分频

OUT DX,AL

MOV AL,48H

OUT DX,AL

 

QUIT:MOV AX,4C00H

INT 21H

CODE ENDS

 END START

c8fdf117af6e445183b48f6bc0a99e81.jpeg

 

b3281adc6bbb4f03b67edeab3a73d27a.jpeg

  • 实验思考

(1)如何用BCD码实现将计数一的100分频改为200分频

通过计数器的结构(如下图)可知9761caedf9dd41809c2c3ba7a9aa572f.png

 控制字的最后一位(LSb)用于选择计数是二进制还是BCD。如果该值为0,它将充当二进制计数器,否则将充当BCD计数器

因此代码:

START:

MOV DX,MY8254_MODE     ;初始化8254的工作方式

MOV AL,01110111H

OUT DX,AL

 

Mov DX ,MY8254_COUNT1

MOV AL,0c8H      ;装入计数初值实现200分频

OUT DX,AL

MOV AL,00H

OUT DX,AL

 

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半截詩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值