📄 shibiema.asm
字号:
;***************************************
;*****************程序DOUBLE带定时器,综合PIC16C74***********************
;==========================================================================
;
; Register Definitions,double//new
;
;==========================================================================
W EQU H'0000'
F EQU H'0001'
;----- Register Files------------------------------------------------------
SCL EQU 4
SDA EQU 3
Z EQU .2
TMR0 EQU 1H
PCL EQU 2H
STATUS EQU 3H
FSR EQU 4H
RA EQU 5H
RP0 EQU 5H
RB EQU 06H
RC EQU 07H
RD EQU 08H
RE EQU 09H
ADCON0 EQU 1FH
ADCON1 EQU 9FH
ADRES EQU 1EH
INTCON EQU 0BH
TRISA EQU 85H
TRISB EQU 86H
TRISC EQU 87H
TRISD EQU 88H
TRISE EQU 89H
OPTION_REG EQU 81H
TOIF EQU .2
TOIE EQU .5
GIE EQU .7
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
BIT EQU 20H
BUF1 EQU 21H
BUF2 EQU 22H
BUF EQU 23H
ZUF EQU 24H
CNT1 EQU 25H
CNT2 EQU 26H
R0 EQU 27H
R1 EQU 28H
COUNT8 EQU 29H
TEMP EQU 2AH
BIJIAO EQU 2BH
MUF EQU 2CH
SIJI EQU 2DH
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
H_B EQU 30H
L_B EQU 31H
CHUH EQU 32H
CHUL EQU 33H
SHANGH EQU 34H
SHANGL EQU 35H
YUH EQU 36H
YUL EQU 37H
P1H EQU 38H
P1L EQU 39H
NUMBER EQU 3AH ;一次操作的字节数。
TXBUF EQU 3BH ;发送数据缓冲器
RXBUF EQU 3CH ;接受数据缓冲器
CNT EQU 3DH ;循环次数记数器
FLAG EQU 3EH
ADDR EQU 3FH ; 24C01首地址
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BUFFER1 EQU 40H ; 40H~43H, 共4个空白区
MINUTE_BUF EQU 44H ; 44H~47H, 共6个空白区
SHIJIAN EQU 45H
YANSHI EQU 46H
ADCNT EQU 47H
LAG_FA EQU 48H
;~~~~~~~
TIAN EQU 49H ; 天数寄存器
HOUR EQU 4AH ; 小时寄存器,
MINUTE EQU 4BH
SECOND EQU 4CH
MS50 EQU 4DH
MS EQU 4EH
;4FH不要用>>>>><<<<<EQU 4FH
LAG_KAIGUAN EQU 50H
;~~~~~~~
TIAN_BUF EQU 51H
HOUR_BUF EQU 52H
W_TEMP EQU 53H
STATUS_TEMP EQU 54H
FSR_TEMP EQU 55H
BUF_B EQU 56H
ZUF_B EQU 57H
LAG EQU 58H
DAT1 EQU 59H
FBIAO EQU 5AH
JISU EQU 5BH
FANGYA EQU 5CH
CASE1 EQU 5DH
CASE2 EQU 5EH
SHIBUF EQU 5FH
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
WENBUF EQU 60H
CHUNG EQU 61H
BMAX EQU 62H
BMIN EQU 63H
BMAX_B EQU 64H
BMIN_B EQU 65H
SZDF EQU 66H
TWEN_F EQU 67H
LAG2 EQU 68H
SHIBUF2 EQU 69H
FLAG_PENWU EQU 6AH
T1_F EQU 6BH
T2_F EQU 6CH
VALUE EQU 6DH
BUF3 EQU 6EH
BUF4 EQU 6FH
SHIBIEMA EQU 0A2H
;==========================================================================
;
; Configuration Bits
;
;==========================================================================
_BODEN_ON EQU H'3FFF'
_BODEN_OFF EQU H'3FBF'
_CP_ALL EQU H'3FEF'
_CP_OFF EQU H'3FFF'
_PWRTE_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FFB'
_LP_OSC EQU H'3FFC'
_XT_OSC EQU H'3FFD'
_HS_OSC EQU H'3FFE'
_RC_OSC EQU H'3FFF'
__CONFIG _CP_ALL & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC
;==========================================================================
;#DEFINE YAC RA,0
;#DEFINE WENC RA,1
;#DEFINE SHIC2 RA,2 ;???
;#DEFINE SHIC RA,3
#DEFINE PENWU RC,0
#DEFINE FA1 RC,1
#DEFINE FA2 RC,2
#DEFINE LED RC,3
#DEFINE POWER_LED RC,4
#DEFINE SZLED RC,5
#DEFINE T2LED RC,6
#DEFINE T1LED RC,7
#DEFINE AB RD,0
#DEFINE POLICE RD,1
#DEFINE SHANGXIA1CLK RD,2
;#DEFINE SDA RD,3
;#DEFINE SCK RD,4
;#DEFINE SHANGXIA1CLK RD,5
;#DEFINE SHI1CLK RD,6
;#DEFINE SHUI_YALICLK RD,7
#DEFINE JIARE RE,0
#DEFINE SHUIWUI RE,1
#DEFINE SHI2CLK RE,2
;*************************************
ORG 0000H
NOP
NOP
GOTO START
;*************************************
ORG 0004H
MOVWF W_TEMP
MOVF STATUS,W
CLRF STATUS
MOVWF STATUS_TEMP
MOVF FSR,W
MOVWF FSR_TEMP
;~~~~~~~~~
BCF INTCON ,TOIF ;P199
MOVLW 10H
ADDWF MS+1,F
;~~~~~~~~~
MOVLW 0B0H
ADDWF MS,F
MOVLW 3CH
SKPNC
MOVLW 3DH
ADDWF MS+1,F
SKPNC
GOTO _MSTIMEOUT
MOVLW 50H
ADDWF MS,F
MOVLW 0C3H
SKPNC
MOVLW 0C4H
ADDWF MS+1,F
GOTO _CLOCKEXIT
_MSTIMEOUT
INCF MS50,F
MOVLW .20
XORWF MS50,W
SKPZ
GOTO _CLOCKEXIT
CLRF MS50
INCF SECOND,F
MOVLW .60
XORWF SECOND,W
SKPZ
GOTO _CLOCKEXIT
CLRF SECOND
INCF MINUTE,F
MOVLW .60
SUBWF MINUTE,W
SKPNZ
GOTO GOD1
SKPNC
GOTO GOD1
GOTO _CLOCKEXIT
GOD1
CLRF MINUTE
INCF HOUR,F
MOVLW .24
SUBWF HOUR,W
BTFSC STATUS,2
GOTO NA1
BTFSC STATUS,0
GOTO NA1
GOTO _CLOCKEXIT
;SKPZ
;GOTO _CLOCKEXIT ;??????????????????????有的地方丢了.
NA1
CLRF HOUR
INCF TIAN,F
;~~~~~~~~~
_CLOCKEXIT
INT_EXIT
CLRF STATUS
MOVF FSR_TEMP,W
MOVWF FSR
MOVF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F ;ZHIS TWO DO NOT DICHANGE STATUS !!
SWAPF W_TEMP,W
RETFIE
;****************************************
TABLE
ADDWF PCL,F
RETLW 0FCH ;0
RETLW 60H ;1
RETLW 0DAH ;2
RETLW 0F2H ;3
RETLW 66H ;4
RETLW 0B6H ;5
RETLW 0BEH ;6
RETLW 0E0H ;7
RETLW 0FEH ;8
RETLW 0F6H ;9
RETLW 0FFH ;10
;****************************************
BCD ;BCD码转换模块
BCF STATUS,0
MOVLW 08H
MOVWF COUNT8
CLRF R0
CLRF R1
MOVF MUF,W
MOVWF BUF2
LOOPBCD2
RLF BUF2
RLF R1
RLF R0
DECFSZ COUNT8
GOTO ADJDECZ2
;#################################
MOVF R1,W
MOVWF BUF1
MOVWF BUF2
MOVLW 0F0H
ANDWF BUF1,1
SWAPF BUF1,W
CALL TABLE
MOVWF BUF1
MOVLW 0FH
ANDWF BUF2,W
CALL TABLE
MOVWF BUF2
RETLW 0
ADJDECZ2
MOVLW R1
MOVWF FSR
CALL ADJBCDZ2
MOVLW R0
MOVWF FSR
CALL ADJBCDZ2
GOTO LOOPBCD2
ADJBCDZ2
MOVLW 3
ADDWF 0,W
MOVWF TEMP
BTFSC TEMP,3
MOVWF 0
MOVLW 30H
ADDWF 0,W
MOVWF TEMP
BTFSC TEMP,7
MOVWF 0
RETLW 0
;***************;***************;***************
;**************ANJIAN ZONG ZI**************************
; 检测设置等按键子程序,一级子程序
;***************ZI*************************
TESTKEY
CALL KEYSCAN
COMF VALUE,0
BTFSC STATUS,2
RETURN
CALL DEL100MS
CALL KEYSCAN
COMF VALUE,0
BTFSC STATUS,2
RETURN
CALL TRANSLATE
movf FSR,W
xorlw .5
skpnz
goto SET1
movf FSR,W
xorlw .6
skpnz
goto JIA1
movf FSR,W
xorlw .7
skpnz
goto JIAN1
movf FSR,W
xorlw .8
skpnz
goto SET2
movf FSR,W
xorlw .9
skpnz
goto JIA2
movf FSR,W
xorlw .10
skpnz
goto JIAN2
return
;*************************************
;****************ZI************************
; 调键并翻译子程序
;***************ZI*************************
JIAN_T
CALL KEYSCAN
COMF VALUE,0
BTFSC STATUS,2
GOTO SUNMIN
CALL DEL100MS
CALL KEYSCAN
COMF VALUE,0
BTFSC STATUS,2
GOTO SUNMIN
CALL TRANSLATE
RETURN
SUNMIN
CLRF FSR;没有案件,把FSR CLEAR,以备调用程序用
RETURN
;****************ZI************************
; 按键扫描子程序
;***************ZI*************************
KEYSCAN
BSF STATUS,5
BCF OPTION_REG,7
MOVLW 0FH
MOVWF TRISB
BCF STATUS,5
MOVLW 00H
MOVWF RB
NOP
NOP
NOP
NOP
MOVF RB,0
ANDLW 0FH
MOVWF VALUE
XORLW 0FH
BTFSC STATUS,2
GOTO NOKEY
BSF STATUS,5
MOVLW 0F0H
MOVWF TRISB
BCF STATUS,5
MOVF VALUE,W
MOVWF RB
NOP
NOP
NOP
NOP
MOVF RB,0
ANDLW 0F0H
IORWF VALUE,1
RETURN
NOKEY
MOVLW 0FFH
MOVWF VALUE
RETURN
;****************************************
SET1
MOVLW .1
ADDWF LAG
BTFSC LAG,0
GOTO SHAN1
GOTO SHAN2
;****************************************
;设置2
;****************************************
SET2
MOVLW .1
ADDWF LAG2
BTFSC LAG2,0
GOTO SHAN3
GOTO SHAN4
;***********************************
; 按键加1子程序
;***************ZI*************************
JIA1
BTFSC LAG,0
GOTO BUFJIA
GOTO ZUFJIA
ZUFJIA
MOVLW .99
XORWF ZUF,W
BTFSC STATUS,2
GOTO CXY
GOTO JIXU
BUFJIA
MOVLW .99
XORWF BUF,W
BTFSC STATUS,2
GOTO CXY
GOTO JIXU
JIXU
BTFSS LAG,0
GOTO ZUFINC
INCF BUF,1
GOTO CXY
ZUFINC
INCF ZUF,1
CXY
;________________________________
CALL DELAY200MS;/
RETLW 0;/
;________________________________
;***************ZI*************************
; 按键减1子程序
;***************ZI*************************
JIAN1
BTFSC LAG,0
GOTO BUFJIAN
ZUFJIAN
MOVF ZUF,1
BTFSC STATUS,2
GOTO G16
GOTO JIXU2
BUFJIAN
MOVF BUF,1
BTFSC STATUS,2
GOTO G16
GOTO JIXU2
JIXU2
BTFSS LAG,0
GOTO ZUFDEC1
DECF BUF,1
GOTO G16
ZUFDEC1
DECF ZUF,1
G16
;________________________________
CALL DELAY200MS;/
RETLW 0
;_________________________________
;***********************************
; 按键加1子程序
;***************ZI*************************
JIA2
BTFSC LAG2,0
GOTO BUFJIA22
GOTO ZUFJIA22
ZUFJIA22
MOVLW .99
XORWF BMIN,W
BTFSC STATUS,2
GOTO CXY22
GOTO JIXU20
BUFJIA22
MOVLW .99
XORWF BMAX,W
BTFSC STATUS,2
GOTO CXY22
GOTO JIXU20
JIXU20
BTFSS LAG2,0
GOTO ZUFINC22
INCF BMAX,1
GOTO CXY22
ZUFINC22
INCF BMIN,1
CXY22
;________________________________
CALL DELAY200MS;/
RETLW 0
;_________________________________
;***************ZI*************************
; 按键减1子程序
;***************ZI*************************
JIAN2
BTFSC LAG2,0
GOTO BUFJIAN22
ZUFJIAN22
MOVF BMIN,1
BTFSC STATUS,2
GOTO G162
GOTO JIXU22
BUFJIAN22
MOVF BMAX,1
BTFSC STATUS,2
GOTO G162
JIXU22
BTFSS LAG2,0
GOTO ZUFDEC22
DECF BMAX,1
GOTO G162
ZUFDEC22
DECF BMIN,1
G162
;________________________________
CALL DELAY200MS;/
RETLW 0
;_________________________________
;*************************************
;MAX1,MIN1 CLK->D5
;*************************************
Z1
MOVLW .32
MOVWF BIT
BCF STATUS,0
C1 NOP
BCF RD,5
NOP
NOP
BTFSC BUF2,7
BSF RD,0
BTFSS BUF2,7
BCF RD,0
RLF BUF3,1
RLF BUF4,1 ;BUF3、BUF4,BUF1、BUF2
RLF BUF1,1 ; 高 , 低 , 高 ,低
RLF BUF2,1
BSF RD,5
NOP
NOP
DECFSZ BIT,1
GOTO C1
RETLW 0
;****************************************
;MAX2,MIN2 CLK->D2
;*************************************
Z2
MOVLW .32
MOVWF BIT
BCF STATUS,0
C2 NOP
BCF RD,2 ;BUF3、BUF4,BUF1、BUF2
NOP
NOP
BTFSC BUF2,7
BSF RD,0
BTFSS BUF2,7
BCF RD,0
RLF BUF3,1
RLF BUF4,1 ;BUF3、BUF4,BUF1、BUF2
RLF BUF1,1 ; 高 , 低 , 高 ,低
RLF BUF2,1
NOP
BSF RD,2
NOP
NOP
DECFSZ BIT,1
GOTO C2
RETLW 0
;*************************************
;SHI1 CLK-->D6
;*************************************
Z3SHI1
MOVLW .16
MOVWF BIT
BCF STATUS,0
C3 NOP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -