📄 timnms.asm
字号:
;********************TIMNMS********************
;本程序实现用TMR0定时N毫秒。
;入口参数:定时毫秒数在SOU中。
;出口参数:无。
;占用资源:W,STATUS,TMR0,PORTD,024H,028H,029H,07FH,17FH,07EH,1重堆栈。
;说明: 1.使用该程序需在中断入口程序中填入如下两条指令
; BTFSC INTCON,T0IF
; GOTO TMR0INT
; 2.最多定时255毫秒,若SOU=0,则定时65毫秒
IFNDEF TIMNMS1
#DEFINE TIMNMS1
SAVEW EQU 07FH ;现场保护中保存W的地址
SAVES EQU 07EH
TIMNMS CLRF TEMP1
BCF STATUS,C
RLF SOU,F
RLF TEMP1,F
RLF SOU,F ;SOU*4
RLF TEMP1,F ;移出位存入TEMP1
MOVF TEMP1,W
MOVWF TEMP2 ;TEMP2暂存溢出次数
COMF SOU,F
INCF SOU,F ;0-SOU*4
MOVF SOU,W
MOVWF TMR0
BSF STATUS,RP0 ;BANK1
MOVLW 17H
MOVWF OPTION_REG ;1:256
CLRF TRISD ;D为输出
BCF STATUS,RP0 ;BANK0
MOVLW 01H
MOVWF PORTD
BCF INTCON,T0IF
MOVLW 0E0H
MOVWF INTCON ;开中断
RETURN
;*******************中断程序*******************
TMR0INT MOVWF SAVEW
SWAPF STATUS,W
CLRF STATUS
MOVWF SAVES ;保护现场
MOVF TEMP1,F
BTFSS STATUS,Z
GOTO NEXT61
MOVF TEMP2,W
MOVWF TEMP1
BCF STATUS,C
RLF PORTD,F
MOVF PORTD,F
BTFSC STATUS,Z
BSF PORTD,0
MOVF SOU,W
NEXT62 MOVWF TMR0 ;重新装栽TMR0
BSF STATUS,RP0
MOVLW 17H ;重新设定预分频值
MOVWF OPTION_REG
BCF STATUS,RP0
BCF INTCON,T0IF
SWAPF SAVES,W
MOVWF STATUS
SWAPF SAVEW,F
SWAPF SAVEW,W ;恢复现场
RETFIE
NEXT61 DECF TEMP1,F ;溢出次数减1
CLRW
GOTO NEXT62
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -