8086+8253定时器方式2、3工作Proteus仿真
仿真截图
代码
CODE SEGMENT
DATA SEGMENT
PORT0 EQU 288H
PORT1 EQU 28AH
PORT2 EQU 28CH
PORTCTL EQU 28EH
N EQU 5;N调节二极管闪烁频率
DATA ENDS
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA;段分配
START:
MOV AX, DATA;段初始化
MOV DS, AX
MOV DX, PORTCTL
MOV AL, 00010111B
OUT DX, AL
MOV AL, 01010111B
OUT DX, AL
MOV AL, 10010100B
OUT DX, AL
MOV DX, PORT0
MOV AL, 10H
OUT DX, AL
MOV DX,PORT1
MOV AL, 10H
OUT DX, AL
MOV DX, PORT2
MOV AL, N
OUT DX, AL
DONTSTOP:
JMP DONTSTOP
MAIN ENDP
CODE ENDS
END MAIN
实现目的
其他事项
从示波器可以看出,似乎Proteus中8253的工作方式2与3都是方式2,都会输出负脉冲,方式3也不会输出方波。
-----2022.11.18
经验证,的确为proteus仿真模型问题,可以通过替换模型解决该问题。替换模型的时候注意,替换DATA文件夹下的模型,如果只替换Proteus文件夹下的没有用。
可参考:https://blog.csdn.net/qq_43862401/article/details/106805628
再更
经作业要求,加入对于LED灯闪烁次数的记录以及数码管显示。
代码
CODE SEGMENT
DATA SEGMENT
LIST DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
NUM DB 2 DUP(?)
PORT0 EQU 288H
PORT1 EQU 28AH
PORT2 EQU 28CH
PORTCTL3 EQU 28EH
PORTA EQU 280H
PORTB EQU 282H
PORTC EQU 284H
PORTCTL5 EQU 286H
N EQU 5;N调节二极管闪烁频率
DATA ENDS
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA;段分配
START:
MOV AX, DATA;段初始化
MOV DS, AX
MOV DX, PORTCTL3
MOV AL, 00010111B
OUT DX, AL
MOV AL, 01010111B
OUT DX, AL
MOV AL, 10010100B
OUT DX, AL
MOV DX, PORT0
MOV AL, 10H
OUT DX, AL
MOV DX,PORT1
MOV AL, 10H
OUT DX, AL
MOV DX, PORT2
MOV AL, N
OUT DX, AL
MOV DX, PORTCTL5
MOV AL, 82H
OUT DX, AL
MOV DX, PORTC
MOV AL, 0FFH
OUT DX, AL
MOV AL, 0
OUT DX,AL
DONTSTOP:
CALL INPUT
CALL OUTPUT
JMP DONTSTOP
MAIN ENDP
INPUT PROC NEAR
MOV DX, PORTB
IN AL, DX
MOV AH, 0
MOV BL, 10
DIV BL
MOV NUM, AL
MOV NUM+1, AH
RET
INPUT ENDP
OUTPUT PROC NEAR
;MOV DX, PORTCTL;PC0置0;询问老师二者异同
;MOV AL, 00H
;OUT DX, AL
;MOV AL, 03H;PC1置1
;OUT DX, AL
MOV DX, PORTC
MOV AL, 02H
OUT DX, AL
MOV AL, NUM
MOV BX, OFFSET LIST
XLAT
MOV DX, PORTA
OUT DX, AL
CALL DELAY
;MOV DX, PORTCTL;PC0置1
;MOV AL, 01H
;OUT DX, AL
;MOV AL, 02H;PC1置0
;OUT DX, AL
MOV DX, PORTC
MOV AL, 01H
OUT DX, AL
MOV AL, NUM+1
MOV BX, OFFSET LIST
XLAT
MOV DX, PORTA
OUT DX, AL
CALL DELAY
RET
OUTPUT ENDP
DELAY PROC NEAR;延时
PUSH SI
PUSH CX
MOV SI, 1
DELAYNEXT1:
MOV CX, 0E0FFH
DELAYNEXT2:
LOOP DELAYNEXT2
DEC SI
JNZ DELAYNEXT1
POP CX
POP SI
RET
DELAY ENDP
CODE ENDS
END MAIN