3. 16 次产生三角波,最高点-5V
;0832 Ua-示波器观察
;0832cs280H~287H
;Ua=-Uxef/256*N;Ub=-Uxef/256*N-5
;8253 -288H~28BH;CLK0-2MHZ;GATE0-VCC;OUT0-PC7
;8255 -290H~293H;
;Ua=-Uxef/256*N;Ub=-Uxef/256*N-5
DATA SEGMENT
T0_8253 EQU 288H
KZ_8253 EQU 28BH
PC_8255 EQU 292H
KZ_8255 EQU 293H
DATA ENDS
STACK1 SEGMENT PARA STACK
DW 20H DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS: CODE, DS:DATA, SS:STACK1
START:
MOV AX, DATA
MOV DS, AX
CALL Init_8253
CALL Init_8255
MOV AL, 00H
DRAW_ASCEND_LINE: ;画上升的边
MOV DX, 280H
OUT DX, AL
CALL DELAY
CMP AL, 80H
JZ DRAW_DESCEND_LINE ;跳转到画下降的边
ADD AL, 08H
JMP DRAW_ASCEND_LINE
DRAW_DESCEND_LINE: ;画下降的边
SUB AL, 08H
MOV DX, 280H
OUT DX, AL
CALL DELAY
CMP AL, 00H
JZ DRAW_ASCEND_LINE ;跳转到画上升的边
JMP DRAW_DESCEND_LINE
MOV AH, 4CH; 退出到 DOS,即结束程序运行
INT 21H
DELAY PROC NEAR
PUSH DX
PUSH AX
NEXT1:
MOV DX,PC_8255
IN AL,DX
AND AL,80H;1000 0000B-PC7
JNZ NEXT1
NEXT2:
MOV DX,PC_8255
IN AL,DX
AND AL,80H
JZ NEXT2
POP AX
POP DX
RET
DELAY ENDP
Init_8253 PROC
PUSH DX
PUSH AX
MOV DX,KZ_8253
MOV AL,00100111B ;选择通道0-OUT0,写入高字节,方式3,用BCD码
OUT DX,AL
MOV DX,T0_8253
MOV AL,20H
OUT DX,AL
;8253产生1mS的连续方波*/
POP AX
POP DX
RET
Init_8253 ENDP
;初始化8255
Init_8255 PROC
PUSH DX
PUSH AX
MOV DX,KZ_8255 ;8255方式字控制字控制;10011000
MOV AL,98H
OUT DX,AL
POP AX
POP DX
RET
Init_8255 ENDP
CODE ENDS
END START
4. 16 次产生梯形波,最高点-5V
;0832 Ua-示波器观察
;0832cs280H~287H
;Ua=-Uxef/256*N;Ub=-Uxef/256*N-5
;8253 -288H~28BH;CLK0-2MHZ;GATE0-VCC;OUT0-PC7
;8255 -290H~293H;
;Ua=-Uxef/256*N;Ub=-Uxef/256*N-5
DATA SEGMENT
T0_8253 EQU 288H
KZ_8253 EQU 28BH
PC_8255 EQU 292H
KZ_8255 EQU 293H
DATA ENDS
STACK1 SEGMENT PARA STACK
DW 20H DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS: CODE, DS:DATA, SS:STACK1
START:
MOV AX, DATA
MOV DS, AX
CALL Init_8253
CALL Init_8255
MOV AL, 00H
DRAW_ASCEND_LINE: ;画上升的腰
MOV DX, 280H
OUT DX, AL
CALL DELAY
CMP AL, 80H
JZ DRAW_HORIZON_LINE ;跳转到画梯形上底
ADD AL, 08H
JMP DRAW_ASCEND_LINE
DRAW_HORIZON_LINE: ;画梯形上底
MOV CX, 10H
AGAIN:
OUT DX, AL
CALL DELAY
LOOP AGAIN
DRAW_DESCEND_LINE: ;画下降的腰
SUB AL, 08H
MOV DX, 280H
OUT DX, AL
CALL DELAY
CMP AL, 00H
JZ DRAW_ASCEND_LINE;跳转到画上升的腰
JMP DRAW_DESCEND_LINE
MOV AH, 4CH; 退出到 DOS,即结束程序运行
INT 21H
DELAY PROC NEAR
PUSH DX
PUSH AX
NEXT1:
MOV DX,PC_8255
IN AL,DX
AND AL,80H;1000 0000B-PC7
JNZ NEXT1
NEXT2:
MOV DX,PC_8255
IN AL,DX
AND AL,80H
JZ NEXT2
POP AX
POP DX
RET
DELAY ENDP
Init_8253 PROC
PUSH DX
PUSH AX
MOV DX,KZ_8253
MOV AL,00100111B ;选择通道0-OUT0,写入高字节,方式3,用BCD码
OUT DX,AL
MOV DX,T0_8253
MOV AL,20H
OUT DX,AL
;8253产生1mS的连续方波*/
POP AX
POP DX
RET
Init_8253 ENDP
;初始化8255
Init_8255 PROC
PUSH DX
PUSH AX
MOV DX,KZ_8255 ;8255方式字控制字控制;10011000
MOV AL,98H
OUT DX,AL
POP AX
POP DX
RET
Init_8255 ENDP
CODE ENDS
END START