基于8086的波形发生器(汇编语言&微机课设)

目录

一、设计要求

二、设计方案及功能

三、元器件清单

四、原理图

 五、代码


一、设计要求

采用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

  • 6
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值