?? 20062131443381428.asm
字號:
TITLE "PIC16F84A COUNTING PROGRAM"
LIST P=16F84A
#INCLUDE<P16F84A.INC>
;電動繞線機控制器程序
;-------------------------------------------------
DATE EQU 11H
TEMP EQU 12H
TEMP1 EQU 13H
TEMP2 EQU 14H
COUNT0 EQU 15H
COUNT1 EQU 16H
COUNT2 EQU 17H
QIAN EQU 18H
BAI EQU 19H
SHI EQU 1AH
GE EQU 1BH
TEMP3 EQU 1CH
W_TEMP EQU 1EH
S_TEMP EQU 1FH
BZ_TEMP EQU 20H
;----------------------------------------------------
ORG 00H
NOP
GOTO START
;--------------中斷子程序----------------------------
ORG 04H
MOVWF W_TEMP
MOVF STATUS,0
MOVWF S_TEMP
BCF INTCON,1
BCF INTCON,7
BTFSC BZ_TEMP,0
GOTO JIAN
;--------------
MOVLW 09H
XORWF GE,0
BTFSS STATUS,2
GOTO GJY
CLRF GE
;---------------
MOVLW 09H
XORWF SHI,0
BTFSS STATUS,2
GOTO SJY
CLRF SHI
;---------------
MOVLW 09H
XORWF BAI,0
BTFSS STATUS,2
GOTO BJY
CLRF BAI
;---------------
MOVLW 09H
XORWF QIAN,0
BTFSS STATUS,2
GOTO QJY
CLRF QIAN
GOTO JYW
;--------------
GJY INCF GE,1
GOTO JYW
SJY INCF SHI,1
GOTO JYW
BJY INCF BAI,1
GOTO JYW
QJY INCF QIAN,1
GOTO JYW
;--------------
JIAN MOVF GE,0
BTFSS STATUS,2
GOTO GCY
;--------------
MOVF SHI,0
BTFSS STATUS,2
GOTO SCY
;--------------
MOVF BAI,0
BTFSS STATUS,2
GOTO BCY
;--------------
MOVF QIAN,0
BTFSS STATUS,2
GOTO QCY
BCF PORTB,1 ;關電機
BCF BZ_TEMP,0 ;清預置標志位
GOTO JYW
;--------------
GCY DECF GE,1 ;寄存器執行減1
GOTO JYW
SCY MOVLW 09H
MOVWF GE
DECF SHI,1
GOTO JYW
BCY MOVLW 09H
MOVLW GE
MOVLW SHI
DECF BAI,1
GOTO JYW
QCY MOVLW 09H
MOVLW GE
MOVLW SHI
MOVLW BAI
DECF QIAN,1
;-------------------------------------
JYW BSF BZ_TEMP,1 ;置顯示刷新標志位
BSF INTCON,7 ;開總中斷
MOVF S_TEMP,0
MOVWF STATUS ;恢復STATUS
MOVF W_TEMP,0 ;恢復W
;-------------------------------------
RETFIE ;中斷返回
;--------------主程序---------------------------
ORG 50H
START CLRF BZ_TEMP
CLRF TEMP ;顯示寄存器清零
CLRF GE
CLRF SHI
CLRF BAI
CLRF QIAN
BSF STATUS,5
MOVLW 01H ;PB0作輸入口
MOVWF TRISB ;PA作輸入口
MOVWF 0FFH
MOVWF TRISA
BCF STATUS,5
CLRF PORTA
CLRF PORTB
BSF INTCON,4
BSF INTCON,7
CALL XIANSHI
;--------------主程序內核
LOOP BTFSS PORTA,0 ;預置鍵是否按下
GOTO NP_1
LOOP_1 BTFSC PORTA,1 ;起停鍵是否按下
GOTO LOOP ;無鍵按下返回
CALL DELAY20MS ;延時去干擾
BTFSC PORTA,1
GOTO LOOP ;是干擾,返回
LOOP_2 BTFSS PORTA,1 ;起停鍵是否松開
GOTO $-1
CALL DELAY20MS
BTFSS PORTA,1
GOTO LOOP_2
BSF PORTA,1 ;開電機
;--------------起停鍵判斷
NP BTFSS BZ_TEMP,1 ;判斷是否需要刷新顯示
GOTO $+3 ;不需刷新則轉向起停鍵判斷
CALL XIANSHI ;調顯示刷新
BCF BZ_TEMP,1 ;清刷新標志位
BTFSC PORTA,1
GOTO NP
CALL DELAY20MS
BTFSC PORTA,1
GOTO NP
BCF PORTB,1 ;關電機
OP BTFSS PORTA,1 ;判斷起停鍵是否松開
GOTO $-1
CALL DELAY20MS
BTFSS PORTA,1
GOTO OP
GOTO LOOP ;等待下一個循環
;--------------延時20MS子程序-------------------------------------
NP_1 CALL DELAY20MS
BTFSC PORTA,0
GOTO LOOP_1
NP_2 BTFSS PORTA,0
GOTO $-1
CALL DELAY20MS
BTFSS PORTA,0
GOTO NP_2
CALL YUZHI
GOTO LOOP_1
;---------------顯示子程序-----------------------------------------
DELAY20MS MOVLW 08H
MOVWF COUNT0
LP MOVLW 5DH
MOVWF COUNT1
DECFSZ COUNT1,1
GOTO $-1
DECFSZ COUNT0,1
GOTO LP
RETURN
;---------------
XIANSHI MOVLW 18H
MOVWF TEMP1
XS BTFSC TEMP1,2
GOTO XIAN
MOVF TEMP1,0
MOVWF FSR
MOVF 00H,0
CALL TB
MOVWF DATE
CALL FSBCD
INCF TEMP1,1
GOTO XS
XIAN RETURN
;**************BCD碼發送子程序****************************
FSBCD MOVLW 08H ;發送循環次數
MOVWF COUNT2
BCF PORTB,4 ;關顯示
BCF STATUS,0
BP BCF PORTB,3
RLF DATE,1
BTFSS STATUS,0
GOTO BP1
BSF PORTB,2
GOTO BP2
BP1 BCF PORTB,2
NOP
BP2 BSF PORTB,3 ;產生時鐘上升沿
DECFSZ COUNT2,1 ;發送完畢否?
GOTO BP
BSF PORTB,4 ;開顯示
RETURN
;--------------顯示代碼表-------------------------------
TB ADDWF PCL,1
RETLW 03H ;0
RETLW 9FH ;1
RETLW 25H ;2
RETLW 0DH ;3
RETLW 99H ;4
RETLW 49H ;5
RETLW 0C1H ;6
RETLW 1FH ;7
RETLW 01H ;8
RETLW 19H ;9
RETURN
;--------------預置子程序-------------------------------------
YUZHI BSF BZ_TEMP,0 ;置預置標志位
MOVLW 18H
MOVWF TEMP3 ;置移位寄存器初值
ZHI BTFSS PORTA,2 ;位選鍵是否按下
GOTO YIWEI ;按下
ZHI_1 BTFSS PORTA,3 ;加減鍵是否按下
GOTO JIA ;按下
ZHI_2 BTFSC PORTA,0 ;預置鍵是否按下
GOTO ZHI
CALL DELAY20MS
BTFSC PORTA,0
GOTO ZHI
ZHI_3 BTFSS PORTA,0 ;預置鍵是否松開
GOTO $-1
CALL DELAY20MS
BTFSS PORTA,0
GOTO ZHI_3
GOTO YU ;預置完畢,返回
;--------------位選程序
YIWEI CALL DELAY20MS
BTFSC PORTA,2
GOTO ZHI_1
CLRF TEMP ;加減中間寄存器清零
BTFSS TEMP3,2 ;間址地址是否溢出
GOTO YIWEI_0
MOVLW 18H
MOVWF TEMP3
GOTO YIWEI_1
YIWEI_0 INCF TEMP3,1 ;間址寄存器加1
YIWEI_1 BTFSS PORTA,2 ;判斷位選鍵是否松開
GOTO $-1
CALL DELAY20MS
BTFSS PORTA,2
GOTO YIWEI_1
GOTO ZHI_1
;--------------加減程序
JIA CALL DELAY20MS
BTFSC PORTA,3
GOTO ZHI_2
MOVF TEMP,0
XORLW 09H
BTFSS STATUS,2 ;判斷數據是否為9
GOTO $+3
CLRF TEMP
GOTO $+2
INCF TEMP,1
MOVF TEMP3,0
MOVWF FSR
MOVF TEMP,0 ;將數據寫入間址
MOVWF 00H
CALL XIANSHI ;調顯示刷新
JIA_1 BTFSS PORTA,3 ;判斷加減鍵是否松開
GOTO $-1
CALL DELAY20MS
BTFSS PORTA,3
GOTO JIA_1
GOTO ZHI_2
;-------------
YU RETURN
;---------------------------------------------------------
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -