📄 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 + -