001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | ;********************************************************
;
; The signboard control processing
;
; Author : Seiichi Inoue
;********************************************************
list p=pic16f84a
include p16f84a.inc
__config _hs_osc & _wdt_off & _pwrte_on & _cp_off
;**************** Label Definition ********************
lpcnt equ 0c ;Screen loop counter adr
scrnidx equ 0d ;Screen data index adr
w_save equ 0e ;W register save adr
s_save equ 0f ;STATUS reg save adr
scrnhd equ 10 ;Screen table head adr
tm_cnt equ 20 ;Time adjust counter adr
e_adr equ 21 ;EEPROM data adr
e_check equ 22 ;EEPROM end check cnt adr
s_loop equ 23 ;Screen data loop cnt adr
s_index equ 24 ;Screen table index adr
s_work equ 25 ;Screen data work area
;************************
;* Time adjust *
;************************
;This data decides a scroll speed. Basic rate is 26msec.
tm_adj equ 0c ;Time adjust(26msec x 12)
;************************
;* EEPROM data size *
;************************
;If the data size is 30 bytes, then simply set d'30'.
e_size equ d'32' ;EEPROM data size
;*************** EEPROM Data Definition ***************
org h'2100'
de b'11111111'
de b'11111111'
de b'11100111'
de b'11000011'
de b'10000001'
de b'10000001'
de b'11000011'
de b'11100111'
de b'11111111'
de b'11111111'
de b'01111110'
de b'00000000'
de b'01111110'
de b'11111111'
de b'11110111'
de b'00000111'
de b'11110111'
de b'00000111'
de b'11111111'
de b'00000111'
de b'01110111'
de b'00000111'
de b'11111111'
de b'00000111'
de b'01111111'
de b'00000111'
de b'11111111'
de b'00000111'
de b'01010111'
de b'01000111'
de b'11111111'
de b'11111111'
;**************** Program Start ***********************
org 0 ;Reset Vector
goto init
org 4 ;Interrupt Vector
goto int
;**************** Initial Process *********************
org 5
init bsf status,rp0 ;Change to Bank1
clrf trisa ;Set PORTA to Output mode
clrf trisb ;Set PORTB to Output mode
movlw h'07' ;TOCS=0,PSA=0,PS2/1/0=111
movwf option_reg ;Set timer condition
bcf status,rp0 ;Change to Bank0
movlw h'00' ;Set timer value
movwf tmr0 ;TMR0 = 0 (255 counts)
movlw tm_adj ;Set time adjust value
movwf tm_cnt ;Save time adjust
clrf e_adr ;Clear EEPROM data adr
movlw e_size ;Set EEPROM data size
movwf e_check ;Save EEPROM end check
movlw h'a0' ;GIE=1,TOIE=1
movwf intcon ;Interruption enable
;************** Screen Load Process *******************
screen bsf intcon,gie ;Interrupt enable
movlw d'16' ;Set loop count
movwf lpcnt ;Save loop count
movlw h'0f' ;Set screen index
movwf scrnidx ;Save index
bcf intcon,gie ;Interrupt disable
scrnlp movlw h'ff' ;Set LED OFF data
movwf portb ;Output Data
movf scrnidx,w ;Set Position
movwf porta ;Output Position
movlw scrnhd ;Set Table head address
addwf scrnidx,w ;Head + Index
movwf fsr ;Set Table address
movf indf,w ;Read Data
movwf portb ;Output Data
decf scrnidx,f ;Index - 1
decfsz lpcnt,f ;Loop end ?
goto scrnlp ;No. Next line
goto screen ;Yes. Next screen
;************ Begin Interruption Process **************
int movwf w_save ;Save W register
movf status,w ;Read STATUS reg
movwf s_save ;Save STATUS reg
btfsc intcon,t0if ;Time out interruption ?
goto timer_int ;Jump to Timer process
goto init ;Reset(Illegal interrupt)
;************ END of Interruption Process **************
int_end movf s_save,w ;Read saved STATUS reg
movwf status ;Recover STATUS reg
swapf w_save,f ;Read saved W register
swapf w_save,w ;Recover W register
retfie
;*********** Time-out interruption Process ************
timer_int
bcf intcon,t0if ;Clear timer int flag
movlw h'00' ;Set timer value
movwf tmr0 ;TMR0 = 0 (255 counts)
decfsz tm_cnt,f ;Time over ?
goto int_end ;No. Retry
movlw tm_adj ;Set time adjust value
movwf tm_cnt ;Save time adjust
;************ Screen data shift Process ***************
movlw d'15' ;Set loop count
movwf s_loop ;Save loop count
movlw scrnhd ;Set screen head adr
movwf s_index ;Set screen adr
loop incf s_index,w ;Inclement index
movwf fsr ;Set read addres
movf indf,w ;Read data
movwf s_work ;Save data
movf s_index,w ;Read index
movwf fsr ;Set write address
movf s_work,w ;Recover data
movwf indf ;Write data
incf s_index,f ;Inclement index
decfsz s_loop,f ;All shifted ?
goto loop ;No. Continue.
;************** New data write Process ****************
movf s_index,w ;Read index
movwf fsr ;Set write address
movf e_adr,w ;Read EEPROM address
movwf eeadr ;Set EEPROM address
bsf status,rp0 ;Change to Bank1
bsf eecon1,rd ;Start EEPROM reading
bcf status,rp0 ;Change to Bank0
movf eedata,w ;Read EEPROM data
movwf indf ;Write new data
incf e_adr,f ;Inclement data address
decfsz e_check,f ;End of EEPROM data ?
goto int_end ;No. Return
clrf e_adr ;Clear EEPROM data adr
movlw e_size ;Set EEPROM data size
movwf e_check ;Save EEPROM end check
goto int_end ;Return
;********************************************************
; END of signboard control processing
;********************************************************
end |
MPASM 02.40 Released SIGN.ASM 6-3-2000 17:01:23 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 ;********************************************************
00002 ;
00003 ; The signboard control processing
00004 ;
00005 ; Author : Seiichi Inoue
00006 ;********************************************************
00007
00008 LIST P=PIC16F84A
00009 INCLUDE P16F84A.INC
00001 LIST
00002 ; P16F84A.INC Standard Header File, Version 2.00(modify)
00134 LIST
2007 3FF2 00010 __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
00011
00012 ;**************** Label Definition ********************
0000000C 00013 LPCNT EQU 0C ;Screen loop counter adr
0000000D 00014 SCRNIDX EQU 0D ;Screen data index adr
0000000E 00015 W_SAVE EQU 0E ;W register save adr
0000000F 00016 S_SAVE EQU 0F ;STATUS reg save adr
00000010 00017 SCRNHD EQU 10 ;Screen table head adr
00000020 00018 TM_CNT EQU 20 ;Time adjust counter adr
00000021 00019 E_ADR EQU 21 ;EEPROM data adr
00000022 00020 E_CHECK EQU 22 ;EEPROM end check cnt adr
00000023 00021 S_LOOP EQU 23 ;Screen data loop cnt adr
00000024 00022 S_INDEX EQU 24 ;Screen table index adr
00000025 00023 S_WORK EQU 25 ;Screen data work area
00024
00025 ;************************
00026 ;* Time adjust *
00027 ;************************
00028 ;This data decides a scroll speed. Basic rate is 26msec.
0000000C 00029 TM_ADJ EQU 0C ;Time adjust(26msec x 12)
00030
00031
00032 ;************************
00033 ;* EEPROM data size *
00034 ;************************
00035 ;If the data size is 30 bytes, then simply set d'30'.
00000020 00036 E_SIZE EQU D'32' ;EEPROM data size
00037
00038 ;*************** EEPROM Data Definition ***************
2100 00039 ORG H'2100'
2100 00FF 00040 DE B'11111111'
2101 00FF 00041 DE B'11111111'
2102 00E7 00042 DE B'11100111'
2103 00C3 00043 DE B'11000011'
2104 0081 00044 DE B'10000001'
2105 0081 00045 DE B'10000001'
2106 00C3 00046 DE B'11000011'
2107 00E7 00047 DE B'11100111'
2108 00FF 00048 DE B'11111111'
2109 00FF 00049 DE B'11111111'
210A 007E 00050 DE B'01111110'
MPASM 02.40 Released SIGN.ASM 6-3-2000 17:01:23 PAGE 2
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
210B 0000 00051 DE B'00000000'
210C 007E 00052 DE B'01111110'
210D 00FF 00053 DE B'11111111'
210E 00F7 00054 DE B'11110111'
210F 0007 00055 DE B'00000111'
2110 00F7 00056 DE B'11110111'
2111 0007 00057 DE B'00000111'
2112 00FF 00058 DE B'11111111'
2113 0007 00059 DE B'00000111'
2114 0077 00060 DE B'01110111'
2115 0007 00061 DE B'00000111'
2116 00FF 00062 DE B'11111111'
2117 0007 00063 DE B'00000111'
2118 007F 00064 DE B'01111111'
2119 0007 00065 DE B'00000111'
211A 00FF 00066 DE B'11111111'
211B 0007 00067 DE B'00000111'
211C 0057 00068 DE B'01010111'
211D 0047 00069 DE B'01000111'
211E 00FF 00070 DE B'11111111'
211F 00FF 00071 DE B'11111111'
00072
00073 ;**************** Program Start ***********************
0000 00074 ORG 0 ;Reset Vector
0000 2805 00075 GOTO INIT
0004 00076 ORG 4 ;Interrupt Vector
0004 2827 00077 GOTO INT
00078
00079 ;**************** Initial Process *********************
0005 00080 ORG 5
0005 1683 00081 INIT BSF STATUS,RP0 ;Change to Bank1
0006 0185 00082 CLRF TRISA ;Set PORTA to Output mode
0007 0186 00083 CLRF TRISB ;Set PORTB to Output mode
0008 3007 00084 MOVLW H'07' ;TOCS=0,PSA=0,PS2/1/0=111
0009 0081 00085 MOVWF OPTION_REG ;Set timer condition
000A 1283 00086 BCF STATUS,RP0 ;Change to Bank0
000B 3000 00087 MOVLW H'00' ;Set timer value
000C 0081 00088 MOVWF TMR0 ;TMR0 = 0 (255 counts)
000D 300C 00089 MOVLW TM_ADJ ;Set time adjust value
000E 00A0 00090 MOVWF TM_CNT ;Save time adjust
000F 01A1 00091 CLRF E_ADR ;Clear EEPROM data adr
0010 3020 00092 MOVLW E_SIZE ;Set EEPROM data size
0011 00A2 00093 MOVWF E_CHECK ;Save EEPROM end check
0012 30A0 00094 MOVLW H'a0' ;GIE=1,TOIE=1
0013 008B 00095 MOVWF INTCON ;Interruption enable
00096
00097 ;************** Screen Load Process *******************
0014 178B 00098 SCREEN BSF INTCON,GIE ;Interrupt enable
0015 3010 00099 MOVLW D'16' ;Set loop count
0016 008C 00100 MOVWF LPCNT ;Save loop count
0017 300F 00101 MOVLW H'0f' ;Set screen index
0018 008D 00102 MOVWF SCRNIDX ;Save index
0019 138B 00103 BCF INTCON,GIE ;Interrupt disable
MPASM 02.40 Released SIGN.ASM 6-3-2000 17:01:23 PAGE 3
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
001A 30FF 00104 SCRNLP MOVLW H'ff' ;Set LED OFF data
001B 0086 00105 MOVWF PORTB ;Output Data
001C 080D 00106 MOVF SCRNIDX,W ;Set Position
001D 0085 00107 MOVWF PORTA ;Output Position
001E 3010 00108 MOVLW SCRNHD ;Set Table head address
001F 070D 00109 ADDWF SCRNIDX,W ;Head + Index
0020 0084 00110 MOVWF FSR ;Set Table address
0021 0800 00111 MOVF INDF,W ;Read Data
0022 0086 00112 MOVWF PORTB ;Output Data
0023 038D 00113 DECF SCRNIDX,F ;Index - 1
0024 0B8C 00114 DECFSZ LPCNT,F ;Loop end ?
0025 281A 00115 GOTO SCRNLP ;No. Next line
0026 2814 00116 GOTO SCREEN ;Yes. Next screen
00117
00118 ;************ Begin Interruption Process **************
0027 008E 00119 INT MOVWF W_SAVE ;Save W register
0028 0803 00120 MOVF STATUS,W ;Read STATUS reg
0029 008F 00121 MOVWF S_SAVE ;Save STATUS reg
002A 190B 00122 BTFSC INTCON,T0IF ;Time out interruption ?
002B 2832 00123 GOTO TIMER_INT ;Jump to Timer process
002C 2805 00124 GOTO INIT ;Reset(Illegal interrupt)
00125
00126 ;************ END of Interruption Process **************
002D 080F 00127 INT_END MOVF S_SAVE,W ;Read saved STATUS reg
002E 0083 00128 MOVWF STATUS ;Recover STATUS reg
002F 0E8E 00129 SWAPF W_SAVE,F ;Read saved W register
0030 0E0E 00130 SWAPF W_SAVE,W ;Recover W register
0031 0009 00131 RETFIE
00132
00133 ;*********** Time-out interruption Process ************
0032 00134 TIMER_INT
0032 110B 00135 BCF INTCON,T0IF ;Clear timer int flag
0033 3000 00136 MOVLW H'00' ;Set timer value
0034 0081 00137 MOVWF TMR0 ;TMR0 = 0 (255 counts)
0035 0BA0 00138 DECFSZ TM_CNT,F ;Time over ?
0036 282D 00139 GOTO INT_END ;No. Retry
0037 300C 00140 MOVLW TM_ADJ ;Set time adjust value
0038 00A0 00141 MOVWF TM_CNT ;Save time adjust
00142
00143 ;************ Screen data shift Process ***************
0039 300F 00144 MOVLW D'15' ;Set loop count
003A 00A3 00145 MOVWF S_LOOP ;Save loop count
003B 3010 00146 MOVLW SCRNHD ;Set screen head adr
003C 00A4 00147 MOVWF S_INDEX ;Set screen adr
003D 0A24 00148 LOOP INCF S_INDEX,W ;Inclement index
003E 0084 00149 MOVWF FSR ;Set read addres
003F 0800 00150 MOVF INDF,W ;Read data
0040 00A5 00151 MOVWF S_WORK ;Save data
0041 0824 00152 MOVF S_INDEX,W ;Read index
0042 0084 00153 MOVWF FSR ;Set write address
0043 0825 00154 MOVF S_WORK,W ;Recover data
0044 0080 00155 MOVWF INDF ;Write data
0045 0AA4 00156 INCF S_INDEX,F ;Inclement index
MPASM 02.40 Released SIGN.ASM 6-3-2000 17:01:23 PAGE 4
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0046 0BA3 00157 DECFSZ S_LOOP,F ;All shifted ?
0047 283D 00158 GOTO LOOP ;No. Continue.
00159
00160 ;************** New data write Process ****************
0048 0824 00161 MOVF S_INDEX,W ;Read index
0049 0084 00162 MOVWF FSR ;Set write address
004A 0821 00163 MOVF E_ADR,W ;Read EEPROM address
004B 0089 00164 MOVWF EEADR ;Set EEPROM address
004C 1683 00165 BSF STATUS,RP0 ;Change to Bank1
004D 1408 00166 BSF EECON1,RD ;Start EEPROM reading
004E 1283 00167 BCF STATUS,RP0 ;Change to Bank0
004F 0808 00168 MOVF EEDATA,W ;Read EEPROM data
0050 0080 00169 MOVWF INDF ;Write new data
0051 0AA1 00170 INCF E_ADR,F ;Inclement data address
0052 0BA2 00171 DECFSZ E_CHECK,F ;End of EEPROM data ?
0053 282D 00172 GOTO INT_END ;No. Return
0054 01A1 00173 CLRF E_ADR ;Clear EEPROM data adr
0055 3020 00174 MOVLW E_SIZE ;Set EEPROM data size
0056 00A2 00175 MOVWF E_CHECK ;Save EEPROM end check
0057 282D 00176 GOTO INT_END ;Return
00177
00178 ;********************************************************
00179 ; END of signboard control processing
00180 ;********************************************************
00181
00182 END
MPASM 02.40 Released SIGN.ASM 6-3-2000 17:01:23 PAGE 5
SYMBOL TABLE
LABEL VALUE
C 00000000
DC 00000001
EEADR 00000009
EECON1 00000008
EECON2 00000009
EEDATA 00000008
EEIE 00000006
EEIF 00000004
E_ADR 00000021
E_CHECK 00000022
E_SIZE 00000020
F 00000001
FSR 00000004
GIE 00000007
INDF 00000000
INIT 00000005
INT 00000027
INTCON 0000000B
INTE 00000004
INTEDG 00000006
INTF 00000001
INT_END 0000002D
IRP 00000007
LOOP 0000003D
LPCNT 0000000C
NOT_PD 00000003
NOT_RBPU 00000007
NOT_TO 00000004
OPTION_REG 00000001
PCL 00000002
PCLATH 0000000A
PORTA 00000005
PORTB 00000006
PS0 00000000
PS1 00000001
PS2 00000002
PSA 00000003
RBIE 00000003
RBIF 00000000
RD 00000000
RP0 00000005
RP1 00000006
SCREEN 00000014
SCRNHD 00000010
SCRNIDX 0000000D
SCRNLP 0000001A
STATUS 00000003
S_INDEX 00000024
S_LOOP 00000023
S_SAVE 0000000F
S_WORK 00000025
T0CS 00000005
T0IE 00000005
MPASM 02.40 Released SIGN.ASM 6-3-2000 17:01:23 PAGE 6
SYMBOL TABLE
LABEL VALUE
T0IF 00000002
T0SE 00000004
TIMER_INT 00000032
TMR0 00000001
TM_ADJ 0000000C
TM_CNT 00000020
TRISA 00000005
TRISB 00000006
W 00000000
WR 00000001
WREN 00000002
WRERR 00000003
W_SAVE 0000000E
Z 00000002
_CP_OFF 00003FFF
_CP_ON 0000000F
_HS_OSC 00003FFE
_LP_OSC 00003FFC
_PWRTE_OFF 00003FFF
_PWRTE_ON 00003FF7
_RC_OSC 00003FFF
_WDT_OFF 00003FFB
_WDT_ON 00003FFF
_XT_OSC 00003FFD
__16F84A 00000001
MEMORY USAGE MAP ('X' = Used, '-' = Unused)
0000 : X---XXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0040 : XXXXXXXXXXXXXXXX XXXXXXXX-------- ---------------- ----------------
2000 : -------X-------- ---------------- ---------------- ----------------
2100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ---------------- ----------------
All other memory blocks unused.
Program Memory Words Used: 85
Program Memory Words Free: 939
Errors : 0
Warnings : 0 reported, 0 suppressed
Messages : 0 reported, 0 suppressed
|
|
sign_source.zip sign_hex.zip |