📄 counter.asm
字号:
;********************COUNTER********************
;本程序用TMR1实现引脚脉冲计数功能。
;入口参数:预定计数值在SOUH:SOU中。
;出口参数:无。
;占用资源:W,STATUS,TMR1模块,024H,025H,07FH,17FH,07EH,1重堆栈。
;说明: 1.使用该程序需在中断入口程序中填入如下两条指令
; BTFSC INTCON,T0IF
; GOTO COUNINT
; 2.计数值应小于65536。
; 3.TMR1计数通常会丢失第一个脉冲,程序中给予了补偿。
IFNDEF COUNTER1
#DEFINE COUNTER1
SAVEW EQU 07FH ;现场保护中保存W的地址
SAVES EQU 07EH
COUNTER BCF INTCON,GIE ;禁止所有中断
MOVLW 06H ;设定T1工作方式,异步计数器方式
MOVWF T1CON
COMF SOU,F
COMF SOUH,F
MOVLW 2
ADDWF SOU,F ;补偿丢失的第一个脉冲
BTFSC STATUS,C
INCF SOUH,F ;计算TMR1的值
MOVF SOUH,W
MOVWF TMR1H ;TMR1高位
MOVF SOU,W
MOVWF TMR1L ;TMR1低位
BSF STATUS,RP0
BSF PIE1,TMR1IE ;开T1中断
BCF STATUS,RP0
BCF PIR1,TMR1IF
MOVLW 0C0H
IORWF INTCON,F ;开中断
BSF T1CON,TMR1ON;开始计数
RETURN
;*******************中断程序*******************
COUNINT MOVWF SAVEW
SWAPF STATUS,W
CLRF STATUS
MOVWF SAVES ;保护现场
BCF T1CON,TMR1ON;停止计数
MOVF SOUH,W
MOVWF TMR1H ;TMR1高位
MOVF SOU,W
MOVWF TMR1L ;TMR1低位
BSF T1CON,TMR1ON;开启计数
BCF PIR1,TMR1IF ;清除中断标志
NOP
NOP ;此处是用户处理程序
SWAPF SAVES,W
MOVWF STATUS
SWAPF SAVEW,F
SWAPF SAVEW,W ;恢复现场
RETFIE
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -