实验内容
编程画出波形,通过 D/A
转换器转换为模拟信号,通过软件示波器观察波形。
实验接线
代码
;; DAC0832 IOY0 ;; BASE OFFSET: 0600H A0832 EQU 0600H SSEG SEGMENT STACK DW 0,0,0,0 SSEG ENDS CODE SEGMENT ASSUME CS:CODE, SS:SSEG START: MOV DX, A0832 ;; --------- SAW START --------- MOV CX, 0AH SAW: MOV AL, 00H JC1: OUT DX, AL CALL DELAY_SHORT CMP AL, 0FFH JE JC2 INC AL JMP JC1 JC2: LOOP SAW ;; ---------- SAW END ---------- ;; --------- RECT START --------- MOV CX, 02H RECT: MOV AL, 00H OUT DX, AL CALL DELAY_LONG MOV AL, 0FFH OUT DX, AL CALL DELAY_LONG LOOP RECT ;; ---------- RECT END ---------- ;; --------- TRI START --------- MOV CX, 02H TRI: MOV AL, 00H TR1: OUT DX, AL CALL DELAY_SHORT CMP AL, 0FFH JE TR2 INC AL JMP TR1 TR2: OUT DX, AL CALL DELAY_SHORT CMP AL, 00H JE TR3 DEC AL JMP TR2 TR3: LOOP TRI ;; ---------- TRI END ---------- ;; --------- STAIR START --------- MOV CX, 02H STA: MOV AX, 00H STA1: OUT DX, AL CMP AX, 0FFH JGE STA_FIN CALL DELAY_LONG ADD AL, 11H ;; 0FH STAIRS ;; 11H GAP JMP STA1 STA_FIN: LOOP STA ;; ---------- STAIR END ---------- MOV AX, 4C00H INT 21H DELAY_SHORT: PUSH AX PUSH CX MOV CX, 01FFH LOOP $ POP CX POP AX RET DELAY_LONG: PUSH AX PUSH CX MOV CX, 0FFFFH LOOP $ POP CX POP AX RET CODE ENDS END START
波形
选做实验:中断控制波形
描述
使用单脉冲开关 KK1
在四种波形间进行切换。
分析
将 KK1
与 MIR6
相连,在中断处理程序中判断需要绘制的波形,主循环中绘制实际的波形。
需要封装一下之前用到的波形绘制部分代码。
代码
;; DAC0832 IOY0 ;; BASE OFFSET: 0600H A0832 EQU 0600H SSEG SEGMENT STACK DW 0,0,0,0 SSEG ENDS CODE SEGMENT ASSUME CS:CODE, SS:SSEG START: ;; MIR6 MOV AX, OFFSET MIR6 MOV SI, 38H MOV [SI], AX MOV AX, CS MOV SI, 3AH MOV [SI], AX ;; -------------------------------------------------- ;; INIT 8259 CLI MOV AL, 11H OUT 20H, AL MOV AL, 08H OUT 21H, AL MOV AL, 04H OUT 21H, AL MOV AL, 07H OUT 21H, AL MOV AL, 2FH OUT 21H, AL STI ;; -------------------------------------------------- MOV DX, A0832 MOV BX, 0 MAIN: MOV CX, 1 CMP BX, 0 JE M_SAW CMP BX, 1 JE M_RECT CMP BX, 2 JE M_TRI CALL STA JMP MAIN M_SAW: CALL SAW JMP MAIN M_RECT: CALL RECT JMP MAIN M_TRI: CALL TRI JMP MAIN MIR6: INC BX CMP BX, 4 JNE BACK MOV BX, 0 BACK: IRET MOV DX, A0832 SAW: MOV AL, 00H JC1: OUT DX, AL CALL DELAY_SHORT CMP AL, 0FFH JE JC2 INC AL JMP JC1 JC2: LOOP SAW RET RECT: MOV AL, 00H OUT DX, AL CALL DELAY_LONG MOV AL, 0FFH OUT DX, AL CALL DELAY_LONG LOOP RECT RET TRI: MOV AL, 00H TR1: OUT DX, AL CALL DELAY_SHORT CMP AL, 0FFH JE TR2 INC AL JMP TR1 TR2: OUT DX, AL CALL DELAY_SHORT CMP AL, 00H JE TR3 DEC AL JMP TR2 TR3: LOOP TRI RET STA: MOV AX, 00H STA1: OUT DX, AL CMP AX, 0FFH JGE STA_FIN CALL DELAY_LONG ADD AL, 11H ;; 0FH STAIRS ;; 11H GAP JMP STA1 STA_FIN: LOOP STA RET DELAY_SHORT: PUSH AX PUSH CX MOV CX, 01FFH LOOP $ POP CX POP AX RET DELAY_LONG: PUSH AX PUSH CX MOV CX, 0FFFFH LOOP $ POP CX POP AX RET CODE ENDS END START