📄 germany-1000-v1.asm
字号:
;/********************single phase Germany LCD*******************
; Copyright (C) July,2007 R&D Institute of Reallin Co., Ltd.
; Module : 主函数文件..
; File Name : main.c
; Description :
; Author : Reallin
; Build Date :
; LCD : JY-05436A echo
; ------------------------------------------------------------------------------
; Modification History:
; <No.> <version > <time> <author> <contents>
; 1、 Germany-1000-V1.00 2007-06-14 Reallin 德国单相液晶样表,停电显示5秒,JY05436 液晶(反射);
;***********************************************************
list p=16f630
#include <p16f630.inc>
;********************** ***********************
;HARDWARE PROPERTIES
;---------------------------------------------
F EQU 1
W EQU 0
;---------------------------------------------
; PORT C PINS DEFINE
PDATA EQU 0
WR EQU 1
CS EQU 2
REFVP EQU 4
CLEAN EQU 5
;---------------------------------------------
; PORT A PINS DEFINE
PLS EQU 2
A_PLS EQU 5
;---------------------------------------------
;*********************************************
;SFR CONSTANT DEFINE
;---------------------------------------------
TRISA_DATA EQU 0X0E
TRISC_DATA EQU 0X30
WPUA_DATA EQU 0X00
IOCA_DATA EQU 0X00
CMCON_DATA EQU 0X04
CMCON_DATA1 EQU 0X44
CMCON_DATA2 EQU 0X04
VRCON_DATA EQU 0X8E
T1CON_DATA EQU 0X01
TMR1H_DATA EQU 0XEC
TMR1L_DATA EQU 0X78 ;5MS
OPTION_REG_DATA EQU 0XCD ;WATCHDOG TIME OUT AFTER 0.51 S
OPTION_REG_DATA1 EQU 0XCD ;AND
OPTION_REG_DATA2 EQU 0X8D ;OR
INTCON_DATA EQU 0X50
INTCON_DATA1 EQU 0XE2
INTCON_DATA2 EQU 0X50
PIR1_DATA EQU 0X00
PIE1_DATA EQU 0X09 ;;;;;;;;;;;;
;_____________________________________________
TIMER_PLS_CHECK EQU 0X04 ;有效脉冲
;---------------------------------------------
;*********************************************
;GPR VARIABLE DEFINE
;---------------------------------------------
;-----------SOME REG ABOUT SFR_STACK -----------------
W_STACK EQU 0X20
PCLATH_STACK EQU 0X21
STATUS_STACK EQU 0X22
FSR_STACK EQU 0X23
;-----------SOME REG ABOUT POWER -----------------
PLS_NUM EQU 0X40;(REG 40-44 MUST BE CONTINUE)
DATA0 EQU 0X41
DATA1 EQU 0X42;(42-45,4C-4F,56-59)
DATA2 EQU 0X43
DATA3 EQU 0X44
SUM EQU 0X45
TIMER_PLS EQU 0X24
INC_TEMP0 EQU 0X2E
INT_W_TEMP EQU 0X3D
DATA_POINT EQU 0X49
READ_DP_TEMP0 EQU 0X4A
CLEAN3_CNT EQU 0X4B
DP_CHANGE_TEMP0 EQU 0X52
DP_BACKUP EQU 0X55
EEADR_STACK EQU 0X47
EEDATA_STACK EQU 0X48
RESTORE1 EQU 0X4C
RESTORE2 EQU 0X4D
RESTORE3 EQU 0X4E
RESTORE4 EQU 0X4F
SUM_TEMP EQU 0X57
RECOVER_V_TEMP0 EQU 0X58
RUN_CODE EQU 0X59
;-----------SOME REG ABOUT KEY & TIMER1 ----------
;TIMER_KEY_5S EQU 0X38
; TIMER_KEY_05S EQU 0X39
TIMER_5MS EQU 0X3A
CNT_5MS EQU 0X3B
; KEY_DELAY_CNT EQU 0X3C
;_________________________________________________
DELAY_TIMER0 EQU 0X3E
DELAY_TIMER1 EQU 0X3F
;-----------SOME REG ABOUT DISPLAY ---------------
DIS_BUF_PRE EQU 0X30;(MUST BE FORMATED)
DIS_BUFFER EQU 0X31;(0X31-0X37)
DIS_SEND_POINT EQU 0X25
FORMAT_CODE_NUM EQU 0X26
D_C_TEMP0 EQU 0X27
D_C_TEMP1 EQU 0X28
CODE_S_POINT EQU 0X29
CODE_O_POINT EQU 0X2A
SEND_BIT_CNT EQU 0X2B
SEND_DAT_CNT EQU 0X2D
S_A_TEMP0 EQU 0X2C
;---------------------------------------------
SYS_STATUS EQU 0X2F
; KEY_DONE_CHECK EQU H'0000'
TIMER_PLS_ON EQU H'0001'
; KEY_05S_IN EQU H'0002'
; KEY_5S_IN EQU H'0003'
TEST_STATUS EQU H'0004'
PLS_VALID EQU H'0005'
PLS_INC EQU H'0006';WILL BE SET AFTER PLS INC
; KEY_DONE EQU H'0007'
;---------------------------------------------
WORK_STATUS EQU 0X56
CHECKSUM_3GROUP_FLAG EQU H'0000'
FORMAT_SFR_FLAG EQU H'0001'
DISP_FORMAT_FLAG EQU H'0002'
DISP_SYS_FLAG EQU H'0003'
;---------------------------------------------
;---------------------------------------------
ORG 0X0000
NOP
NOP
NOP
GOTO MAIN
;---------------------------------------------
ORG 0X0004
MOVWF W_STACK
MOVF STATUS,W
MOVWF STATUS_STACK
MOVF FSR,W
MOVWF FSR_STACK
;---------------------------------------------
BCF STATUS,RP0
BTFSC PIR1,CMIF
CALL CM_INT
BTFSC PIR1,TMR1IF
CALL TMR1_INT
BTFSC INTCON,INTF
CALL XINT_INT
;______________________________________________
MOVF FSR_STACK,W
MOVWF FSR
MOVF STATUS_STACK,W
MOVWF STATUS
SWAPF W_STACK,F
SWAPF W_STACK,W
;______________________________________________
RETFIE
;--------------------------------------------------
;SUB_PROGRAM
;NAME: DISP_FORMAT_TABLE
;FUNCTION: GET A CODE TO FORMAT THE 1621
;PARAMETER IN: W
;PARAMETER OUT: W
;PUER PRIVATE PARAMETER: NONE
;ALL PARAMETER: W
;CALLING SUB_PROGRAM:
;CALLED BY:
;--------------------------------------------------
DIS_FORMAT_TABLE:
ADDWF 2,F
NOP
RETLW 0X08 ;TONE OFF
RETLW 0X29 ;BISA1/3 4 COM
RETLW 0X18 ;256K on chip
RETLW 0X05 ;WDT DISABLE
RETLW 0X80 ;/IRQ DISABLE *
RETLW 0XE3 ;NORMAL MODE *
RETLW 0X03 ;LCD ON
RETLW 0X01 ;SYS ON
;--------------------------------------------------
;SUB_SUB_PROGRAM
;NAME: DISP_CODING
;FUNCTION: CODING THE DATA IN W TO DISPLAY CODE
;PARAMETER IN: W
;PARAMETER OUT: W
;PUER PRIVATE PARAMETER: NONE
;ALL PARAMETER: W
;CALLING SUB_PROGRAM:
;CALLED BY:
;0xf5,0x60,0xb6,0xf2,0x63,0xd3,0xd7,0x70,0xf7,0xf3,
;--------------------------------------------------
CODING_TABLE:
ADDWF 2,F
RETLW 0XAF ;'0'
RETLW 0X06 ;'1'
RETLW 0X6D ;'2'
RETLW 0X4F ;'3'
RETLW 0XC6 ;'4'
RETLW 0XCB ;'5'
RETLW 0XEB ;'6'
RETLW 0X0E ;'7'
RETLW 0XEF ;'8'
RETLW 0XCF ;'9'
RETLW 0XAF ;'0'
RETLW 0XAF ;'0'
RETLW 0XAF ;'0'
RETLW 0XAF ;'0'
RETLW 0XAF ;'0'
RETLW 0XAF ;'0'
;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;\ /
;/ MAIN PROGRAM \
;\ /
;/ \
;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
MAIN:
;_____________________________________
;BSF STATUS, RP0 ;CALIBRATING THE OSCCAL
;CALL 0x03FF
;MOVWF OSCCAL
;_____________________________________
MOVLW 0XC8
CALL DELAY
CLRWDT
;FORMAT_SFR1:
BCF STATUS,RP0
MOVLW 0XFF
MOVWF PORTA
MOVLW 0XFF
MOVWF PORTC
MOVLW CMCON_DATA
MOVWF CMCON
;____________________________________
BSF STATUS,RP0
MOVLW OPTION_REG_DATA
MOVWF OPTION_REG
BSF WORK_STATUS,FORMAT_SFR_FLAG
CALL FORMAT_SFR
;____________________________________
BCF STATUS,RP0
V_OK:
BTFSC CMCON,COUT
GOTO V_OK
;____________________________________
;READ_FROM_EE:
MOVLW DATA0
CALL EE_READ
MOVWF DATA0
MOVLW PLS_NUM
CALL EE_READ
MOVWF PLS_NUM
MOVLW DATA_POINT
CALL EE_READ
MOVWF DP_BACKUP
;____________________________________
;FORMAT_GPR:
CLRF TIMER_PLS
; CLRF TIMER_KEY_5S
; CLRF TIMER_KEY_05S
CLRF CNT_5MS
CLRF SYS_STATUS
MOVLW 0X0C
MOVWF WORK_STATUS
;____________________________________
CLRWDT
MOVLW 0XC8
CALL DELAY
CLRWDT
;____________________________________
; CALL CLEAN_JUDGE
;____________________________________
BCF STATUS,RP0
MOVLW TMR1H_DATA ;//////
MOVWF TMR1H ;//////
MOVLW TMR1L_DATA ;//////
MOVWF TMR1L ;//////
MOVLW PIR1_DATA
MOVWF PIR1
MOVLW INTCON_DATA
MOVWF INTCON
BSF INTCON,GIE
CLRWDT
BCF PORTA,A_PLS ;power on LED light 2007-06
;***********display all screen********************
BSF WORK_STATUS,DISP_FORMAT_FLAG
CALL DISP_FORMAT
CLRWDT
CALL INIT_LCD ;init LCD display all number
CLRWDT
;*********delay 2s *********************
MOVLW 0XC8
CALL DELAY
CLRWDT
MOVLW 0XC8
CALL DELAY
CLRWDT
MOVLW 0XC8
CALL DELAY
CLRWDT
MOVLW 0XC8
CALL DELAY
CLRWDT
MOVLW 0XC8
CALL DELAY
CLRWDT
MOVLW 0XC8
CALL DELAY
CLRWDT
MOVLW 0XC8
CALL DELAY
CLRWDT
MOVLW 0XC8
CALL DELAY
CLRWDT
MOVLW 0XC8
CALL DELAY
CLRWDT
MOVLW 0XC8
CALL DELAY
CLRWDT
;***************************************************
CALL DISP_FORMAT
CALL DISP_SYS
AGAIN:
CLRWDT
CALL FORMAT_SFR
CALL DISP_FORMAT
CALL CHECKSUM_3GROUP
CALL DISP_SYS
CALL PLS_CNT
GOTO AGAIN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: INIT_LCD
;FUNCTION: display a black screen
;PARAMETER IN: NONE
;PARAMETER OUT: NONE
;PRIVATE PARAMETER:NONE
;**************************************************
;-------------------------------------------------
INIT_LCD:
BCF STATUS,RP0
MOVLW 0X40
MOVWF DIS_BUFFER-0X01 ;DIS_BUFFER
MOVLW 0XEF
MOVWF DIS_BUFFER ;1 integer
MOVLW 0XEF
MOVWF DIS_BUFFER+0X01 ;2
MOVLW 0XEF
MOVWF DIS_BUFFER+0X02 ;3
MOVLW 0XEF
MOVWF DIS_BUFFER+0X03 ;4
MOVLW 0XEF
MOVWF DIS_BUFFER+0X04 ;5
MOVLW 0XEF
MOVWF DIS_BUFFER+0X05 ;6
MOVLW 0XFF
MOVWF DIS_BUFFER+0X06 ;7 decimal fraction
MOVLW 0XE5
MOVWF DIS_BUFFER+0X07 ;8 unit
MOVLW DIS_BUFFER
MOVWF DIS_SEND_POINT
BCF INTCON,GIE
CALL DISPLAY
BSF INTCON,GIE
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: INC_JUDGE
;FUNCTION: JUDGE A BCD CODE CREATE A C OR NOT
;PARAMETER IN: W
;PARAMETER OUT: W,INC_TEMP0,SUM_TEMP
;PUER PRIVATE PARAMETER: NONE
;ALL PARAMETER: W,INC_TEMP0,SUM_TEMP
;CALLING SUB_PROGRAM: NONE
;CALLED BY: PLS_CNT,THREE_BYTES_INC,RECOVER
;--------------------------------------------------
;**************************************************
;--------------------------------------------------
INC_JUDGE:
CLRF SUM_TEMP
ADDLW 0X01
MOVWF INC_TEMP0
ANDLW 0X0F
SUBLW 0X09
BTFSC STATUS,C
GOTO INC_OUT1
MOVF SUM_TEMP,W
ADDLW 0X67
MOVWF SUM_TEMP
MOVF INC_TEMP0,W
ANDLW 0XF0
ADDLW 0X10
MOVWF INC_TEMP0
SUBLW 0X90
BTFSC STATUS,C
GOTO INC_OUT
CLRF INC_TEMP0
RETLW 0X01
INC_OUT1:
MOVF SUM_TEMP,W
ADDLW 0X61
MOVWF SUM_TEMP
INC_OUT:
RETLW 0X00
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: DISP_FORMAT
;FUNCTION: FORMAT THE HT1621 DEVICE
;PARAMETER IN: NONE
;PARAMETER OUT: PORTC.WR, PORTC.PDATA, PORTC.CS
;PURE PRIVATE PARAMETER: FORMAT_CODE_NUM
;ALL PARAMETER: FORMAT_CODE_NUM, PORTC.WR, PORTC.PDATA, PORTC.CS
;CALLING SUB_PROGRAM: DIS_FORMAT_TABLE,SEND_A_BYTE1
;CALLED BY: MAIN_PROGRAM
;**************************************************
;--------------------------------------------------
DISP_FORMAT:
BTFSS WORK_STATUS,DISP_FORMAT_FLAG
GOTO DISP_FORMAT_END
BCF WORK_STATUS,DISP_FORMAT_FLAG
BCF INTCON,GIE
BCF STATUS,RP0
BCF PORTC,CS
NOP
NOP
NOP
BCF PORTC,WR
BSF PORTC,PDATA
NOP
NOP
BSF PORTC,WR
NOP
NOP
NOP
BCF PORTC,WR
BCF PORTC,PDATA
NOP
NOP
BSF PORTC,WR
NOP
NOP
NOP
BCF PORTC,WR
BCF PORTC,PDATA
NOP
NOP
BSF PORTC,WR
MOVLW 0X08
MOVWF FORMAT_CODE_NUM
NEXT_CODE:
MOVF FORMAT_CODE_NUM,W
CALL DIS_FORMAT_TABLE
CALL SEND_A_BYTE1
BCF PORTC,WR
BCF PORTC,PDATA
NOP
NOP
BSF PORTC,WR
DECFSZ FORMAT_CODE_NUM
GOTO NEXT_CODE
BSF PORTC,CS
DISP_FORMAT_END:
BSF INTCON,GIE
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: DISP_CODING
;FUNCTION: CODING THE DATA IN CODE_S_POINT BUFFER TO CODE_O_POINT BUFFER
;PARAMETER IN: CODE_S_POINT,CODE_O_POINT
;PARAMETER OUT: THE ARRAY POINTED BY CODE_O_POINT
;PURE PRIVATE PARAMETER: D_C_TEMP0,D_C_TEMP1
;ALL PARAMETER:
;CALLING SUB_PROGRAM: CODING_TABLE
;CALLED BY: DISP_SYS
;**************************************************
;--------------------------------------------------
DISP_CODING:
D_C_LAB1:
MOVF CODE_S_POINT,W ; DATA3
MOVWF FSR
MOVF INDF,W
MOVWF D_C_TEMP0
ANDLW 0X0F
CALL CODING_TABLE
MOVWF D_C_TEMP1
MOVF CODE_O_POINT,W
MOVWF FSR
MOVF D_C_TEMP1,W
MOVWF INDF
DECF CODE_S_POINT,F
INCF CODE_O_POINT,F ; DATA2
D_C_LAB2:
MOVF CODE_S_POINT,W ; DATA2
MOVWF FSR
MOVF INDF,W
MOVWF D_C_TEMP0
SWAPF D_C_TEMP0
MOVF D_C_TEMP0,W
ANDLW 0X0F
CALL CODING_TABLE
MOVWF D_C_TEMP1
MOVF CODE_O_POINT,W
MOVWF FSR
MOVF D_C_TEMP1,W
MOVWF INDF
INCF CODE_O_POINT,F
SWAPF D_C_TEMP0
MOVF D_C_TEMP0,W
ANDLW 0X0F
CALL CODING_TABLE
MOVWF D_C_TEMP1
MOVF CODE_O_POINT,W
MOVWF FSR
MOVF D_C_TEMP1,W
MOVWF INDF
INCF CODE_O_POINT,F
DECF CODE_S_POINT,F
MOVF CODE_O_POINT,W
SUBLW DIS_BUFFER+0X06 ;0X05
BTFSC STATUS,C
GOTO D_C_LAB2
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: DISPLAY
;FUNCTION: SEND THE DATA IN DISPLAY BUFFER TO 1621
;PARAMETER IN: NONE
;PARAMETER OUT: PORTC.WR, PORTC.PDATA, PORTC.CS
;PURE PRIVATE PARAMETER: NONE
;ALL PARAMETER:
;CALLING SUB_PROGRAM:
;CALLED BY:
;**************************************************
;PURE PRIVATE PARAMETER:
;ALL PARAMETER:
;CALLING SUB_PROGRAM:
;CALLED BY:
;--------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -