当前位置:   article > 正文

8254定时/计数器用方式3二分频实现小灯周期闪烁_8254汇编语言定时器控制灯按一定频率闪烁

8254汇编语言定时器控制灯按一定频率闪烁
  • 实验内容

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

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/400707
推荐阅读
相关标签
  

闽ICP备14008679号