本文共 2609 字,大约阅读时间需要 8 分钟。
掌握8254的基本工作原理和编程方法,用示波器观察不同方式下的波形。(说明:没有示波器,所以用LED灯的闪烁来观察)
实验1:
实验2:实验1:
实验2:实验1:
stack segment stack db 200 dup(0)stack endsdata segment ZERO equ 280h ONE equ 281h CTRL equ 283hdata endscode 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 21hcode ends end main
实验2:
stack segment stack db 200 dup(0)stack endsdata segment ZERO equ 280h ONE equ 281h TWO equ 282h CTRL equ 283h data endscode 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 21hcode ends end main
转载地址:http://imiqf.baihongyu.com/