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

本文介绍了一种使用8253定时器设计的方波发生器,能够根据按钮选择输出不同频率的方波。核心内容包括时钟信号设定、8253寄存器配置以及通过8255读取按键输入,实现频率切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方波发生器
时钟信号的频率为307.2kHz。
通过按钮可以选择输出不同频率的方波。

DATAS SEGMENT
    ;此处输入数据段代码  
    IOYO equ 0C400h;对应的端口地址
    IOY1 equ 0C440h
    MY8253_COUNT_0 equ IOYO+00H*4;8253计数器0端口1地址
    MY8253_COUNT1 equ IOYO+01H*4;8253计数器1端口2地址
    MY8253_COUNT2 equ IOYO+02H*4;8253计数器2端口3地址
    MY8253_MODE equ IOYO+03H*4;8253控制器地址
    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;8255控制器地址
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
	;这里确定的D1位为1说明PB端口是输入端口,用来输入按键输入信号
	;D4位为0,说明PA端口作为输出信号
    mov dx,MY8255_MODE
    mov al,82h;1000 0010
    out dx,al 
K:
	;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
	;若无输入跳转到K继续读入信号
  	jmp k
wait_a:
    ;这个地方的作用是用于如果按键的输入不改变则信号显示不改变一直在这个逊汗中,例如当al=0FEh时,跳转到k1,然后输出了对应频率的波形;之后不断检查按键的输出是否改变如果改变则跳出k1,否则一直输出对应波形
	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

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

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值