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 |