不同频率的方波发生器8086和8253的Proteus仿真

不同频率的方波发生器8086和8253的Proteus仿真_第1张图片
时钟信号的频率为307.2kHz。
通过按钮可以选择输出不同频率的方波。

DATAS SEGMENT
    ;此处输入数据段代码  
    IOYO equ 0C400h;对应的端口地址
    IOY1 equ 0C440h
    MY8253_COUNT_0 equ IOYO+00H*4;8254计数器0端口1地址
    MY8253_COUNT1 equ IOYO+01H*4;8254计数器1端口2地址
    MY8253_COUNT2 equ IOYO+02H*4;8254计数器2端口3地址
    MY8253_MODE equ IOYO+03H*4;8254控制器地址
    MY8255_A equ IOY1+00H*4;8255计数器端口1地址
    MY8255_B equ IOY1+01H*4;8255计数器端口2地址
    MY8255_C equ IOY1+02H*4;8255计数器端口3地址
    MY8255_MODE equ IOY1+03H*4;8254控制器地址
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
	mov dx,MY8255_B;输入信号
	in al,dx
    mov dx,MY8255_MODE;设置a为输入信号,b为输出信号
    mov al,82h;1000 0010
    out dx,al 
K:
	mov dx,MY8255_B;输入信号
	in al,dx
	cmp al,0FEh
	je K1
	cmp al,0FDh
	je k2
	cmp al,0FBh
	je k3
	cmp al,0f7h
	je k4
  	jmp k
wait_a:
	mov ah,al
	mov dx,MY8255_B;输入信号
	in al,dx
	cmp ah,al
	je exit
	jne k
k1:
    mov di,100;
    call out_fre
    jmp wait_a
k2:
    mov di,200;
    call out_fre
    jmp wait_a
k3:	
    mov di,300;
    call out_fre
    jmp wait_a
k4:
    mov di,500;
    call out_fre
    jmp wait_a
	
Out_fre proc near
	mov dx,MY8253_MODE;8253初始化
	mov al,0b6h;10通道211先读写高字节,后读写低字节011方式30二进制计数
	out dx,al
	mov dx,1
	mov ax,000;307.2KHz
	div di
	mov dx,MY8253_COUNT2
	out dx,al
	mov al,ah
	out dx,al
	ret
Out_fre endp

exit:
	MOV AH,4CH
    INT 21H
CODES ENDS
    END START

结果:
不同频率的方波发生器8086和8253的Proteus仿真_第2张图片
不同频率的方波发生器8086和8253的Proteus仿真_第3张图片
从上到下按按钮波形逐渐变密。
方波发生器可以产生利用8253的方式三模式产生不同的频率的方波,具体频率我没有测。我的Proteus中的频率计没有测出来,大家可以试试。
补充:运行时各个信号参考:
不同频率的方波发生器8086和8253的Proteus仿真_第4张图片
时钟信号设置不同频率的方波发生器8086和8253的Proteus仿真_第5张图片

你可能感兴趣的:(Proteus,汇编,Proteus仿真)