微机接口实验四:可编程定时器/计数器8254
程序员文章站
2022-03-04 23:08:46
...
一、实验目的
掌握8254的基本工作原理和编程方法,用示波器观察不同方式下的波形。(说明:没有示波器,所以用LED灯的闪烁来观察)
二、实验原理和内容
三、编程提示
四、电路接线图
实验1:
实验2:
五、程序设计流程图
实验1:
实验2:
六、一些说明
- 实验1中,每次读取后简单判断一下是不是跟上次一样,因为可能本次读取时计数器还没有减1。
- 实验2中,由于要输出两个不同的频率方波,并且要使LED灯来得及闪烁,所以需要用到三个计数器。
七、程序源代码
实验1:
stack segment stack
db 200 dup(0)
stack ends
data segment
ZERO equ 280h
ONE equ 281h
CTRL equ 283h
data ends
code segment
assume cs:code,ds:data,ss:stack
newline MACRO ;回车换行
push ax
push dx
mov ah,02h
mov dl,0ah
int 21h
mov ah,02h
mov dl,0dh
int 21h
pop dx
pop ax
ENDM
dispchar MACRO x ;输出单个字符并换行
push dx
push ax
newline
mov ah,02h
mov dl,x
int 21h
pop ax
pop dx
ENDM
put_data MACRO x, y ;x为端口,y为数据
push ax
push dx
mov al, y
mov dx, x
out dx, al
pop dx
pop ax
ENDM
main:mov ax,data
mov ds,ax
mov ax, stack
mov ss, ax
put_data CTRL, 00010000b ;计数器0工作在方式0下,只读写低8位,二进制计数码
put_data ZERO, 0fh ;写入计数器初值15,开始计数
again:mov dx, ZERO
in al, dx ;读取通道0数据
and al, 0fh; 读取低四位
mov dl, al
cmp bl, dl
jz again ;本次读出的数值与上次一样,说明还没有手动输入脉冲,继续读取,直到本次读取 的数据与上次不一样
mov bl, dl ;本次与上次不一样
cmp dl, 9 ;判断是否小于9
ja disp_
add dl, 30h
dispchar dl ;显示0-9的一个数
jmp again
disp_:add dl, 37h
dispchar dl ;显示A-F中的一个数
jmp again
mov ah,4ch
int 21h
code ends
end main
实验2:
stack segment stack
db 200 dup(0)
stack ends
data segment
ZERO equ 280h
ONE equ 281h
TWO equ 282h
CTRL equ 283h
data ends
code segment
assume cs:code,ds:data,ss:stack
put_data MACRO x, y ;x为端口 y为数据
push ax
push dx
mov al, y
mov dx, x
out dx, al
pop dx
pop ax
ENDM
;分析:连接时钟频率为1MHz,周期为1us,要求输出的1Hz的信号周期为1秒,分频系数为1e6,but8254最大计数为65536
;又因为1e6 = 1000 * 1000,所以通道0和通道1分别把信号1000分频即可
main:mov ax,data
mov ds,ax
mov ax, stack
mov ss, ax
put_data CTRL, 00110111b ;计数器0工作在方式3下,读写16位,BCD计数码
put_data ZERO, 00 ;写入计数器初值1000
put_data ZERO, 10h ;先写低8位再写高8位0001 0000 0000 0000
put_data CTRL, 01110110b ;计数器1工作在方式3下,读写16位,二进制数码
put_data ONE, 0e8h
put_data ONE, 03h ;写入计数器初值1000,开始计数,out0端为高电平,接LED灯,LED灯亮
put_data CTRL 10110111b ;计数器2工作在方式3下,读写16位,BCD计数码
put_data TWO 02 ;写入计数初值2,输出两个端口,out1端口输出频率是out2端口2倍
put_data TWO 00h
mov ah, 4ch
int 21h
code ends
end main
上一篇: 在css中怎样添加脚注
下一篇: 周总2