目录
一、设计要求
采用8086/8088控制器和8位数/模转换芯片DAC0832设计实现波形发生器,编写软件程序。
基本要求:
(1) 该波形发生器能够产生方波、矩形波、三角波、梯形波、锯齿波和正弦波,通过示波器可以观察到相应波形;
(2) 通过按键可选择不同波形输出;
(3)使用数码管和LED灯作为波形的显示
(4)利用硬件实现波形发生器输出波形的幅度可调。
二、设计方案及功能
图1硬件系统框图
8086CPU通过控制8255的A口进行波形幅度的调控,通过B口进行对数码管数字的调控,通过C口读取按键的数据,判断是哪个按键按下,8086CPU通过控制DAC0832来制造六种波形,通过编程我们就可以实现当按下第一个按键的时候数码管显示0,第一个LED灯亮,示波器显示方波,当按下第二个按键的时候数码管显示1,第二个LED灯亮,示波器显示梯形波,当按下第三个按键的时候数码管显示2,第三个LED灯亮,示波器显示锯齿波,当按下第四个按键的时候数码管显示3,第四个LED灯亮,示波器显示三角波,当按下第五个按键的时候数码管显示4,第五个LED灯亮,示波器显示正弦波,当按下第六个按键的时候数码管显示5,第六个LED灯亮,示波器显示梯形波。可以通过调节DAC0832的VRRF端电压控制波形的幅度。
三、元器件清单
名称 | 数量(个) | 名称 | 数量(个) |
8086CPU芯片 | 1 | 七段共阴极数码管 | 1 |
74HC373芯片 | 2 | 开关(此处用开关代替按键) | 6 |
DAC0832芯片 | 1 | 运算放大器 | 1 |
74ls138芯片 | 1 | 示波器 | 1 |
可调电阻 | 1 | 电源 | 1 |
LED灯 | 6 | 电阻 | 若干 |
四、原理图
五、代码
DAC0832 EQU 0188H ;DAC0832的编码地址
M8255_A EQU 0180H ;8255的A口地址
M8255_B EQU 0182H ;8255的B口地址
M8255_C EQU 0184H ;8255的C口地址
M8255_Z EQU 0186H ;8255的控制寄存器地址
SIN_NUM DB 80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H
DB 0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH
DB 0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E2H,0DAH
DB 0D1H,0C7H,0BCH,0B0H,0A5H,98H,8CH,80H
DB 7FH,73H,67H,5AH,4FH,43H,38H,2EH
DB 25H,1DH,15H,0FH,09H,05H,02H,00H
DB 00H,02H,05H,09H,0FH,15H,1DH,25H
DB 2EH,38H,43H,4FH,5AH,67H,73H,7FH ;正弦波函数表
;主程序部分
STACK SEGMENT STACK 'stack'
DW 32 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START: MOV DX,M8255_Z ;初始化8255工作方式
MOV AL,89H ;方式0,C口输入,B口输出
OUT DX,AL
STEP: CALL CLEAR ;清屏
CALL BEGIN ;调用波形选择函数
JMP STEP ;继续循环
;----------------------------------------------------------------------------------------------
;清理子程序
CLEAR PROC NEAR
MOV DX,M8255_B ; 清除数码管显示内容
MOV AL,00H
OUT DX,AL
MOV DX,M8255_A ; 关闭LED灯
MOV AL,0FFH
OUT DX,AL
RET
CLEAR ENDP
;------------------------------------------------------------------------------------------------
;判断输入数据,选择波形
BEGIN PROC NEAR
MOV DX,M8255_C ;读c口输入数据
IN AL,DX
CMP AL,0FEH ;当按第一个键时显示0输出方波同时第一个LED灯亮
JNE L1
MOV DX,M8255_B
MOV AL,3FH
OUT DX,AL
MOV DX,M8255_A
MOV AL,0FEH
OUT DX,AL
CALL FANGBO ;调用方波子程序
L1: CMP AL,0FBH ;当按第三个键时显示2输出锯齿波同时第三个LED灯亮
JNE L2
MOV DX,M8255_B
MOV AL,5BH
OUT DX,AL
MOV DX,M8255_A
MOV AL,0FBH
OUT DX,AL
CALL DOG ;调用锯齿波子程序
L2: CMP AL,0FDH ;当按第二个键时显示1输出阶梯波同时第二个LED灯亮
JNE L3
MOV DX,M8255_B
MOV AL,06H
OUT DX,AL
MOV DX,M8255_A
MOV AL,0FDH
OUT DX,AL
CALL CAT ;调用阶梯波子程序
L3: CMP AL,0F7H ;当按第四个键时显示3输出三角波同时第四个LED灯亮
JNE L4
MOV DX,M8255_B
MOV AL,4FH
OUT DX,AL
MOV DX,M8255_A
MOV AL,0F7H
OUT DX,AL
CALL SANJIAOBO ;调用三角波子程序
L4: CMP AL,0EFH
JNE L5
MOV DX,M8255_B
MOV AL,66H ;当按第五个键时显示4输出正弦波同时第五个LED灯亮
OUT DX,AL
MOV DX,M8255_A
MOV AL,0EFH
OUT DX,AL
CALL SINBO ;调用正弦波子程序
L5: CMP AL,0DFH
JNE L6
MOV DX,M8255_B
MOV AL,6DH ;当按第六个键时显示5输出正弦波同时第六个LED灯亮
OUT DX,AL
MOV DX,M8255_A
MOV AL,0DFH
OUT DX,AL
CALL TIXING ;调用梯形波子程序
L6: RET ;否则退出
BEGIN ENDP
;方波信号产生程序
FANGBO PROC NEAR
F1: MOV CX,0FFH
FB: MOV DX,DAC0832
MOV AL,0
OUT DX,AL
LOOP FB ;形成一个延迟的信号,每执行一次LOOP循环,CX寄存器减一,到0结束
MOV CX,0FFH
FB1: MOV AL,0FFH
MOV DX,DAC0832
OUT DX,AL
LOOP FB1
MOV DX,M8255_C ;判断按键是否改变
IN AL,DX
CMP AL,0FEH ;将C口读取到的数据与0E比较
JE F1
JMP BEGIN
RET
FANGBO ENDP
;锯齿波信号产生程序
DOG PROC NEAR
C1: MOV DX,M8255_C ;判断按键是否改变
IN AL,DX
CMP AL,0FBH
JE CB
JMP BEGIN
CB: MOV AL,0
LLL: MOV DX,DAC0832
OUT DX,AL
INC AL
CMP AL,0FFH ;判断是否到顶
JE C1
JMP LLL
RET
DOG ENDP
;阶梯波信号产生程序
CAT PROC NEAR
D1: MOV DX,M8255_C ;判断按键是否改变
IN AL,DX
CMP AL,0FDH
JE D2
JMP BEGIN
D2: MOV AL,0
D3: MOV DX, DAC0832
OUT DX,AL
MOV CX,33H
D4: LOOP D4
CMP AL,0FFH ;判断是否到顶
JE D1
ADD AL,33H ;每次信号AL加33H,形成一个阶梯
JMP D3
CAT ENDP
;三角波信号产生程序
SANJIAOBO PROC NEAR
B1: MOV AL,0
MOV DX,M8255_C ;判断按键是否改变
IN AL,DX
CMP AL,0F7H
JE B2
JMP BEGIN
B2: MOV DX,DAC0832
OUT DX,AL
DEC AL
CMP AL,0 ;判断是否到顶,到顶跳转
JE B3
JMP B2
B3: MOV DX,DAC0832
OUT DX,AL
INC AL
CMP AL,0F7H
JE B1 ;到0转移,重新开始
JMP B3
RET
SANJIAOBO ENDP
;正弦波信号产生程序
SINBO PROC NEAR
O1: MOV CX,0040H
MOV BX,OFFSET DS:[SIN_NUM]
SINWLP: MOV AL,DS:[BX]
MOV DX,DAC0832
OUT DX,AL
INC BX
LOOP SINWLP
O2: MOV AL,0
MOV DX,M8255_C ;判断按键是否改变
IN AL,DX
CMP AL,0EFH
JE O1
JMP BEGIN ;改变跳转
RET
SINBO ENDP
;梯形波产生程序
TIXING PROC NEAR
T0: MOV DX,M8255_C ;判断按键是否改变
IN AL,DX
CMP AL,0DFH
JE T1
JMP BEGIN
T1: MOV DX, DAC0832
MOV AL, 00H
OUT DX, AL
TX0: INC AL ;自加,波形成递增
OUT DX,AL
CMP AL,0FFH ;判断是否到顶
JNZ TX0
MOV CX,0FFH
TX1: NOP ;到顶延时一段时间,波形保持
LOOP TX1
TX2: DEC AL ;自减,波形成递减
OUT DX ,AL
CMP AL,00H
JNZ TX2 ;判断是否为0,为0跳转
MOV CX,0FFH
TX3: NOP
LOOP TX3
JMP T0
TIXING ENDP
;子程序结束
CODE ENDS
END START