MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ; list p=12f683,b=4,n=0 ; declare processor, tabs, and lines/page 00002 00003 ;********************************************************************** 00004 ; Copyright (C) 2005,2006,2007 Dwayne Forsyth 00005 ; 00006 ; This program is free software; you can redistribute it and/or 00007 ; modify it under the terms of the GNU General Public License 00008 ; as published by the Free Software Foundation; either version 2 00009 ; of the License, or (at your option) any later version. 00010 ; 00011 ; This program is distributed in the hope that it will be useful, 00012 ; but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 ; GNU General Public License for more details. 00015 ; 00016 ; You should have received a copy of the GNU General Public License 00017 ; along with this program; if not, write to the 00018 ; 00019 ; Free Software Foundation, Inc. 00020 ; 51 Franklin Street, Fifth Floor 00021 ; Boston, MA 02110-1301, USA. 00022 ; 00023 ;********************************************************************** 00024 ; 00025 ; This is a merger of a number of Blinkie programs I created for different 00026 ; www.2DKits.com boards. The current goal of this code is to support all 00027 ; the 12F683 based boards, and then eventually adding of the 16F688 boards. 00028 ; 00029 ; 4RBG /w common anode (ufo and clear 5mm) .... Working 00030 ; 4RBG /w common Cathode (milk 5mm) ........... Working 00031 ; 6 BI /w bi-color LEDs. ...................... Working 00032 ; 6 BI /w mono LEDs. .......................... Working 00033 ; - want to add brightness patterns 00034 ; badge 6 bi-color plus 1 mono, no IR ......... Working 00035 ; - disable IR code? 00036 ; badge 7 LED /w mono LEDs, no IR ............. Working 00037 ; - want to update patterns 00038 ; - disable IR code? 00039 ; 19 LED Stick ................................ Working 00040 ; 00041 ; Dwayne Forsyth wrote the original code, Dwayne pulled a number of updates, 00042 ; code cleanup, and patterns from Dave Holle. 00043 ; 00044 ;********************************************************************** 00045 ; 00046 ; Filename: generic_683.asm 00047 ; Date: 04/05/2007 00048 ; 00049 ; Author: Dwayne Forsyth 00050 ; email: Dwayne@2DKits.com 00051 ; Company: www.2DKits.com 00052 ; 502 Rue Orleanais 00053 ; Deer Park, IL 60010 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 2 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00054 ; 00055 ; Help from: Dave Holle 00056 ; 7N204 Parkside Ave 00057 ; Itasca, IL 60143 00058 ; 00059 ;********************************************************************** 00060 00061 errorlevel -302 ; suppress banking messages 2007 30C4 00062 __CONFIG _CP_OFF & _CPD_OFF & _BOD_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _ FCMEN_OFF & _IESO_OFF 00063 00064 ; '__CONFIG' directive is used to embed configuration data within .asm file. 00065 ; The labels following the directive are located in the respective .inc file. 00066 ; See respective data sheet for additional information on configuration word. 00067 00068 00069 ;********************************* 00070 ; 4RBG /w common anode (ufo and clear 5mm) 00071 ;********************************* 00072 ;#define RGB4 00073 ;#define PATTERN1 00074 ;#define PATTERN2 00075 ;#define PATTERN3 00076 ;#define PATTERN4 00077 ;#define DISPLAY_1BIT_C 00078 ;#define DISPLAY_2BIT_C 00079 ;#define ENABLE_IR 00080 ;#include ; processor specific variable definitions 00081 ; LIST P=PIC12F683 00082 ;NUM_TAB equ d'14' ;highest pattern table number 00083 00084 ;********************************* 00085 ; 4RBG /w common Cathode (milk 5mm) 00086 ;********************************* 00087 ;#define RGB4 00088 ;#define Common_Cathode 00089 ;#define PATTERN1 00090 ;#define PATTERN2 00091 ;#define PATTERN3 00092 ;#define PATTERN4 00093 ;#define DISPLAY_1BIT_C 00094 ;#define DISPLAY_2BIT_C 00095 ;#define ENABLE_IR 00096 ;#include ; processor specific variable definitions 00097 ; LIST P=PIC12F683 00098 ; NUM_TAB equ d'14' ;highest pattern table number 00099 00100 ;********************************* 00101 ; 6 BI /w bi-color LEDs. 00102 ;********************************* 00103 #define BI6 00104 #define BIN2LED 00105 #define PATTERN1 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 3 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00106 #define PATTERN3 00107 #define DISPLAY_1BIT_C 00108 #define DISPLAY_2BIT_C 00109 #define ENABLE_IR 00110 #include ; processor specific variable definitions 00001 LIST 00002 ; P12F683.INC Standard Header File, Version 1.00 Microchip Technology, Inc. 00339 LIST 00111 LIST P=PIC12F683 Warning[207]: Found label after column 1. (NUM_TAB) 0000000E 00112 NUM_TAB equ d'14' ;highest pattern table number 00113 00114 ;********************************* 00115 ; 6 BI /w mono LEDs. 00116 ;********************************* 00117 ;#define BI6 00118 ;#define MONO 00119 ;#define FLIPBYTE 00120 ;#define PATTERN5 00121 ;#define PATTERN11 00122 ;#define DISPLAY_1BIT_A 00123 ;#define DISPLAY_2BIT_A 00124 ;#define ENABLE_IR 00125 ;#include ; processor specific variable definitions 00126 ; LIST P=PIC12F683 00127 ;NUM_TAB equ d'17' ;highest pattern table number 00128 00129 ;********************************* 00130 ; badge 6 bi-color plus 1 mono LEDs. 00131 ;********************************* 00132 ;#define BI6 00133 ;#define BIN2LED 00134 ;#define PATTERN10 00135 ;#define PATTERN3 00136 ;#define BADGE 00137 ;#define DISPLAY_1BIT_C 00138 ;#define DISPLAY_2BIT_C 00139 ;#include ; processor specific variable definitions 00140 ; LIST P=PIC12F683 00141 ;NUM_TAB equ d'14' ;highest pattern table number 00142 00143 ;********************************* 00144 ; badge 6 mono LEDs. 00145 ;********************************* 00146 ;#define BI6 00147 ;#define MONO 00148 ;#define BADGE 00149 ;#define PATTERN5 00150 ;#define PATTERN11 00151 ;#define FLIPBYTE 00152 ;#define DISPLAY_1BIT_A 00153 ;#define DISPLAY_2BIT_A 00154 ;#include ; processor specific variable definitions MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 4 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00155 ; LIST P=PIC12F683 00156 ;NUM_TAB equ d'19' ;highest pattern table number 00157 00158 ;********************************* 00159 ; 19 LED Stick 00160 ;********************************* 00161 ;#define S19 00162 ;#define PATTERN6 00163 ;#define PATTERN7 00164 ;#define PATTERN8 00165 ;#define FLIPBYTE 00166 ;#define DISPLAY_1BIT_D 00167 ;#define ENABLE_IR 00168 ;#include ; processor specific variable definitions 00169 ; LIST P=PIC12F683 00170 ;NUM_TAB equ d'23' ;highest pattern table number 00171 00172 ;********************************* 00173 ; 19 LED Circle ;; Not Working!! 00174 ;********************************* 00175 ;#define C19 00176 ;#define PATTERN9 00177 ;#define FLIPBYTE 00178 ;#define DEDICATED_BUTTON 00179 ;#define DISPLAY_1BIT_B 00180 ;#define ENABLE_IR 00181 ;#include ; processor specific variable definitions 00182 ; LIST P=PIC16F688 00183 ;NUM_TAB equ d'21' ;highest pattern table number 00184 00185 00186 ;********************************************************************** 00187 ; Macros 00188 ;********************************************************************** 00189 ; bank select macros 00190 #define setbank0 bcf STATUS,RP0 ; select bank 0 00191 #define setbank1 bsf STATUS,RP0 ; select bank 1 00192 00000021 00193 mem = 21 00194 var macro name 00195 name equ mem 00196 mem = mem + 1 00197 if (mem > 0xef) 00198 error 'Too much var space used' 00199 endm 00200 00201 dupvar macro name, name2 00202 name equ name2 00203 endm 00204 000000F0 00205 mem2 = 0xF0 00206 var_all_bank macro name 00207 name equ mem2 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 5 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00208 mem2 = mem2 + 1 00209 if (mem2 > 0xFf) 00210 error 'Too much var space used' 00211 endm 00212 00000001 00213 patternc = 1 00214 start_pattern macro typem, delaym 00215 table#v(patternc) 00216 if (typem == 1) || (typem == 6) 00217 dt typem,delaym,(endpat#v(patternc)-$)/3 ;tbltype1,speed,length 00218 else 00219 if (typem == 3) || (typem == 0x0b) 00220 dt typem,delaym,(endpat#v(patternc)-$)/2 ;tbltype1,speed,length 00221 else 00222 if (typem == 9) 00223 dt typem,delaym,(endpat#v(patternc)-$)/5 ;tbltype1,speed,length 00224 else 00225 if (typem == 0x0a) 00226 dt typem,delaym,(endpat#v(patternc)-$)/4 ;tbltype1,speed,length 00227 else 00228 dt typem,delaym,(endpat#v(patternc)-$-1) 00229 endif 00230 endif 00231 endif 00232 endif 00233 endm 00234 00235 end_pattern macro 00236 endpat#v(patternc) 00237 patternc = patternc + 1 00238 endm 00239 00240 mult_nop macro nup_count 00241 local i = nup_count 00242 while i > 3 00243 call Lcontinue ;4 cycles 00244 i -= 4 00245 endw 00246 while i > 1 00247 goto $+1 ;2 cycles 00248 i -= 2 00249 endw 00250 if i > 0 00251 nop ;1 cycle 00252 endif 00253 endm 00254 00255 LedOut macro word,reg_dir,port 00256 movfw TMR0 00257 subwf word,w 00258 btfss STATUS,C 00259 bsf reg_dir, port 00260 endm MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 6 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00261 00262 state_tbl macro num,zero,one,flag 00263 Lstate#v(num) 00264 if (flag == 0) 00265 clrf button 00266 movlw 0x30 00267 movwf butcount 00268 endif 00269 if (flag == 1) 00270 bsf button,0 00271 endif 00272 00273 btfsc IR_in,0 00274 goto Lstate#v(num)a 00275 00276 movlw zero 00277 movwf instate 00278 00279 goto Lcontinue 00280 00281 Lstate#v(num)a 00282 movlw one 00283 movwf instate 00284 00285 goto Lcontinue 00286 endm 00287 00288 state2_tbl macro num, name, offset 00289 Lstate#v(num) 00290 ; save the 1st half of word 00291 movf IR_in,w ; save 1st half 00292 movwf IR_lhalf 00293 incf instate,f 00294 00295 goto Lcontinue 00296 00297 Lstate#v(num+1) 00298 ; save the 2nd half of word 00299 ; check for protocal error should get 01 or 10 00300 movf IR_lhalf,w 00301 xorwf IR_in,w 00302 btfss STATUS,Z 00303 goto Lstate#v(num+1)a 00304 clrf instate ; error state = zero 00305 00306 goto Lcontinue 00307 00308 ; set the correct bit in output vars. 00309 Lstate#v(num+1)a 00310 btfsc IR_in,0 00311 bcf name,offset 00312 btfss IR_in,0 00313 bsf name,offset MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 7 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00314 00315 incf instate,f 00316 goto Lcontinue 00317 endm 00318 00319 entry macro a0,a1,a2 00320 dt a0,a1,a2 00321 endm 00322 00323 tbltype1 macro speed,length 00324 if (length > 2) && (length < d'256') 00325 dt 0x01,speed,length 00326 else 00327 error 'pattern length must be > 2 and < 256' 00328 endif 00329 endm 00330 00331 make_mtab macro numtab 00332 local i = 0 00333 while i <= numtab 00334 dt HIGH table#v(i), LOW table#v(i) 00335 i += 1 00336 endw 00337 endm 00338 00339 make_state_jump_table macro max_state 00340 local i = 0 00341 while i <= max_state 00342 dt HIGH Lstate#v(i), LOW Lstate#v(i) 00343 i += 1 00344 endw 00345 endm 00346 00347 00348 #ifdef __12F683 00000005 00349 PORTA EQU GPIO 00000085 00350 TRISA EQU TRISIO 00000007 00351 NOT_RAPU EQU NOT_GPPU 00352 #endif 00353 00354 00355 ; ++-------- A7 A6 unimplemented (0) 00356 ; || +------ A4 IR LED output (0) 00357 ; || |+----- A3 detector/button input (1) 00358 ; || || 00359 ; b'00101111' ;set LED matrix pins to input (tri-stated) 00360 ; | ||| 00361 ; +--+++-- LED matrix on A5 A2 A1 A0 (1) 00362 00363 ;********************************************************************** 0000 00364 ORG 0x000 ; processor reset vector 00365 ;********************************************************************** 0000 2C41 00366 goto main ; go to beginning of program MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 8 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00367 00368 ;********************************************************************** 0004 00369 ORG 0x004 ; interrupt vector location 00370 ;********************************************************************** 00371 var_all_bank w_temp ; variable used for context saving 000000F0 M w_temp equ mem2 000000F1 M mem2 = mem2 + 1 M if (mem2 > 0xFf) M error 'Too much var space used' 00372 var_all_bank status_temp ; variable used for context saving 000000F1 M status_temp equ mem2 000000F2 M mem2 = mem2 + 1 M if (mem2 > 0xFf) M error 'Too much var space used' 00373 var_all_bank intcon_save ; variable used for context saving 000000F2 M intcon_save equ mem2 000000F3 M mem2 = mem2 + 1 M if (mem2 > 0xFf) M error 'Too much var space used' 00374 var_all_bank pclath_temp 000000F3 M pclath_temp equ mem2 000000F4 M mem2 = mem2 + 1 M if (mem2 > 0xFf) M error 'Too much var space used' 00375 00376 var nextf ; flags for timing loops 00000021 M nextf equ mem 00000022 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 00377 ; bit 0 is one display cycle (890 usec) 00378 ; bit 1 is about 1 minute 00379 var dcycle ; stobe counter [0-3] 00000022 M dcycle equ mem 00000023 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 00380 var count1 ; lower bit counter 00000023 M count1 equ mem 00000024 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 00381 var count2 ; higher bit counter. 00000024 M count2 equ mem 00000025 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 00382 00383 #ifdef __12F683 0004 00F0 00384 movwf w_temp ; copy W to TEMP register 0005 0E03 00385 swapf STATUS,w ; Swap status to be saved into W 0006 0183 00386 clrf STATUS ; Bank 0 0007 00F1 00387 movwf status_temp ; save off contents of PCLATH register MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 9 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00388 #else 00389 movwf w_temp ; save off current W register contents 00390 movf STATUS,w ; move status register into W register 00391 movwf status_temp ; save off contents of STATUS register 00392 movf PCLATH,w ; move pclath register into W register 00393 movwf pclath_temp ; save off contents of PCLATH register 00394 #endif 00395 ; 00396 ; set tick interupt to 889ms for IR RC5 protocal 1/2 digit. 00397 ; an Interupt every 889us /w 8mhz internal osc 00398 ; 00399 00400 #define TICK_VALUE D'35' 00401 0008 3023 00402 movlw TICK_VALUE 0009 0081 00403 movwf TMR0 00404 ; 00405 ; increment the stobe and duration counters 00406 ; 00407 000A 0AA2 00408 incf dcycle,f 00409 #ifdef S19 00410 movlw 0x05 00411 #else 00412 #ifdef C19 00413 movlw 0x07 00414 #else 000B 3004 00415 movlw 0x04 00416 #endif 00417 #endif 000C 0222 00418 subwf dcycle,w 000D 1803 00419 btfsc STATUS,C 000E 01A2 00420 clrf dcycle 00421 000F 1421 00422 bsf nextf,0 00423 0010 0FA3 00424 incfsz count1,f 0011 2815 00425 goto skip1 00426 0012 0FA4 00427 incfsz count2,f 0013 2815 00428 goto skip1 00429 0014 14A1 00430 bsf nextf,1 00431 0015 00432 skip1 00433 0015 084A 00434 movf scount,w ; F22 0016 3E00 00435 addlw 0 ; F23 0017 1903 00436 btfsc STATUS,Z ; F24 0018 282E 00437 goto send_nothing ; F25 00438 0019 1C3B 00439 btfss tx_1,0 ; F26 001A 282C 00440 goto send_zero ; F27 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 10 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00441 00442 ;-------------------------------------------------------------------------------------- 001B 00443 send_one ; we are slaming the 36K IR siginal, its like a busy wait! 00444 ;-------------------------------------------------------------------------------------- 00445 var repeat 00000025 M repeat equ mem 00000026 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 00446 00447 #ifdef S19 00448 setbank1 00449 movlw b'00010010' ;set A0 & A5 led to outpu 00450 movwf TRISA 00451 setbank0 00452 #define IRBIT 0 00453 #else 00454 #define IRBIT 4 00455 #endif 001B 1605 00456 bsf PORTA,IRBIT ; A01 00457 001C 222E 00458 call get_next_tx_bit ; 2 + 11 cycles A04-A16 00459 ; mult_nop d'9' ; A17-A25 001D 3001 00460 movlw 01h 001E 2238 00461 call qdelay ; 6 + (1 * 3) = 9 ; A17-A25 001F 0000 00462 nop 00463 0020 301E 00464 movlw 0x1E ; C26 (23) 0021 00A5 00465 movwf repeat ; C27 0022 00466 repeat_loop 0022 1205 00467 bcf PORTA,IRBIT ; D01 00468 00469 ; mult_nop d'26' ; D02-D27 0023 3007 00470 movlw 07h 0024 2238 00471 call qdelay ; 6 + (7 * 3) = 27 ; D02-D27 00472 0025 1605 00473 bsf PORTA,IRBIT ; E01 (27) 00474 00475 ; mult_nop d'23' ; E02-E24 0026 3006 00476 movlw 06h ; 6+(6 * 3) = 22 ; E02-E24 0027 2238 00477 call qdelay 00478 0028 0BA5 00479 decfsz repeat,f ; E25 (24) 0029 2822 00480 goto repeat_loop ; E26/E27 00481 002A 1205 00482 bcf PORTA,IRBIT 002B 2842 00483 goto exit_tx 00484 00485 ;-------------------------------------------------------------------------------------- 002C 00486 send_zero ; we are going to release all the CPU time to the main line for display. 00487 ;-------------------------------------------------------------------------------------- 00488 002C 222E 00489 call get_next_tx_bit ; 2 + 11 cycles A04-A16 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 11 LOC OBJECT CODE LINE SOURCE TEXT VALUE 002D 282F 00490 goto drive_main_leds 00491 00492 ;-------------------------------------------------------------------------------------- 002E 00493 send_nothing ; Drive the main LEDs. 00494 ;-------------------------------------------------------------------------------------- 00495 002E 2223 00496 call read_ir_in 00497 #ifdef DEDICATED_BUTTON 00498 call read_button_in 00499 #endif 00500 ; goto drive_main_leds 00501 00502 ;-------------------------------------------------------------------------------------- 002F 00503 drive_main_leds ; Drive the main LEDs. 00504 ;-------------------------------------------------------------------------------------- 00505 00506 var fcount 00000026 M fcount equ mem 00000027 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 00507 #ifndef S19 00508 #ifndef C19 00509 var Ar_reg 00000027 M Ar_reg equ mem 00000028 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 00510 var Ag_reg 00000028 M Ag_reg equ mem 00000029 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 00511 var Ab_reg 00000029 M Ab_reg equ mem 0000002A M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 00512 var Br_reg 0000002A M Br_reg equ mem 0000002B M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 00513 var Bg_reg 0000002B M Bg_reg equ mem 0000002C M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 00514 var Bb_reg 0000002C M Bb_reg equ mem 0000002D M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 12 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00515 var Cr_reg 0000002D M Cr_reg equ mem 0000002E M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 00516 var Cg_reg 0000002E M Cg_reg equ mem 0000002F M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 00517 var Cb_reg 0000002F M Cb_reg equ mem 00000030 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 00518 var Dr_reg 00000030 M Dr_reg equ mem 00000031 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 00519 var Dg_reg 00000031 M Dg_reg equ mem 00000032 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 00520 var Db_reg 00000032 M Db_reg equ mem 00000033 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 00521 #endif 00522 #endif 00523 #ifdef BADGE 00524 var Center_reg 00525 #endif 00526 #ifdef S19 00527 var A0_A1_reg 00528 var A0_A2_reg 00529 var A0_A4_reg 00530 var A0_A5_reg 00531 var A1_A0_reg 00532 var A1_A2_reg 00533 var A1_A4_reg 00534 var A1_A5_reg 00535 var A2_A0_reg 00536 var A2_A1_reg 00537 var A2_A4_reg 00538 var A2_A5_reg 00539 var A4_A0_reg 00540 var A4_A1_reg 00541 var A4_A2_reg 00542 var A4_A5_reg 00543 var A5_A0_reg MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 13 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00544 var A5_A1_reg 00545 var A5_A2_reg 00546 var A5_A4_reg 00547 #endif 00548 #ifdef C19 00549 var A0_A1_reg 00550 var A0_A2_reg 00551 var A0_C0_reg 00552 var A0_C1_reg 00553 var A0_C2_reg 00554 var A0_C4_reg 00555 var A1_A0_reg 00556 var A1_A2_reg 00557 var A1_C0_reg 00558 var A1_C1_reg 00559 var A1_C2_reg 00560 var A1_C4_reg 00561 var A2_A0_reg 00562 var A2_A1_reg 00563 var A2_C0_reg 00564 var A2_C1_reg 00565 var A2_C2_reg 00566 var A2_C4_reg 00567 var C0_A0_reg 00568 var C0_A1_reg 00569 var C0_A2_reg 00570 var C0_C1_reg 00571 var C0_C2_reg 00572 var C0_C4_reg 00573 ; var C1_A0_reg 00574 ; var C1_A1_reg 00575 ; var C1_A2_reg 00576 ; var C1_C0_reg 00577 ; var C1_C2_reg 00578 ; var C1_C4_reg 00579 ; var C2_A0_reg 00580 ; var C2_A1_reg 00581 ; var C2_A2_reg 00582 ; var C2_C0_reg 00583 ; var C2_C1_reg 00584 ; var C2_C4_reg 00585 ; var C4_A0_reg 00586 ; var C4_A1_reg 00587 ; var C4_A2_reg 00588 ; var C4_C0_reg 00589 ; var C4_C1_reg 00590 ; var C4_C2_reg 00591 #endif 00592 var_all_bank Ax_dir 000000F4 M Ax_dir equ mem2 000000F5 M mem2 = mem2 + 1 M if (mem2 > 0xFf) M error 'Too much var space used' MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 14 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00593 #ifdef C19 00594 var_all_bank Cx_dir 00595 #endif 00596 00597 ; 00598 ; This is the number of times the display logic should cycle before exiting. It's been hand timed from t he 00599 ; start of the interupt to the end to be around 800usec. This leaves 90 usec for the main loop. 00600 ; The 19 stick has an extra display line strobe cycle. 00601 ; 00602 #ifdef S19 00603 movlw 0x30 00604 #else 00605 #ifdef C19 00606 movlw 0x21 00607 #else 002F 303A 00608 movlw 0x3a 00609 #endif 00610 #endif 00611 0030 00A6 00612 movwf fcount 00613 0031 3008 00614 movlw b'00001000' ;set LED matrix pins to input (tri-stated) 0032 00F4 00615 movwf Ax_dir 00616 #ifdef C19 00617 clrf Cx_dir ;set LED matrix pins to input (tri-stated) 00618 #endif 00619 0033 0822 00620 movf dcycle,w ; testing for 0 0034 1903 00621 btfsc STATUS,Z 0035 2049 00622 call display_cycle0 00623 0036 3001 00624 movlw 0x01 ; testing for 1 0037 0222 00625 subwf dcycle,w 0038 1903 00626 btfsc STATUS,Z 0039 2055 00627 call display_cycle1 00628 003A 3002 00629 movlw 0x02 ; testing for 2 003B 0222 00630 subwf dcycle,w 003C 1903 00631 btfsc STATUS,Z 003D 2061 00632 call display_cycle2 00633 003E 3003 00634 movlw 0x03 ; testing for 3 003F 0222 00635 subwf dcycle,w 0040 1903 00636 btfsc STATUS,Z 0041 206D 00637 call display_cycle3 00638 00639 #ifdef S19 00640 movlw 0x04 ; testing for 4 00641 subwf dcycle,w 00642 btfsc STATUS,Z 00643 call display_cycle4 00644 #endif MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 15 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00645 #ifdef C19 00646 movlw 0x04 ; testing for 4 00647 subwf dcycle,w 00648 btfsc STATUS,Z 00649 call display_cycle4 00650 00651 movlw 0x05 ; testing for 5 00652 subwf dcycle,w 00653 btfsc STATUS,Z 00654 call display_cycle5 00655 00656 movlw 0x06 ; testing for 6 00657 subwf dcycle,w 00658 btfsc STATUS,Z 00659 call display_cycle6 00660 00661 #endif 00662 00663 ;-------------------------------------------------------------------------------------- 0042 00664 exit_tx 00665 ;-------------------------------------------------------------------------------------- 00666 0042 0185 00667 clrf PORTA ;DDF debug hack ; turn all the LED off 00668 00669 ; clear timer0 interupt 0043 110B 00670 bcf INTCON,T0IF 00671 00672 ; restore state, return form interupt 00673 0044 00674 exit_int 00675 #ifdef __12F683 0044 0E71 00676 swapf status_temp,w 0045 0083 00677 movwf STATUS 0046 0EF0 00678 swapf w_temp,f 0047 0E70 00679 swapf w_temp,w 00680 #else 00681 movf pclath_temp,w ; retrieve copy of PCLATH register 00682 movwf PCLATH ; restore pre-isr PCLATH register contents 00683 movf status_temp,w ; retrieve copy of STATUS register 00684 movwf STATUS ; restore pre-isr STATUS register contents 00685 swapf w_temp,f 00686 swapf w_temp,w ; restore pre-isr W register content 00687 #endif 0048 0009 00688 retfie ; return from interrupt 00689 00690 ;-------------------------------------------------------------------------------------- 0049 00691 display_cycle0 00692 ;-------------------------------------------------------------------------------------- 00693 0049 2079 00694 call strobe_a0 004A 0BA6 00695 decfsz fcount,f 004B 2849 00696 goto display_cycle0 00697 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 16 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00698 004C 20C5 00699 call get_state_tbl_hi_address 004D 2079 00700 call strobe_a0 004E 20CB 00701 call get_state_tbl_low_address 004F 2079 00702 call strobe_a0 0050 20D9 00703 call go_state_table 0051 2079 00704 call strobe_a0 0052 2227 00705 call set_max_state 0053 2079 00706 call strobe_a0 00707 0054 0008 00708 return 00709 00710 ;-------------------------------------------------------------------------------------- 0055 00711 display_cycle1 00712 ;-------------------------------------------------------------------------------------- 00713 0055 208C 00714 call strobe_a1 0056 0BA6 00715 decfsz fcount,f 0057 2855 00716 goto display_cycle1 00717 0058 20C5 00718 call get_state_tbl_hi_address 0059 208C 00719 call strobe_a1 005A 20CB 00720 call get_state_tbl_low_address 005B 208C 00721 call strobe_a1 005C 20D9 00722 call go_state_table 005D 208C 00723 call strobe_a1 005E 2227 00724 call set_max_state 005F 208C 00725 call strobe_a1 00726 0060 0008 00727 return 00728 00729 ;-------------------------------------------------------------------------------------- 0061 00730 display_cycle2 00731 ;-------------------------------------------------------------------------------------- 00732 0061 209F 00733 call strobe_a2 0062 0BA6 00734 decfsz fcount,f 0063 2861 00735 goto display_cycle2 00736 0064 20C5 00737 call get_state_tbl_hi_address 0065 209F 00738 call strobe_a2 0066 20CB 00739 call get_state_tbl_low_address 0067 209F 00740 call strobe_a2 0068 20D9 00741 call go_state_table 0069 209F 00742 call strobe_a2 006A 2227 00743 call set_max_state 006B 209F 00744 call strobe_a2 00745 006C 0008 00746 return 00747 00748 ;-------------------------------------------------------------------------------------- 006D 00749 display_cycle3 00750 ;-------------------------------------------------------------------------------------- MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 17 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00751 00752 #ifndef C19 006D 20B2 00753 call strobe_a5 006E 0BA6 00754 decfsz fcount,f 006F 286D 00755 goto display_cycle3 00756 0070 20C5 00757 call get_state_tbl_hi_address 0071 20B2 00758 call strobe_a5 0072 20CB 00759 call get_state_tbl_low_address 0073 20B2 00760 call strobe_a5 0074 20D9 00761 call go_state_table 0075 20B2 00762 call strobe_a5 0076 2227 00763 call set_max_state 0077 20B2 00764 call strobe_a5 00765 0078 0008 00766 return 00767 #else 00768 call strobe_c0 00769 decfsz fcount,f 00770 goto display_cycle3 00771 00772 call get_state_tbl_hi_address 00773 call strobe_c0 00774 call get_state_tbl_low_address 00775 call strobe_c0 00776 call go_state_table 00777 call strobe_c0 00778 call set_max_state 00779 call strobe_c0 00780 00781 return 00782 #endif 00783 00784 #ifdef S19 00785 ;-------------------------------------------------------------------------------------- 00786 display_cycle4 00787 ;-------------------------------------------------------------------------------------- 00788 00789 call strobe_a4 00790 decfsz fcount,f 00791 goto display_cycle4 00792 00793 call get_state_tbl_hi_address 00794 call strobe_a4 00795 call get_state_tbl_low_address 00796 call strobe_a4 00797 call go_state_table 00798 call strobe_a4 00799 call set_max_state 00800 call strobe_a4 00801 00802 return 00803 #endif MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 18 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00804 #ifdef C19 00805 ;-------------------------------------------------------------------------------------- 00806 display_cycle4 00807 ;-------------------------------------------------------------------------------------- 00808 00809 call strobe_c1 00810 decfsz fcount,f 00811 goto display_cycle4 00812 00813 call get_state_tbl_hi_address 00814 call strobe_c1 00815 call get_state_tbl_low_address 00816 call strobe_c1 00817 call go_state_table 00818 call strobe_c1 00819 call set_max_state 00820 call strobe_c1 00821 00822 return 00823 00824 ;-------------------------------------------------------------------------------------- 00825 display_cycle5 00826 ;-------------------------------------------------------------------------------------- 00827 00828 call strobe_c2 00829 decfsz fcount,f 00830 goto display_cycle5 00831 00832 call get_state_tbl_hi_address 00833 call strobe_c2 00834 call get_state_tbl_low_address 00835 call strobe_c2 00836 call go_state_table 00837 call strobe_c2 00838 call set_max_state 00839 call strobe_c2 00840 00841 return 00842 00843 ;-------------------------------------------------------------------------------------- 00844 display_cycle6 00845 ;-------------------------------------------------------------------------------------- 00846 00847 call strobe_c4 00848 decfsz fcount,f 00849 goto display_cycle6 00850 00851 call get_state_tbl_hi_address 00852 call strobe_c4 00853 call get_state_tbl_low_address 00854 call strobe_c4 00855 call go_state_table 00856 call strobe_c4 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 19 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00857 call set_max_state 00858 call strobe_c4 00859 00860 return 00861 #endif 00862 00863 ;-------------------------------------------------------------------------------------- 0079 00864 strobe_a0 00865 ;-------------------------------------------------------------------------------------- 00866 #ifdef RGB4 00867 #ifdef Common_Cathode 00868 LedOut Dr_reg,Ax_dir,1 ;LED Dr A0-A1 00869 LedOut Dg_reg,Ax_dir,2 ;LED Dg A0-A2 00870 LedOut Db_reg,Ax_dir,5 ;LED Db A0-A5 00871 #else 00872 LedOut Ab_reg,Ax_dir,1 ;LED Ab A0-A1 00873 LedOut Bg_reg,Ax_dir,2 ;LED Bg A0-A2 00874 LedOut Cr_reg,Ax_dir,5 ;LED Cr A0-A5 00875 #endif 00876 #endif 00877 #ifdef BI6 00878 LedOut Ab_reg,Ax_dir,1 ;LED Dr A0-A1 0079 0801 M movfw TMR0 007A 0229 M subwf Ab_reg,w 007B 1C03 M btfss STATUS,C 007C 14F4 M bsf Ax_dir, 1 00879 LedOut Cr_reg,Ax_dir,2 ;LED Dg A0-A2 007D 0801 M movfw TMR0 007E 022D M subwf Cr_reg,w 007F 1C03 M btfss STATUS,C 0080 1574 M bsf Ax_dir, 2 00880 LedOut Db_reg,Ax_dir,5 ;LED Db A0-A5 0081 0801 M movfw TMR0 0082 0232 M subwf Db_reg,w 0083 1C03 M btfss STATUS,C 0084 16F4 M bsf Ax_dir, 5 00881 #endif 00882 #ifdef S19 00883 LedOut A0_A1_reg,Ax_dir,1 ;LED A0-A1 00884 LedOut A0_A2_reg,Ax_dir,2 ;LED A0-A2 00885 LedOut A0_A4_reg,Ax_dir,4 ;LED A0-A4 00886 LedOut A0_A5_reg,Ax_dir,5 ;LED A0-A5 00887 #endif 00888 00889 #ifdef C19 00890 LedOut A0_A1_reg,Ax_dir,1 ;LED A0-A1 00891 LedOut A0_A2_reg,Ax_dir,2 ;LED A0-A2 00892 LedOut A0_C0_reg,Cx_dir,0 ;LED A0-C0 00893 LedOut A0_C1_reg,Cx_dir,1 ;LED A0-C1 00894 LedOut A0_C2_reg,Cx_dir,2 ;LED A0-C2 00895 LedOut A0_C4_reg,Cx_dir,4 ;LED A0-C4 00896 #endif 00897 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 20 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0085 1683 00898 setbank1 0086 0874 00899 movf Ax_dir,w ;set portA direction 0087 0085 00900 movwf TRISA 00901 #ifdef C19 00902 movf Cx_dir,w ;set portA direction 00903 movwf TRISC 00904 #endif 0088 1283 00905 setbank0 00906 0089 3001 00907 movlw b'00000001' 008A 0085 00908 movwf PORTA 00909 #ifdef C19 00910 movlw b'00000000' 00911 movwf PORTC 00912 #endif 008B 0008 00913 return 00914 00915 ;-------------------------------------------------------------------------------------- 008C 00916 strobe_a1 00917 ;-------------------------------------------------------------------------------------- 00918 #ifdef RGB4 00919 #ifdef Common_Cathode 00920 LedOut Ab_reg,Ax_dir,0 ;LED Ab A1-A0 00921 LedOut Ar_reg,Ax_dir,2 ;LED Ar A1-A2 00922 LedOut Ag_reg,Ax_dir,5 ;LED Ag A1-A5 00923 #else 00924 LedOut Dr_reg,Ax_dir,0 ;LED Dr A1-A0 00925 LedOut Bb_reg,Ax_dir,2 ;LED Bb A1-A2 00926 LedOut Cg_reg,Ax_dir,5 ;LED Cg A1-A5 00927 #endif 00928 #endif 00929 #ifdef BI6 00930 LedOut Bb_reg,Ax_dir,0 ;LED Dr A1-A0 008C 0801 M movfw TMR0 008D 022C M subwf Bb_reg,w 008E 1C03 M btfss STATUS,C 008F 1474 M bsf Ax_dir, 0 00931 LedOut Ag_reg,Ax_dir,2 ;LED Dg A1-A2 0090 0801 M movfw TMR0 0091 0228 M subwf Ag_reg,w 0092 1C03 M btfss STATUS,C 0093 1574 M bsf Ax_dir, 2 00932 LedOut Ar_reg,Ax_dir,5 ;LED Db A1-A5 0094 0801 M movfw TMR0 0095 0227 M subwf Ar_reg,w 0096 1C03 M btfss STATUS,C 0097 16F4 M bsf Ax_dir, 5 00933 #endif 00934 #ifdef S19 00935 LedOut A1_A0_reg,Ax_dir,0 ;LED A1-A0 00936 LedOut A1_A2_reg,Ax_dir,2 ;LED A1-A2 00937 LedOut A1_A4_reg,Ax_dir,4 ;LED A1-A4 00938 LedOut A1_A5_reg,Ax_dir,5 ;LED A1-A5 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00939 #endif 00940 #ifdef C19 00941 LedOut A1_A0_reg,Ax_dir,0 ;LED A1-A0 00942 LedOut A1_A2_reg,Ax_dir,2 ;LED A1-A2 00943 LedOut A1_C0_reg,Cx_dir,0 ;LED A1-C0 00944 LedOut A1_C1_reg,Cx_dir,1 ;LED A1-C1 00945 LedOut A1_C2_reg,Cx_dir,2 ;LED A1-C2 00946 LedOut A1_C4_reg,Cx_dir,4 ;LED A1-C4 00947 #endif 00948 0098 1683 00949 setbank1 0099 0874 00950 movf Ax_dir,w ;set portA direction 009A 0085 00951 movwf TRISA 00952 #ifdef C19 00953 movf Cx_dir,w ;set portA direction 00954 movwf TRISC 00955 #endif 009B 1283 00956 setbank0 009C 3002 00957 movlw b'00000010' 009D 0085 00958 movwf PORTA 00959 #ifdef C19 00960 movlw b'00000000' 00961 movwf PORTC 00962 #endif 009E 0008 00963 return 00964 00965 ;-------------------------------------------------------------------------------------- 009F 00966 strobe_a2 00967 ;-------------------------------------------------------------------------------------- 00968 #ifdef RGB4 00969 #ifdef Common_Cathode 00970 LedOut Bg_reg,Ax_dir,0 ;LED Bg A2-A0 00971 LedOut Bb_reg,Ax_dir,1 ;LED Bb A2-A1 00972 LedOut Br_reg,Ax_dir,5 ;LED Br A2-A5 00973 #else 00974 LedOut Dg_reg,Ax_dir,0 ;LED Dg A2-A0 00975 LedOut Ar_reg,Ax_dir,1 ;LED Ar A2-A1 00976 LedOut Cb_reg,Ax_dir,5 ;LED Cb A2-A5 00977 #endif 00978 #endif 00979 #ifdef BI6 00980 LedOut Dr_reg,Ax_dir,0 ;LED Dr A2-A0 009F 0801 M movfw TMR0 00A0 0230 M subwf Dr_reg,w 00A1 1C03 M btfss STATUS,C 00A2 1474 M bsf Ax_dir, 0 00981 LedOut Bg_reg,Ax_dir,1 ;LED Dg A2-A1 00A3 0801 M movfw TMR0 00A4 022B M subwf Bg_reg,w 00A5 1C03 M btfss STATUS,C 00A6 14F4 M bsf Ax_dir, 1 00982 LedOut Dg_reg,Ax_dir,5 ;LED Db A2-A5 00A7 0801 M movfw TMR0 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 22 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00A8 0231 M subwf Dg_reg,w 00A9 1C03 M btfss STATUS,C 00AA 16F4 M bsf Ax_dir, 5 00983 #endif 00984 #ifdef S19 00985 LedOut A2_A0_reg,Ax_dir,0 ;LED A2-A0 00986 LedOut A2_A1_reg,Ax_dir,1 ;LED A2-A1 00987 LedOut A2_A4_reg,Ax_dir,4 ;LED A2-A4 00988 LedOut A2_A5_reg,Ax_dir,5 ;LED A2-A5 00989 #endif 00990 #ifdef C19 00991 LedOut A2_A0_reg,Ax_dir,0 ;LED A2-A0 00992 LedOut A2_A1_reg,Ax_dir,1 ;LED A2-A1 00993 LedOut A2_C0_reg,Cx_dir,0 ;LED A2-C0 00994 LedOut A2_C1_reg,Cx_dir,1 ;LED A2-C1 00995 LedOut A2_C2_reg,Cx_dir,2 ;LED A2-C2 00996 LedOut A2_C4_reg,Cx_dir,4 ;LED A2-C4 00997 #endif 00998 00999 00AB 1683 01000 setbank1 00AC 0874 01001 movf Ax_dir,w ;set portA direction 00AD 0085 01002 movwf TRISA 01003 #ifdef C19 01004 movf Cx_dir,w ;set portA direction 01005 movwf TRISC 01006 #endif 00AE 1283 01007 setbank0 01008 00AF 3004 01009 movlw b'00000100' 00B0 0085 01010 movwf PORTA 01011 #ifdef C19 01012 movlw b'00000000' 01013 movwf PORTC 01014 #endif 00B1 0008 01015 return 01016 01017 ;-------------------------------------------------------------------------------------- 00B2 01018 strobe_c0 01019 ;-------------------------------------------------------------------------------------- 01020 01021 #ifdef C19 01022 LedOut C0_A0_reg,Ax_dir,0 ;LED C0-A0 01023 LedOut C0_A1_reg,Ax_dir,1 ;LED C0-A1 01024 LedOut C0_A2_reg,Ax_dir,2 ;LED C0-A4 01025 LedOut C0_C1_reg,Cx_dir,1 ;LED C0-C1 01026 LedOut C0_C2_reg,Cx_dir,2 ;LED C0-C2 01027 LedOut C0_C4_reg,Cx_dir,4 ;LED C0-C4 01028 01029 setbank1 01030 movf Ax_dir,w ;set portA direction 01031 movwf TRISA 01032 movf Cx_dir,w ;set portA direction MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 23 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01033 movwf TRISC 01034 setbank0 01035 01036 movlw b'00000000' 01037 movwf PORTA 01038 01039 movlw b'00000001' 01040 movwf PORTC 01041 01042 return 01043 #endif 01044 ;-------------------------------------------------------------------------------------- 00B2 01045 strobe_c1 01046 ;-------------------------------------------------------------------------------------- 01047 01048 #ifdef C19 01049 #ifdef DDF 01050 LedOut C1_A0_reg,Ax_dir,0 ;LED C1-A0 01051 LedOut C1_A1_reg,Ax_dir,1 ;LED C1-A1 01052 LedOut C1_A2_reg,Ax_dir,2 ;LED C1-A4 01053 LedOut C1_C0_reg,Cx_dir,0 ;LED C1-C0 01054 LedOut C1_C2_reg,Cx_dir,2 ;LED C1-C2 01055 LedOut C1_C4_reg,Cx_dir,4 ;LED C1-C4 01056 01057 setbank1 01058 movf Ax_dir,w ;set portA direction 01059 movwf TRISA 01060 movf Cx_dir,w ;set portA direction 01061 movwf TRISC 01062 setbank0 01063 01064 movlw b'00000000' 01065 movwf PORTA 01066 01067 movlw b'00000010' 01068 movwf PORTC 01069 01070 return 01071 #endif 01072 #endif 01073 01074 ;-------------------------------------------------------------------------------------- 00B2 01075 strobe_c2 01076 ;-------------------------------------------------------------------------------------- 01077 01078 #ifdef C19 01079 #ifdef DDF 01080 LedOut C2_A0_reg,Ax_dir,0 ;LED C2-A0 01081 LedOut C2_A1_reg,Ax_dir,1 ;LED C2-A1 01082 LedOut C2_A2_reg,Ax_dir,2 ;LED C2-A4 01083 LedOut C2_C0_reg,Cx_dir,0 ;LED C2-C0 01084 LedOut C2_C1_reg,Cx_dir,1 ;LED C2-C1 01085 LedOut C2_C4_reg,Cx_dir,4 ;LED C2-C4 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 24 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01086 01087 setbank1 01088 movf Ax_dir,w ;set portA direction 01089 movwf TRISA 01090 movf Cx_dir,w ;set portA direction 01091 movwf TRISC 01092 setbank0 01093 01094 movlw b'00000000' 01095 movwf PORTA 01096 01097 movlw b'00000100' 01098 movwf PORTC 01099 01100 return 01101 #endif 01102 #endif 01103 01104 ;-------------------------------------------------------------------------------------- 00B2 01105 strobe_c4 01106 ;-------------------------------------------------------------------------------------- 01107 01108 #ifdef C19 01109 #ifdef DDF 01110 LedOut C4_A0_reg,Ax_dir,0 ;LED C4-A0 01111 LedOut C4_A1_reg,Ax_dir,1 ;LED C4-A1 01112 LedOut C4_A2_reg,Ax_dir,2 ;LED C4-A4 01113 LedOut C4_C0_reg,Cx_dir,0 ;LED C4-C0 01114 LedOut C4_C1_reg,Cx_dir,1 ;LED C4-C1 01115 LedOut C4_C2_reg,Cx_dir,2 ;LED C4-C2 01116 01117 setbank1 01118 movf Ax_dir,w ;set portA direction 01119 movwf TRISA 01120 movf Cx_dir,w ;set portA direction 01121 movwf TRISC 01122 setbank0 01123 01124 movlw b'00000000' 01125 movwf PORTA 01126 01127 movlw b'00010000' 01128 movwf PORTC 01129 01130 return 01131 #endif 01132 #endif 01133 01134 #ifdef S19 01135 ;-------------------------------------------------------------------------------------- 01136 strobe_a4 01137 ;-------------------------------------------------------------------------------------- 01138 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 25 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01139 LedOut A4_A0_reg,Ax_dir,0 ;LED A4-A0 01140 LedOut A4_A1_reg,Ax_dir,1 ;LED A4-A1 01141 LedOut A4_A2_reg,Ax_dir,2 ;LED A4-A2 01142 LedOut A4_A5_reg,Ax_dir,5 ;LED A4-A5 01143 01144 setbank1 01145 movf Ax_dir,w ;set portA direction 01146 movwf TRISA 01147 setbank0 01148 01149 movlw b'00010000' 01150 movwf PORTA 01151 01152 return 01153 #endif 01154 01155 ;-------------------------------------------------------------------------------------- 00B2 01156 strobe_a5 01157 ;-------------------------------------------------------------------------------------- 01158 #ifdef RGB4 01159 #ifdef Common_Cathode 01160 LedOut Cr_reg,Ax_dir,0 ;LED Cr A5-A0 01161 LedOut Cg_reg,Ax_dir,1 ;LED Cg A5-A1 01162 LedOut Cb_reg,Ax_dir,2 ;LED Cb A5-A2 01163 #else 01164 LedOut Db_reg,Ax_dir,0 ;LED Db A5-A0 01165 LedOut Ag_reg,Ax_dir,1 ;LED Ag A5-A1 01166 LedOut Br_reg,Ax_dir,2 ;LED Br A5-A2 01167 #endif 01168 #endif 01169 #ifdef BI6 01170 LedOut Cb_reg,Ax_dir,0 ;LED Dr A5-A0 00B2 0801 M movfw TMR0 00B3 022F M subwf Cb_reg,w 00B4 1C03 M btfss STATUS,C 00B5 1474 M bsf Ax_dir, 0 01171 LedOut Cg_reg,Ax_dir,2 ;LED Db A5-A2 00B6 0801 M movfw TMR0 00B7 022E M subwf Cg_reg,w 00B8 1C03 M btfss STATUS,C 00B9 1574 M bsf Ax_dir, 2 01172 LedOut Br_reg,Ax_dir,1 ;LED Dg A5-A1 00BA 0801 M movfw TMR0 00BB 022A M subwf Br_reg,w 00BC 1C03 M btfss STATUS,C 00BD 14F4 M bsf Ax_dir, 1 01173 #endif 01174 #ifdef S19 01175 LedOut A5_A0_reg,Ax_dir,0 ;LED A5-A0 01176 LedOut A5_A1_reg,Ax_dir,1 ;LED A5-A1 01177 LedOut A5_A2_reg,Ax_dir,2 ;LED A5-A2 01178 LedOut A5_A4_reg,Ax_dir,4 ;LED A5-A4 01179 #endif MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 26 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01180 00BE 1683 01181 setbank1 00BF 0874 01182 movf Ax_dir,w ;set portA direction 00C0 0085 01183 movwf TRISA 00C1 1283 01184 setbank0 01185 01186 #ifdef BADGE 01187 var a_out 01188 01189 movlw b'00110000' ; Badge Center LED A4-Ground 01190 movwf a_out 01191 movfw TMR0 01192 subwf Center_reg,w 01193 btfss STATUS,C 01194 bcf a_out,4 01195 movfw a_out 01196 movwf PORTA 01197 #else 00C2 3020 01198 movlw b'00100000' 00C3 0085 01199 movwf PORTA 01200 #endif 01201 00C4 0008 01202 return 01203 01204 ;************************************************************************************** 01205 ; 01206 ; State Machine 01207 ; 01208 ;************************************************************************************** 01209 01210 var instate 00000033 M instate equ mem 00000034 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01211 var max_instate 00000034 M max_instate equ mem 00000035 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01212 var IR_in 00000035 M IR_in equ mem 00000036 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01213 var command 00000036 M command equ mem 00000037 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01214 var address 00000037 M address equ mem 00000038 M mem = mem + 1 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 27 LOC OBJECT CODE LINE SOURCE TEXT VALUE M if (mem > 0xef) M error 'Too much var space used' 01215 var toggle 00000038 M toggle equ mem 00000039 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01216 var IR_lhalf 00000039 M IR_lhalf equ mem 0000003A M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01217 var button 0000003A M button equ mem 0000003B M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01218 var tx_1 0000003B M tx_1 equ mem 0000003C M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01219 var pindex2 0000003C M pindex2 equ mem 0000003D M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01220 var IR_in_good 0000003D M IR_in_good equ mem 0000003E M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01221 var butcount 0000003E M butcount equ mem 0000003F M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01222 01223 ;-------------------------------------------------------------------------------------- 00C5 01224 get_state_tbl_hi_address ; 17 cycles 01225 ;-------------------------------------------------------------------------------------- 01226 var tbl2_hi 0000003F M tbl2_hi equ mem 00000040 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01227 00C5 1003 01228 bcf STATUS,0 ; clear carry flag ; 1 00C6 0D33 01229 rlf instate,w ; entry = table * 2 ; 2 00C7 00BC 01230 movwf pindex2 ; 3 00C8 20D2 01231 call table_lookup2 ; 14 (9+2) 00C9 00BF 01232 movwf tbl2_hi ; 15 00CA 0008 01233 return ; 16/17 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 28 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01234 01235 ;-------------------------------------------------------------------------------------- 00CB 01236 get_state_tbl_low_address ; 18 cycles 01237 ;-------------------------------------------------------------------------------------- 01238 var tbl2_low 00000040 M tbl2_low equ mem 00000041 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01239 00CB 1003 01240 bcf STATUS,0 ; clear carry flag (just in case) ; 1 00CC 0D33 01241 rlf instate,w ; entry = table * 2 + 1 ; 2 00CD 3E01 01242 addlw 1 ; 3 00CE 00BC 01243 movwf pindex2 ; 4 00CF 20D2 01244 call table_lookup2 ; 15 (9+2) 00D0 00C0 01245 movwf tbl2_low ; 16 00D1 0008 01246 return ; 17/18 01247 01248 ;********************************************************************** 00D2 01249 table_lookup2 ; 9 cycles 01250 ;********************************************************************** 00D2 3000 01251 movlw HIGH state_jump_table ; 1 00D3 008A 01252 movwf PCLATH ; 2 00D4 083C 01253 movf pindex2,w ; 3 00D5 3EDD 01254 addlw LOW state_jump_table ; 4 00D6 1803 01255 btfsc STATUS,0 ; check carry flag ; 5 00D7 0A8A 01256 incf PCLATH,f ; 6 00D8 0082 01257 movwf PCL ; 7 + 2 01258 01259 ;********************************************************************** 00D9 01260 go_state_table ; 18 cycles 01261 ;********************************************************************** 00D9 083F 01262 movf tbl2_hi,w ; 1 00DA 008A 01263 movwf PCLATH ; 2 00DB 0840 01264 movf tbl2_low,w ; 3 00DC 0082 01265 movwf PCL ; 4 01266 01267 ;********************************************************************** 00DD 01268 state_jump_table 01269 ;********************************************************************** 01270 make_state_jump_table d'31' 0000 M local i = 0 M while i <= d'31' 00DD 3401 341D M dt HIGH Lstate0, LOW Lstate0 00000001 M i += 1 00DF 3401 3428 M dt HIGH Lstate1, LOW Lstate1 00000002 M i += 1 00E1 3401 3430 M dt HIGH Lstate2, LOW Lstate2 00000003 M i += 1 00E3 3401 3438 M dt HIGH Lstate3, LOW Lstate3 00000004 M i += 1 00E5 3401 3440 M dt HIGH Lstate4, LOW Lstate4 00000005 M i += 1 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 29 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00E7 3401 3448 M dt HIGH Lstate5, LOW Lstate5 00000006 M i += 1 00E9 3401 3450 M dt HIGH Lstate6, LOW Lstate6 00000007 M i += 1 00EB 3401 345C M dt HIGH Lstate7, LOW Lstate7 00000008 M i += 1 00ED 3401 3460 M dt HIGH Lstate8, LOW Lstate8 00000009 M i += 1 00EF 3401 346C M dt HIGH Lstate9, LOW Lstate9 0000000A M i += 1 00F1 3401 3470 M dt HIGH Lstate10, LOW Lstate10 0000000B M i += 1 00F3 3401 347C M dt HIGH Lstate11, LOW Lstate11 0000000C M i += 1 00F5 3401 3480 M dt HIGH Lstate12, LOW Lstate12 0000000D M i += 1 00F7 3401 348C M dt HIGH Lstate13, LOW Lstate13 0000000E M i += 1 00F9 3401 3490 M dt HIGH Lstate14, LOW Lstate14 0000000F M i += 1 00FB 3401 349C M dt HIGH Lstate15, LOW Lstate15 00000010 M i += 1 00FD 3401 34A0 M dt HIGH Lstate16, LOW Lstate16 00000011 M i += 1 00FF 3401 34AC M dt HIGH Lstate17, LOW Lstate17 00000012 M i += 1 0101 3401 34B0 M dt HIGH Lstate18, LOW Lstate18 00000013 M i += 1 0103 3401 34BC M dt HIGH Lstate19, LOW Lstate19 00000014 M i += 1 0105 3401 34C0 M dt HIGH Lstate20, LOW Lstate20 00000015 M i += 1 0107 3401 34CC M dt HIGH Lstate21, LOW Lstate21 00000016 M i += 1 0109 3401 34D0 M dt HIGH Lstate22, LOW Lstate22 00000017 M i += 1 010B 3401 34DC M dt HIGH Lstate23, LOW Lstate23 00000018 M i += 1 010D 3401 34E0 M dt HIGH Lstate24, LOW Lstate24 00000019 M i += 1 010F 3401 34EC M dt HIGH Lstate25, LOW Lstate25 0000001A M i += 1 0111 3401 34F0 M dt HIGH Lstate26, LOW Lstate26 0000001B M i += 1 0113 3401 34FC M dt HIGH Lstate27, LOW Lstate27 0000001C M i += 1 0115 3402 3400 M dt HIGH Lstate28, LOW Lstate28 0000001D M i += 1 0117 3402 340C M dt HIGH Lstate29, LOW Lstate29 0000001E M i += 1 0119 3402 3410 M dt HIGH Lstate30, LOW Lstate30 0000001F M i += 1 011B 3402 341C M dt HIGH Lstate31, LOW Lstate31 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 30 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000020 M i += 1 M endw 01271 01272 state_tbl 0, 6, 1, 0 011D M Lstate0 M if (0 == 0) 011D 01BA M clrf button 011E 3030 M movlw 0x30 011F 00BE M movwf butcount M endif M if (0 == 1) M bsf button,0 M endif M 0120 1835 M btfsc IR_in,0 0121 2925 M goto Lstate0a M 0122 3006 M movlw 6 0123 00B3 M movwf instate M 0124 2A1E M goto Lcontinue M 0125 M Lstate0a 0125 3001 M movlw 1 0126 00B3 M movwf instate M 0127 2A1E M goto Lcontinue 01273 state_tbl 1, 0, 2, -1 0128 M Lstate1 M if (-1 == 0) M clrf button M movlw 0x30 M movwf butcount M endif M if (-1 == 1) M bsf button,0 M endif M 0128 1835 M btfsc IR_in,0 0129 292D M goto Lstate1a M 012A 3000 M movlw 0 012B 00B3 M movwf instate M 012C 2A1E M goto Lcontinue M 012D M Lstate1a 012D 3002 M movlw 2 012E 00B3 M movwf instate M 012F 2A1E M goto Lcontinue 01274 state_tbl 2, 0, 3, -1 0130 M Lstate2 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 31 LOC OBJECT CODE LINE SOURCE TEXT VALUE M if (-1 == 0) M clrf button M movlw 0x30 M movwf butcount M endif M if (-1 == 1) M bsf button,0 M endif M 0130 1835 M btfsc IR_in,0 0131 2935 M goto Lstate2a M 0132 3000 M movlw 0 0133 00B3 M movwf instate M 0134 2A1E M goto Lcontinue M 0135 M Lstate2a 0135 3003 M movlw 3 0136 00B3 M movwf instate M 0137 2A1E M goto Lcontinue 01275 state_tbl 3, 4, 3, -1 0138 M Lstate3 M if (-1 == 0) M clrf button M movlw 0x30 M movwf butcount M endif M if (-1 == 1) M bsf button,0 M endif M 0138 1835 M btfsc IR_in,0 0139 293D M goto Lstate3a M 013A 3004 M movlw 4 013B 00B3 M movwf instate M 013C 2A1E M goto Lcontinue M 013D M Lstate3a 013D 3003 M movlw 3 013E 00B3 M movwf instate M 013F 2A1E M goto Lcontinue 01276 state_tbl 4, 0, 5, -1 0140 M Lstate4 M if (-1 == 0) M clrf button M movlw 0x30 M movwf butcount M endif MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 32 LOC OBJECT CODE LINE SOURCE TEXT VALUE M if (-1 == 1) M bsf button,0 M endif M 0140 1835 M btfsc IR_in,0 0141 2945 M goto Lstate4a M 0142 3000 M movlw 0 0143 00B3 M movwf instate M 0144 2A1E M goto Lcontinue M 0145 M Lstate4a 0145 3005 M movlw 5 0146 00B3 M movwf instate M 0147 2A1E M goto Lcontinue 01277 state_tbl 5, 7, 0, -1 0148 M Lstate5 M if (-1 == 0) M clrf button M movlw 0x30 M movwf butcount M endif M if (-1 == 1) M bsf button,0 M endif M 0148 1835 M btfsc IR_in,0 0149 294D M goto Lstate5a M 014A 3007 M movlw 7 014B 00B3 M movwf instate M 014C 2A1E M goto Lcontinue M 014D M Lstate5a 014D 3000 M movlw 0 014E 00B3 M movwf instate M 014F 2A1E M goto Lcontinue 01278 0150 01279 Lstate6 01280 0150 1835 01281 btfsc IR_in,0 0151 295A 01282 goto Lstate6a 01283 0152 3000 01284 movlw 0 0153 073E 01285 addwf butcount,w 0154 1903 01286 btfsc STATUS,Z 0155 2958 01287 goto Lstate6b 01288 0156 0BBE 01289 decfsz butcount,f MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 33 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0157 2A1E 01290 goto Lcontinue 01291 0158 01292 Lstate6b 01293 0158 143A 01294 bsf button,0 0159 2A1E 01295 goto Lcontinue 01296 015A 01297 Lstate6a 015A 01B3 01298 clrf instate 015B 2A1E 01299 goto Lcontinue 01300 01301 state2_tbl 7, toggle, 0 015C M Lstate7 M ; save the 1st half of word 015C 0835 M movf IR_in,w ; save 1st half 015D 00B9 M movwf IR_lhalf 015E 0AB3 M incf instate,f M 015F 2A1E M goto Lcontinue M 0160 M Lstate8 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 0160 0839 M movf IR_lhalf,w 0161 0635 M xorwf IR_in,w 0162 1D03 M btfss STATUS,Z 0163 2966 M goto Lstate8a 0164 01B3 M clrf instate ; error state = zero M 0165 2A1E M goto Lcontinue M M ; set the correct bit in output vars. 0166 M Lstate8a 0166 1835 M btfsc IR_in,0 0167 1038 M bcf toggle,0 0168 1C35 M btfss IR_in,0 0169 1438 M bsf toggle,0 M 016A 0AB3 M incf instate,f 016B 2A1E M goto Lcontinue 01302 state2_tbl 9, address, 4 016C M Lstate9 M ; save the 1st half of word 016C 0835 M movf IR_in,w ; save 1st half 016D 00B9 M movwf IR_lhalf 016E 0AB3 M incf instate,f M 016F 2A1E M goto Lcontinue M 0170 M Lstate10 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 0170 0839 M movf IR_lhalf,w MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 34 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0171 0635 M xorwf IR_in,w 0172 1D03 M btfss STATUS,Z 0173 2976 M goto Lstate10a 0174 01B3 M clrf instate ; error state = zero M 0175 2A1E M goto Lcontinue M M ; set the correct bit in output vars. 0176 M Lstate10a 0176 1835 M btfsc IR_in,0 0177 1237 M bcf address,4 0178 1C35 M btfss IR_in,0 0179 1637 M bsf address,4 M 017A 0AB3 M incf instate,f 017B 2A1E M goto Lcontinue 01303 state2_tbl d'11', address, 3 017C M Lstate11 M ; save the 1st half of word 017C 0835 M movf IR_in,w ; save 1st half 017D 00B9 M movwf IR_lhalf 017E 0AB3 M incf instate,f M 017F 2A1E M goto Lcontinue M 0180 M Lstate12 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 0180 0839 M movf IR_lhalf,w 0181 0635 M xorwf IR_in,w 0182 1D03 M btfss STATUS,Z 0183 2986 M goto Lstate12a 0184 01B3 M clrf instate ; error state = zero M 0185 2A1E M goto Lcontinue M M ; set the correct bit in output vars. 0186 M Lstate12a 0186 1835 M btfsc IR_in,0 0187 11B7 M bcf address,3 0188 1C35 M btfss IR_in,0 0189 15B7 M bsf address,3 M 018A 0AB3 M incf instate,f 018B 2A1E M goto Lcontinue 01304 state2_tbl d'13', address, 2 018C M Lstate13 M ; save the 1st half of word 018C 0835 M movf IR_in,w ; save 1st half 018D 00B9 M movwf IR_lhalf 018E 0AB3 M incf instate,f M 018F 2A1E M goto Lcontinue MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 35 LOC OBJECT CODE LINE SOURCE TEXT VALUE M 0190 M Lstate14 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 0190 0839 M movf IR_lhalf,w 0191 0635 M xorwf IR_in,w 0192 1D03 M btfss STATUS,Z 0193 2996 M goto Lstate14a 0194 01B3 M clrf instate ; error state = zero M 0195 2A1E M goto Lcontinue M M ; set the correct bit in output vars. 0196 M Lstate14a 0196 1835 M btfsc IR_in,0 0197 1137 M bcf address,2 0198 1C35 M btfss IR_in,0 0199 1537 M bsf address,2 M 019A 0AB3 M incf instate,f 019B 2A1E M goto Lcontinue 01305 state2_tbl d'15', address, 1 019C M Lstate15 M ; save the 1st half of word 019C 0835 M movf IR_in,w ; save 1st half 019D 00B9 M movwf IR_lhalf 019E 0AB3 M incf instate,f M 019F 2A1E M goto Lcontinue M 01A0 M Lstate16 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 01A0 0839 M movf IR_lhalf,w 01A1 0635 M xorwf IR_in,w 01A2 1D03 M btfss STATUS,Z 01A3 29A6 M goto Lstate16a 01A4 01B3 M clrf instate ; error state = zero M 01A5 2A1E M goto Lcontinue M M ; set the correct bit in output vars. 01A6 M Lstate16a 01A6 1835 M btfsc IR_in,0 01A7 10B7 M bcf address,1 01A8 1C35 M btfss IR_in,0 01A9 14B7 M bsf address,1 M 01AA 0AB3 M incf instate,f 01AB 2A1E M goto Lcontinue 01306 state2_tbl d'17', address, 0 01AC M Lstate17 M ; save the 1st half of word MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 36 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01AC 0835 M movf IR_in,w ; save 1st half 01AD 00B9 M movwf IR_lhalf 01AE 0AB3 M incf instate,f M 01AF 2A1E M goto Lcontinue M 01B0 M Lstate18 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 01B0 0839 M movf IR_lhalf,w 01B1 0635 M xorwf IR_in,w 01B2 1D03 M btfss STATUS,Z 01B3 29B6 M goto Lstate18a 01B4 01B3 M clrf instate ; error state = zero M 01B5 2A1E M goto Lcontinue M M ; set the correct bit in output vars. 01B6 M Lstate18a 01B6 1835 M btfsc IR_in,0 01B7 1037 M bcf address,0 01B8 1C35 M btfss IR_in,0 01B9 1437 M bsf address,0 M 01BA 0AB3 M incf instate,f 01BB 2A1E M goto Lcontinue 01307 state2_tbl d'19', command, 5 01BC M Lstate19 M ; save the 1st half of word 01BC 0835 M movf IR_in,w ; save 1st half 01BD 00B9 M movwf IR_lhalf 01BE 0AB3 M incf instate,f M 01BF 2A1E M goto Lcontinue M 01C0 M Lstate20 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 01C0 0839 M movf IR_lhalf,w 01C1 0635 M xorwf IR_in,w 01C2 1D03 M btfss STATUS,Z 01C3 29C6 M goto Lstate20a 01C4 01B3 M clrf instate ; error state = zero M 01C5 2A1E M goto Lcontinue M M ; set the correct bit in output vars. 01C6 M Lstate20a 01C6 1835 M btfsc IR_in,0 01C7 12B6 M bcf command,5 01C8 1C35 M btfss IR_in,0 01C9 16B6 M bsf command,5 M MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 37 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01CA 0AB3 M incf instate,f 01CB 2A1E M goto Lcontinue 01308 state2_tbl d'21', command, 4 01CC M Lstate21 M ; save the 1st half of word 01CC 0835 M movf IR_in,w ; save 1st half 01CD 00B9 M movwf IR_lhalf 01CE 0AB3 M incf instate,f M 01CF 2A1E M goto Lcontinue M 01D0 M Lstate22 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 01D0 0839 M movf IR_lhalf,w 01D1 0635 M xorwf IR_in,w 01D2 1D03 M btfss STATUS,Z 01D3 29D6 M goto Lstate22a 01D4 01B3 M clrf instate ; error state = zero M 01D5 2A1E M goto Lcontinue M M ; set the correct bit in output vars. 01D6 M Lstate22a 01D6 1835 M btfsc IR_in,0 01D7 1236 M bcf command,4 01D8 1C35 M btfss IR_in,0 01D9 1636 M bsf command,4 M 01DA 0AB3 M incf instate,f 01DB 2A1E M goto Lcontinue 01309 state2_tbl d'23', command, 3 01DC M Lstate23 M ; save the 1st half of word 01DC 0835 M movf IR_in,w ; save 1st half 01DD 00B9 M movwf IR_lhalf 01DE 0AB3 M incf instate,f M 01DF 2A1E M goto Lcontinue M 01E0 M Lstate24 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 01E0 0839 M movf IR_lhalf,w 01E1 0635 M xorwf IR_in,w 01E2 1D03 M btfss STATUS,Z 01E3 29E6 M goto Lstate24a 01E4 01B3 M clrf instate ; error state = zero M 01E5 2A1E M goto Lcontinue M M ; set the correct bit in output vars. 01E6 M Lstate24a MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 38 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01E6 1835 M btfsc IR_in,0 01E7 11B6 M bcf command,3 01E8 1C35 M btfss IR_in,0 01E9 15B6 M bsf command,3 M 01EA 0AB3 M incf instate,f 01EB 2A1E M goto Lcontinue 01310 state2_tbl d'25', command, 2 01EC M Lstate25 M ; save the 1st half of word 01EC 0835 M movf IR_in,w ; save 1st half 01ED 00B9 M movwf IR_lhalf 01EE 0AB3 M incf instate,f M 01EF 2A1E M goto Lcontinue M 01F0 M Lstate26 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 01F0 0839 M movf IR_lhalf,w 01F1 0635 M xorwf IR_in,w 01F2 1D03 M btfss STATUS,Z 01F3 29F6 M goto Lstate26a 01F4 01B3 M clrf instate ; error state = zero M 01F5 2A1E M goto Lcontinue M M ; set the correct bit in output vars. 01F6 M Lstate26a 01F6 1835 M btfsc IR_in,0 01F7 1136 M bcf command,2 01F8 1C35 M btfss IR_in,0 01F9 1536 M bsf command,2 M 01FA 0AB3 M incf instate,f 01FB 2A1E M goto Lcontinue 01311 state2_tbl d'27', command, 1 01FC M Lstate27 M ; save the 1st half of word 01FC 0835 M movf IR_in,w ; save 1st half 01FD 00B9 M movwf IR_lhalf 01FE 0AB3 M incf instate,f M 01FF 2A1E M goto Lcontinue M 0200 M Lstate28 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 0200 0839 M movf IR_lhalf,w 0201 0635 M xorwf IR_in,w 0202 1D03 M btfss STATUS,Z 0203 2A06 M goto Lstate28a 0204 01B3 M clrf instate ; error state = zero MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 39 LOC OBJECT CODE LINE SOURCE TEXT VALUE M 0205 2A1E M goto Lcontinue M M ; set the correct bit in output vars. 0206 M Lstate28a 0206 1835 M btfsc IR_in,0 0207 10B6 M bcf command,1 0208 1C35 M btfss IR_in,0 0209 14B6 M bsf command,1 M 020A 0AB3 M incf instate,f 020B 2A1E M goto Lcontinue 01312 state2_tbl d'29', command, 0 020C M Lstate29 M ; save the 1st half of word 020C 0835 M movf IR_in,w ; save 1st half 020D 00B9 M movwf IR_lhalf 020E 0AB3 M incf instate,f M 020F 2A1E M goto Lcontinue M 0210 M Lstate30 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 0210 0839 M movf IR_lhalf,w 0211 0635 M xorwf IR_in,w 0212 1D03 M btfss STATUS,Z 0213 2A16 M goto Lstate30a 0214 01B3 M clrf instate ; error state = zero M 0215 2A1E M goto Lcontinue M M ; set the correct bit in output vars. 0216 M Lstate30a 0216 1835 M btfsc IR_in,0 0217 1036 M bcf command,0 0218 1C35 M btfss IR_in,0 0219 1436 M bsf command,0 M 021A 0AB3 M incf instate,f 021B 2A1E M goto Lcontinue 01313 021C 01314 Lstate31 021C 01B3 01315 clrf instate 021D 143D 01316 bsf IR_in_good,0 01317 021E 01318 Lcontinue 021E 0008 01319 return 01320 01321 ;-------------------------------------------------------------------------------------- 021F 01322 read_button_in ; 5 cycles 01323 ;-------------------------------------------------------------------------------------- 01324 ; Portability : hardcoded button port MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 40 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01325 ; 01326 021F 103A 01327 bcf button,0 ; 1 0220 1E85 01328 btfss PORTA,5 ; 2 0221 143A 01329 bsf button,0 ; 3 01330 0222 0008 01331 return 01332 01333 ;-------------------------------------------------------------------------------------- 0223 01334 read_ir_in ; 5 cycles 01335 ;-------------------------------------------------------------------------------------- 01336 0223 1035 01337 bcf IR_in,0 ; 1 0224 1985 01338 btfsc PORTA,3 ; 2 0225 1435 01339 bsf IR_in,0 ; 3 01340 01341 ; movf tx_1,w ; loopback for testing HACK!! ;1 01342 ; xorlw 0x01 ; loopback for testing HACK!! ;2 01343 ; movwf IR_in ; loopback for testing HACK!! ;3 0226 0008 01344 return ; 4/5 01345 01346 ;-------------------------------------------------------------------------------------- 0227 01347 set_max_state ; 5-7 cycles 01348 ;-------------------------------------------------------------------------------------- 0227 0834 01349 movf max_instate,w 0228 0233 01350 subwf instate,w 0229 1C03 01351 btfss STATUS,C 022A 2A2D 01352 goto smi_l1 022B 0833 01353 movf instate,w 022C 00B4 01354 movwf max_instate 022D 01355 smi_l1 022D 0008 01356 return 01357 01358 ;-------------------------------------------------------------------------------------- 022E 01359 get_next_tx_bit ; 11 cycles 01360 ;-------------------------------------------------------------------------------------- 01361 022E 103B 01362 bcf tx_1,0 ;1 022F 03CA 01363 decf scount,f ;2 0230 1003 01364 bcf STATUS, C ; clear carry bit ;3 0231 0CC9 01365 rrf out3,f ;4 0232 0CC8 01366 rrf out2,f ;5 0233 0CC7 01367 rrf out1,f ;6 0234 0CC6 01368 rrf out0,f ;7 0235 1803 01369 btfsc STATUS, C ;8 0236 143B 01370 bsf tx_1,0 ;9 01371 01372 ; movf tx_1,w ; loopback for testing HACK!! 01373 ; xorlw 0x01 ; loopback for testing HACK!! 01374 ; movwf tx_1 ; loopback for testing HACK!! 01375 ; mult_nop d'6' ; for debuging 01376 0237 0008 01377 return ;10/11 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 41 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01378 01379 ;********************************************************************** 0238 01380 qdelay 01381 ;********************************************************************** 01382 var qcount 00000041 M qcount equ mem 00000042 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01383 0238 00C1 01384 movwf qcount 0239 01385 delay_loop2 0239 0BC1 01386 decfsz qcount,1 023A 2A39 01387 goto delay_loop2 023B 0008 01388 return 01389 ;********************************************************************** 023C 01390 rf_command_out 01391 ;********************************************************************** 01392 01393 var out_address 00000042 M out_address equ mem 00000043 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01394 var out_command 00000043 M out_command equ mem 00000044 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01395 var out_toggle 00000044 M out_toggle equ mem 00000045 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01396 var out_pattern 00000045 M out_pattern equ mem 00000046 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01397 var out0 00000046 M out0 equ mem 00000047 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01398 var out1 00000047 M out1 equ mem 00000048 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01399 var out2 00000048 M out2 equ mem 00000049 M mem = mem + 1 M if (mem > 0xef) MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 42 LOC OBJECT CODE LINE SOURCE TEXT VALUE M error 'Too much var space used' 01400 var out3 00000049 M out3 equ mem 0000004A M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01401 var scount 0000004A M scount equ mem 0000004B M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01402 023C 01C7 01403 clrf out1 023D 01C8 01404 clrf out2 023E 01C9 01405 clrf out3 01406 01407 ; start flag 023F 30A0 01408 movlw B'10100000' 0240 00C6 01409 movwf out0 01410 01411 01412 ; toggle bit 0241 09C4 01413 comf out_toggle,f ; toggle the toggle flag 0242 1C44 01414 btfss out_toggle,0 0243 1447 01415 bsf out1,0 0244 1844 01416 btfsc out_toggle,0 0245 14C7 01417 bsf out1,1 01418 01419 ; address bits 0246 1E42 01420 btfss out_address,4 0247 1547 01421 bsf out1,2 0248 1A42 01422 btfsc out_address,4 0249 15C7 01423 bsf out1,3 01424 024A 1DC2 01425 btfss out_address,3 024B 1647 01426 bsf out1,4 024C 19C2 01427 btfsc out_address,3 024D 16C7 01428 bsf out1,5 01429 024E 1D42 01430 btfss out_address,2 024F 1747 01431 bsf out1,6 0250 1942 01432 btfsc out_address,2 0251 17C7 01433 bsf out1,7 01434 0252 1CC2 01435 btfss out_address,1 0253 1448 01436 bsf out2,0 0254 18C2 01437 btfsc out_address,1 0255 14C8 01438 bsf out2,1 01439 0256 1C42 01440 btfss out_address,0 0257 1548 01441 bsf out2,2 0258 1842 01442 btfsc out_address,0 0259 15C8 01443 bsf out2,3 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 43 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01444 01445 ; command bits 025A 1EC3 01446 btfss out_command,5 025B 1648 01447 bsf out2,4 025C 1AC3 01448 btfsc out_command,5 025D 16C8 01449 bsf out2,5 01450 025E 1E43 01451 btfss out_command,4 025F 1748 01452 bsf out2,6 0260 1A43 01453 btfsc out_command,4 0261 17C8 01454 bsf out2,7 01455 0262 1DC3 01456 btfss out_command,3 0263 1449 01457 bsf out3,0 0264 19C3 01458 btfsc out_command,3 0265 14C9 01459 bsf out3,1 01460 0266 1D43 01461 btfss out_command,2 0267 1549 01462 bsf out3,2 0268 1943 01463 btfsc out_command,2 0269 15C9 01464 bsf out3,3 01465 026A 1CC3 01466 btfss out_command,1 026B 1649 01467 bsf out3,4 026C 18C3 01468 btfsc out_command,1 026D 16C9 01469 bsf out3,5 01470 026E 1C43 01471 btfss out_command,0 026F 1749 01472 bsf out3,6 0270 1843 01473 btfsc out_command,0 0271 17C9 01474 bsf out3,7 01475 0272 3021 01476 movlw 0x21 0273 00CA 01477 movwf scount 01478 0274 0008 01479 return 01480 01481 #ifdef BIN2LED 01482 ;********************************************************************** 0275 01483 bin2led 01484 ;********************************************************************** 01485 var b2l_out_hi 0000004B M b2l_out_hi equ mem 0000004C M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01486 var b2l_out_low 0000004C M b2l_out_low equ mem 0000004D M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01487 var b2l_lcount 0000004D M b2l_lcount equ mem MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 44 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0000004E M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01488 var b2l_in_red 0000004E M b2l_in_red equ mem 0000004F M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01489 var b2l_in_green 0000004F M b2l_in_green equ mem 00000050 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01490 0275 01CB 01491 clrf b2l_out_hi 0276 01CC 01492 clrf b2l_out_low 0277 3008 01493 movlw 0x08 0278 00CD 01494 movwf b2l_lcount 0279 01495 b2l_loop 0279 1003 01496 bcf STATUS, C 027A 0CCF 01497 rrf b2l_in_green,f 027B 0DCC 01498 rlf b2l_out_low,f 027C 0DCB 01499 rlf b2l_out_hi,f 027D 0CCE 01500 rrf b2l_in_red,f 027E 0DCC 01501 rlf b2l_out_low,f 027F 0DCB 01502 rlf b2l_out_hi,f 01503 0280 0BCD 01504 decfsz b2l_lcount,f 0281 2A79 01505 goto b2l_loop 0282 0008 01506 return 01507 #endif 01508 01509 #ifdef FLIPBYTE 01510 ;********************************************************************** 01511 flipbyte 01512 ;********************************************************************** 01513 var flip_in 01514 var flip_out 01515 var flip_lcount 01516 01517 movwf flip_in 01518 clrf flip_out 01519 movlw 0x08 01520 movwf flip_lcount 01521 fbyte_loop 01522 bcf STATUS, C 01523 rrf flip_in,f 01524 rlf flip_out,f 01525 01526 decfsz flip_lcount,f 01527 goto fbyte_loop 01528 01529 movfw flip_out MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 45 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01530 return 01531 #endif 01532 01533 ;********************************************************************** 0283 01534 delay 01535 ;********************************************************************** 01536 01537 var delay_count 00000050 M delay_count equ mem 00000051 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01538 01539 ; movlw 0ffh 0283 00D0 01540 movwf delay_count 0284 01541 delay_loop 0284 0000 01542 nop 0285 0BD0 01543 decfsz delay_count,1 0286 2A84 01544 goto delay_loop 0287 0008 01545 return 01546 01547 ;********************************************************************** 0288 01548 next_pattern 01549 ;********************************************************************** 0288 0AD9 01550 incf pattern,f 0289 0859 01551 movf pattern,w 028A 3C0F 01552 sublw NUM_TAB+1 ; max pattern? 028B 1903 01553 btfsc STATUS,2 ; z bit check 028C 01D9 01554 clrf pattern ; reset to zero 028D 0859 01555 movfw pattern 028E 00C5 01556 movwf out_pattern 028F 0008 01557 return 01558 01559 ;********************************************************************** 0290 01560 past_pattern 01561 ;********************************************************************** 0290 03D9 01562 decf pattern,f 0291 0859 01563 movf pattern,w 0292 3E01 01564 addlw 1 ; max pattern? 0293 1D03 01565 btfss STATUS,2 ; z bit check 0294 2A98 01566 goto past_exit 0295 300E 01567 movlw NUM_TAB 0296 00D9 01568 movwf pattern 0297 00C5 01569 movwf out_pattern 0298 01570 past_exit 0298 0008 01571 return 01572 01573 ;********************************************************************** 0299 01574 set_pattern ;set pattern from IR 01575 ;********************************************************************** 01576 ; extra logic because all the different blinkes talk to each other, but 01577 ; do not have the same number of patterns. So if blinkie "A" sents a 01578 ; pattern 22 to blinkie "B" which only has 10 patterns, Blinkie "B" MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 46 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01579 ; starts to show pattern 2. (22 % 10 a mod function.) But to make 01580 ; things fair in blinkie wars, it will transmit pattern 22 to other 01581 ; blinkies. 01582 ;********************************************************************** 01583 0299 0836 01584 movfw command 029A 00D9 01585 movwf pattern 029B 00C5 01586 movwf out_pattern 029C 01587 set_loop 029C 3EF1 01588 addlw 0xff-NUM_TAB 029D 1C03 01589 btfss STATUS, C 029E 2AA3 01590 goto set_exit 01591 029F 300E 01592 movlw NUM_TAB 02A0 02D9 01593 subwf pattern,f 02A1 0859 01594 movfw pattern 02A2 2A9C 01595 goto set_loop 01596 02A3 01597 set_exit 02A3 0008 01598 return 01599 01600 ;********************************************************************** 02A4 01601 strobe_delay 01602 ;********************************************************************** 01603 01604 var strobe_count 00000051 M strobe_count equ mem 00000052 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01605 02A4 00D1 01606 movwf strobe_count 02A5 01607 strobe_delay1 02A5 1021 01608 bcf nextf,0 01609 02A6 01610 strobe_delay2 02A6 1C21 01611 btfss nextf,0 02A7 2AA6 01612 goto strobe_delay2 01613 02A8 0BD1 01614 decfsz strobe_count,f 02A9 2AA5 01615 goto strobe_delay1 01616 02AA 0008 01617 return 01618 01619 ;********************************************************************** 02AB 01620 display_pattern_id 01621 ;********************************************************************** 02AB 0A59 01622 incf pattern,w ; W = pattern + 1 02AC 00DB 01623 movwf in0 01624 01625 #ifdef S19 01626 call flipbyte 01627 movwf in0 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 47 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01628 #endif 01629 #ifdef BI6 01630 #ifdef MONO 01631 call flipbyte 01632 movwf in0 01633 #else 02AD 00CF 01634 movwf b2l_in_green 02AE 01CE 01635 clrf b2l_in_red 02AF 2275 01636 call bin2led 02B0 084B 01637 movf b2l_out_hi,w 02B1 00DB 01638 movwf in0 02B2 084C 01639 movf b2l_out_low,w 02B3 00DC 01640 movwf in1 01641 #endif 01642 #endif 01643 01644 #ifdef S19 01645 clrf in1 01646 clrf in2 01647 01648 movlw b'11100000' 01649 btfsc demo_mode,0 01650 movwf in2 01651 #else 01652 #ifdef BI6 01653 #ifdef MONO 01654 btfsc demo_mode,0 01655 bsf in0,2 01656 #else ; bicolor 02B4 1860 01657 btfsc demo_mode,0 02B5 165C 01658 bsf in1,4 01659 #endif ; end Mono/bicolor 01660 #endif ; end BI 01661 #endif ; end S19/BI6 01662 02B6 30FF 01663 movlw 0xFF 02B7 2387 01664 call display_1bit 01665 02B8 01DB 01666 clrf in0 02B9 01DC 01667 clrf in1 02BA 01DD 01668 clrf in2 02BB 3001 01669 movlw 0x01 02BC 2387 01670 call display_1bit 02BD 0008 01671 return 01672 01673 ;********************************************************************** 02BE 01674 setup_pattern_table 01675 ;********************************************************************** 01676 var tbl_hi 00000052 M tbl_hi equ mem 00000053 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 48 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01677 var tbl_low 00000053 M tbl_low equ mem 00000054 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01678 var setup_pattern_temp 00000054 M setup_pattern_temp equ mem 00000055 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01679 var temp_high 00000055 M temp_high equ mem 00000056 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01680 02BE 01681 stop2 02BE 0859 01682 movf pattern,w 02BF 1D03 01683 btfss STATUS,Z 02C0 2ACC 01684 goto slabel1 01685 ; 01686 ; if patten is zero, check eeprom and verify 1st entry is not a 0x00 01687 ; if it is switch to next pattern. 01688 02C1 0103 01689 clrw 02C2 2304 01690 call read_eeprom 02C3 00D4 01691 movwf setup_pattern_temp 01692 02C4 01E0 01693 clrf demo_mode 02C5 1BD4 01694 btfsc setup_pattern_temp,7 02C6 1460 01695 bsf demo_mode,0 01696 02C7 0854 01697 movfw setup_pattern_temp 02C8 1D03 01698 btfss STATUS,Z 02C9 2AE0 01699 goto sreturn 01700 02CA 2288 01701 call next_pattern 02CB 2ABE 01702 goto stop2 01703 02CC 01704 slabel1 01705 ; 01706 ; Set the pattern (table) 01707 ; 02CC 3004 01708 movlw HIGH MasterTable 02CD 00D2 01709 movwf tbl_hi 02CE 306F 01710 movlw LOW MasterTable 02CF 00D3 01711 movwf tbl_low 01712 01713 ; get the high address for the pattern table 02D0 1003 01714 bcf STATUS,0 ; clear carry flag 02D1 0D59 01715 rlf pattern,w ; entry = table * 2 02D2 00F5 01716 movwf pindex 02D3 138B 01717 bcf INTCON, GIE ; disable INTs MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 49 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02D4 2468 01718 call table_lookup 02D5 178B 01719 bsf INTCON, GIE ; enable INTs 02D6 00D5 01720 movwf temp_high ; can't put it in tbl_high yet 01721 01722 ; get the low address for the pattern table 02D7 1403 01723 bsf STATUS,0 ; set carry 02D8 0D59 01724 rlf pattern,w ; entry = table * 2 + 1 02D9 00F5 01725 movwf pindex 02DA 138B 01726 bcf INTCON, GIE ; disable INTs 02DB 2468 01727 call table_lookup 02DC 178B 01728 bsf INTCON, GIE ; enable INTs 02DD 00D3 01729 movwf tbl_low 01730 02DE 0855 01731 movf temp_high,w 02DF 00D2 01732 movwf tbl_hi 01733 02E0 01734 sreturn 02E0 0008 01735 return 01736 01737 ;********************************************************************** 02E1 01738 get_next_pattern_entry 01739 ;********************************************************************** 01740 var pclath_save 00000056 M pclath_save equ mem 00000057 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01741 var temp2 00000057 M temp2 equ mem 00000058 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01742 02E1 0859 01743 movf pattern,w 02E2 1D03 01744 btfss STATUS,Z 02E3 2AE7 01745 goto glabel1 01746 02E4 0875 01747 movf pindex,w 02E5 2304 01748 call read_eeprom 01749 02E6 2AF1 01750 goto greturn 02E7 01751 glabel1 02E7 080A 01752 movfw PCLATH 02E8 00D6 01753 movwf pclath_save 02E9 0875 01754 movf pindex,w 02EA 138B 01755 bcf INTCON, GIE ; disable INTs 02EB 2468 01756 call table_lookup 02EC 178B 01757 bsf INTCON, GIE ; enable INTs 02ED 00D7 01758 movwf temp2 02EE 0856 01759 movfw pclath_save 02EF 008A 01760 movwf PCLATH 02F0 0857 01761 movfw temp2 01762 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 50 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02F1 01763 greturn 02F1 0AF5 01764 incf pindex,f 02F2 0008 01765 return 01766 01767 01768 ;********************************************************************** 02F3 01769 write_eeprom 01770 ; expects EEPROM address and data in pindex and input 01771 ; makes sure previous write (if any) has completed before proceeding 01772 ;********************************************************************** 02F3 1683 01773 setbank1 01774 02F4 189C 01775 btfsc EECON1,WR ;wait for WR to clear 02F5 2AF4 01776 goto $-1 01777 02F6 138B 01778 bcf INTCON, GIE ; disable INTs 02F7 151C 01779 bsf EECON1,WREN ;enable writes 02F8 0875 01780 movf pindex,w ;set address 02F9 009B 01781 movwf EEADR 02FA 0876 01782 movf input,w ;set data 02FB 009A 01783 movwf EEDAT 02FC 3055 01784 movlw 0x55 ;EECON2 = 0x55 ;unlock sequence 02FD 009D 01785 movwf EECON2 02FE 30AA 01786 movlw 0xAA ;EECON2 = 0xAA ;unlock sequence 02FF 009D 01787 movwf EECON2 0300 149C 01788 bsf EECON1,WR ;initiate a write cycle 0301 178B 01789 bsf INTCON, GIE ; enable INT 01790 0302 1283 01791 setbank0 0303 0008 01792 return 01793 01794 01795 ;********************************************************************** 0304 01796 read_eeprom 01797 ; expects EEPROM address in W 01798 ; returns EEPROM data in W 01799 ; makes sure previous write (if any) has completed before proceeding 01800 ;********************************************************************** 0304 1683 01801 setbank1 01802 0305 189C 01803 btfsc EECON1,WR ;wait for WR to clear 0306 2B05 01804 goto $-1 01805 0307 111C 01806 bcf EECON1,WREN ;disable writes 0308 009B 01807 movwf EEADR ;EEADR = W 0309 139C 01808 bcf EECON1,7 ;clear EEPGD 030A 141C 01809 bsf EECON1,RD ;initiate a read cycle 030B 081A 01810 movf EEDAT,w ;W = EEDAT 01811 030C 1283 01812 setbank0 030D 0008 01813 return 01814 01815 ;********************************************************************** MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 51 LOC OBJECT CODE LINE SOURCE TEXT VALUE 030E 01816 toggle_demo 01817 ;********************************************************************** 01818 var toggle_demo_temp 00000058 M toggle_demo_temp equ mem 00000059 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01819 030E 0103 01820 clrw 030F 2304 01821 call read_eeprom 0310 00D8 01822 movwf toggle_demo_temp 01823 0311 1FD8 01824 btfss toggle_demo_temp,7 ; 0312 2B16 01825 goto tdemo_on 01826 01827 ; toggle off 0313 13D8 01828 bcf toggle_demo_temp,7 0314 01E0 01829 clrf demo_mode 0315 2B18 01830 goto tdemo_cont 01831 0316 01832 tdemo_on 0316 17D8 01833 bsf toggle_demo_temp,7 0317 1460 01834 bsf demo_mode,0 01835 0318 01836 tdemo_cont 0318 01F5 01837 clrf pindex 0319 0858 01838 movfw toggle_demo_temp 031A 00F6 01839 movwf input 031B 22F3 01840 call write_eeprom 01841 031C 22AB 01842 call display_pattern_id 031D 22AB 01843 call display_pattern_id 01844 031E 0008 01845 return 01846 01847 ;********************************************************************** 031F 01848 pattern_driver 01849 ;********************************************************************** 01850 01851 var pattern 00000059 M pattern equ mem 0000005A M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01852 var tbltype 0000005A M tbltype equ mem 0000005B M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01853 var in0 0000005B M in0 equ mem 0000005C M mem = mem + 1 M if (mem > 0xef) MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 52 LOC OBJECT CODE LINE SOURCE TEXT VALUE M error 'Too much var space used' 01854 var in1 0000005C M in1 equ mem 0000005D M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01855 var in2 0000005D M in2 equ mem 0000005E M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01856 #ifdef C19 01857 var in3 01858 var in4 01859 #endif 01860 #ifdef BADGE 01861 var in3 01862 #endif 01863 var speed 0000005E M speed equ mem 0000005F M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01864 var pspeed 0000005F M pspeed equ mem 00000060 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01865 var demo_mode 00000060 M demo_mode equ mem 00000061 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01866 var psize 00000061 M psize equ mem 00000062 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 01867 01868 ; need to be able to access from page1 & page2 for eeprom read/write 01869 var_all_bank pindex ; pattern index 000000F5 M pindex equ mem2 000000F6 M mem2 = mem2 + 1 M if (mem2 > 0xFf) M error 'Too much var space used' 01870 var_all_bank input 000000F6 M input equ mem2 000000F7 M mem2 = mem2 + 1 M if (mem2 > 0xFf) M error 'Too much var space used' 01871 031F 01872 ptop 01873 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 53 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01874 031F 22BE 01875 call setup_pattern_table 01876 0320 01F5 01877 clrf pindex 01878 01879 ; load the table type (Currently only 1 type) 0321 22E1 01880 call get_next_pattern_entry 0322 00DA 01881 movwf tbltype 0323 13DA 01882 bcf tbltype,7 ; using top bit for demo mode. 01883 01884 ; load the speed (someday this will be a table type 1 only thing.) 0324 22E1 01885 call get_next_pattern_entry 0325 00DF 01886 movwf pspeed 0326 0ADF 01887 incf pspeed,f ; adjust so 0 is fastest, not treated like speed 256 01888 01889 ; load the table size 0327 22E1 01890 call get_next_pattern_entry ;4rgb 0328 00E1 01891 movwf psize ;4rgb 01892 0329 01893 ploop0 01894 ; 01895 ; Check for IR command in 01896 ; 0329 1C3D 01897 btfss IR_in_good,0 032A 2B47 01898 goto button_check 01899 032B 01900 blinkie_check 032B 3007 01901 movlw 0x07 ; blinkines use address 0x07 (Experimental) 032C 0237 01902 subwf address,w 032D 1D03 01903 btfss STATUS,Z 032E 2B32 01904 goto remote_check 01905 032F 2299 01906 call set_pattern 0330 01BD 01907 clrf IR_in_good 0331 2B1F 01908 goto ptop 01909 0332 01910 remote_check 0332 08B7 01911 movf address,f ; remote giving "0" for address (TV)? 0333 1D03 01912 btfss STATUS,Z 0334 2B47 01913 goto button_check 01914 0335 3020 01915 movlw 0x20 ; remote curser right (pattern ++) 0336 0236 01916 subwf command,w 0337 1903 01917 btfsc STATUS,Z 0338 2288 01918 call next_pattern 01919 0339 3021 01920 movlw 0x21 ; remote curser left (pattern --) 033A 0236 01921 subwf command,w 033B 1903 01922 btfsc STATUS,Z 033C 2290 01923 call past_pattern 01924 033D 3000 01925 movlw 0x00 ; remote "0" key (pattern = 0) 033E 0236 01926 subwf command,w MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 54 LOC OBJECT CODE LINE SOURCE TEXT VALUE 033F 1903 01927 btfsc STATUS,Z 0340 01D9 01928 clrf pattern 01929 0341 300C 01930 movlw 0x0c ; remote on/off key (togle demo mode!) 0342 0236 01931 subwf command,w 0343 1903 01932 btfsc STATUS,Z 0344 230E 01933 call toggle_demo 01934 0345 01BD 01935 clrf IR_in_good 0346 2B1F 01936 goto ptop 01937 0347 01938 button_check 01939 ; ploop1 01940 0347 1C3A 01941 btfss button,0 ; if putton pressed show pattern id 0348 2B53 01942 goto ploop2 01943 0349 22AB 01944 call display_pattern_id 034A 22AB 01945 call display_pattern_id 01946 034B 1C3A 01947 btfss button,0 ; if putton still pressed inc pattern 034C 2B53 01948 goto ploop2 01949 034D 01950 ploop1a 034D 2288 01951 call next_pattern 034E 22AB 01952 call display_pattern_id 034F 22AB 01953 call display_pattern_id 01954 0350 183A 01955 btfsc button,0 0351 2B4D 01956 goto ploop1a 0352 2B1F 01957 goto ptop 01958 0353 01959 ploop2 01960 01961 #ifdef PATTERN1 0353 3001 01962 movlw 0x01 ; pattern1 0354 025A 01963 subwf tbltype,w 0355 1903 01964 btfsc STATUS,Z 0356 236E 01965 call table_type_1 01966 #endif 01967 01968 #ifdef PATTERN2 01969 movlw 0x02 ; pattern2 01970 subwf tbltype,w 01971 btfsc STATUS,Z 01972 call table_type_2 01973 #endif 01974 01975 #ifdef PATTERN3 0357 3003 01976 movlw 0x03 ; pattern3 0358 025A 01977 subwf tbltype,w 0359 1903 01978 btfsc STATUS,Z 035A 2378 01979 call table_type_3 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 55 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01980 #endif 01981 01982 #ifdef PATTERN4 01983 movlw 0x04 ; pattern4 01984 subwf tbltype,w 01985 btfsc STATUS,Z 01986 call table_type_4 01987 #endif 01988 01989 #ifdef PATTERN5 01990 movlw 0x05 ; pattern5 01991 subwf tbltype,w 01992 btfsc STATUS,Z 01993 call table_type_5 01994 #endif 01995 01996 #ifdef PATTERN6 01997 movlw 0x06 ; pattern6 01998 subwf tbltype,w 01999 btfsc STATUS,Z 02000 call table_type_6 02001 #endif 02002 02003 #ifdef PATTERN7 02004 movlw 0x07 ; pattern7 02005 subwf tbltype,w 02006 btfsc STATUS,Z 02007 call table_type_7 02008 #endif 02009 02010 #ifdef PATTERN8 02011 movlw 0x08 ; pattern8 02012 subwf tbltype,w 02013 btfsc STATUS,Z 02014 call table_type_8 02015 #endif 02016 02017 #ifdef PATTERN9 02018 movlw 0x09 ; pattern8 02019 subwf tbltype,w 02020 btfsc STATUS,Z 02021 call table_type_9 02022 #endif 02023 02024 #ifdef PATTERN10 02025 movlw 0x0A ; pattern8 02026 subwf tbltype,w 02027 btfsc STATUS,Z 02028 call table_type_10 02029 #endif 02030 02031 #ifdef PATTERN11 02032 movlw 0x0B ; pattern8 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 56 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02033 subwf tbltype,w 02034 btfsc STATUS,Z 02035 call table_type_11 02036 #endif 02037 02038 02039 ; make sure we are not sending a IR signel 035B 084A 02040 movf scount,w ; F22 035C 3E00 02041 addlw 0 ; F23 035D 1D03 02042 btfss STATUS,Z ; F24 035E 2B6B 02043 goto ploop3 02044 02045 ; count down till net IR signel 035F 1CA1 02046 btfss nextf,1 0360 2B6B 02047 goto ploop3 02048 0361 10A1 02049 bcf nextf,1 0362 1C60 02050 btfss demo_mode,0 0363 2B66 02051 goto ploop2a 02052 0364 2288 02053 call next_pattern 0365 2B1F 02054 goto ptop 02055 0366 02056 ploop2a 02057 ; send an IR signel 02058 #ifdef ENABLE_IR 0366 3007 02059 movlw 0x07 ; address 0x07 "Experimental" 0367 00C2 02060 movwf out_address 0368 0845 02061 movfw out_pattern 0369 00C3 02062 movwf out_command ; copy out_pettern 02063 036A 223C 02064 call rf_command_out 02065 #endif 02066 036B 02067 ploop3 036B 0BE1 02068 decfsz psize,f ;check for end of pattern (4rgb) 036C 2B29 02069 goto ploop0 02070 036D 2B1F 02071 goto ptop 02072 02073 #ifdef PATTERN1 02074 ;********************************************************************** 036E 02075 table_type_1 02076 ;********************************************************************** 02077 ; 76543210 <-- bits 02078 ; AABBCCDD <-- LEDs 02079 ; 01010101 <-- stays on for 1 unit - b'01' 02080 ; 10101010 <-- stays on for 2 units - b'10' 02081 ; 11111111 <-- stays on for 3 units - b'11' 02082 02083 ; in0 red 02084 ; in1 green 02085 ; in2 blu MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 57 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02086 036E 22E1 02087 call get_next_pattern_entry 036F 00DB 02088 movwf in0 02089 0370 22E1 02090 call get_next_pattern_entry 0371 00DC 02091 movwf in1 02092 0372 22E1 02093 call get_next_pattern_entry ;4rgb 0373 00DD 02094 movwf in2 ;4rgb 02095 0374 085F 02096 movf pspeed,w 0375 00DE 02097 movwf speed 0376 23AF 02098 call display_2bit 02099 0377 0008 02100 return 02101 #endif 02102 02103 #ifdef PATTERN2 02104 ;********************************************************************** 02105 table_type_2 02106 ;********************************************************************** 02107 02108 var delay1 02109 var fad 02110 var color 02111 var fad2 02112 02113 incf delay1,f 02114 02115 movf delay1,w ; testing for 0 02116 btfss STATUS,Z 02117 goto cf_loop2 02118 02119 movlw TICK_VALUE ; we are using timer0 for the counts, 0 through tick value is LED off. 02120 movwf delay1 02121 02122 ; 02123 ; select a pattern 02124 ; 02125 comf fad,f 02126 movf fad,w ; testing for 0 02127 incf color,f 02128 02129 cf_loop2 02130 movf delay1,w ; fading up 02131 btfsc fad,0 02132 comf delay1,w ; dafinf down 02133 movwf fad2 02134 02135 movlw 0x03 ; greater then 3? 02136 subwf color,w 02137 btfsc STATUS,C 02138 clrf color MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 58 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02139 02140 02141 movlw 0x00 ; testing for 0 02142 subwf color,w 02143 btfss STATUS,Z 02144 goto next1 02145 02146 movfw fad2 02147 movwf Ar_reg 02148 movwf Br_reg 02149 movwf Cr_reg 02150 movwf Dr_reg 02151 02152 next1 02153 movlw 0x01 ; testing for 1 02154 subwf color,w 02155 btfss STATUS,Z 02156 goto next2 02157 02158 movfw fad2 02159 movwf Ag_reg 02160 movwf Bg_reg 02161 movwf Cg_reg 02162 movwf Dg_reg 02163 02164 next2 02165 movlw 0x02 ; testing for 2 02166 subwf color,w 02167 btfss STATUS,Z 02168 goto next3 02169 02170 movfw fad2 02171 movwf Ab_reg 02172 movwf Bb_reg 02173 movwf Cb_reg 02174 movwf Db_reg 02175 02176 next3 02177 movfw pspeed 02178 call strobe_delay 02179 02180 return 02181 #endif 02182 02183 02184 #ifdef PATTERN3 02185 ;********************************************************************** 0378 02186 table_type_3 02187 ;********************************************************************** 02188 ; 02189 ; 2 bytes 02190 ; 02191 ; RRRRGGGG BBBBCDDD MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 59 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02192 ; 02193 ; RRRR = bit of red LEDs to turn on 02194 ; GGGG = bit of red LEDs to turn on 02195 ; BBBB = bit of red LEDs to turn on 02196 ; CDDD = a repeat counter. 02197 ; 02198 ; For badge blinkies 02199 ; C is 13th LED 02200 ; DDD = is repeat count 02201 02202 var p2count 00000062 M p2count equ mem 00000063 M mem = mem + 1 M if (mem > 0xef) M error 'Too much var space used' 02203 0378 22E1 02204 call get_next_pattern_entry 0379 00DB 02205 movwf in0 02206 037A 22E1 02207 call get_next_pattern_entry 037B 00DC 02208 movwf in1 02209 02210 #ifdef BADGE 02211 movlw b'00000111' 02212 #else 037C 300F 02213 movlw b'00001111' 02214 #endif 037D 055C 02215 andwf in1,w 037E 00E2 02216 movwf p2count 037F 0AE2 02217 incf p2count,f 0380 0DE2 02218 rlf p2count,f 0381 0DE2 02219 rlf p2count,f 02220 0382 02221 p2loop 0382 085F 02222 movfw pspeed 0383 2387 02223 call display_1bit 02224 0384 0BE2 02225 decfsz p2count,f 0385 2B82 02226 goto p2loop 02227 0386 0008 02228 return 02229 #endif 02230 02231 02232 #ifdef PATTERN4 02233 ;********************************************************************** 02234 table_type_4 02235 ;********************************************************************** 02236 02237 ;use delay1 02238 ;use fad 02239 ;use color 02240 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 60 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02241 02242 incf delay1,f 02243 02244 movf delay1,w ; testing for 0 02245 btfss STATUS,Z 02246 goto cf_loop2a 02247 02248 movlw TICK_VALUE ; we are using timer0 for the counts, 0 through tick value is LED off. 02249 movwf delay1 02250 02251 ; 02252 ; select a pattern 02253 ; 02254 comf fad,f 02255 movf fad,w ; testing for 0 02256 btfss fad,0 02257 incf color,f 02258 02259 cf_loop2a 02260 movf delay1,w ; fading up 02261 btfsc fad,0 02262 comf delay1,w ; dafinf down 02263 02264 movwf Ar_reg 02265 movwf Ag_reg 02266 movwf Ab_reg 02267 movwf Br_reg 02268 movwf Bg_reg 02269 movwf Bb_reg 02270 movwf Cr_reg 02271 movwf Cg_reg 02272 movwf Cb_reg 02273 movwf Dr_reg 02274 movwf Dg_reg 02275 movwf Db_reg 02276 02277 btfsc color,0 02278 clrf Ar_reg 02279 btfsc color,1 02280 clrf Ag_reg 02281 btfsc color,2 02282 clrf Ab_reg 02283 btfsc color,0 02284 clrf Br_reg 02285 btfsc color,1 02286 clrf Bg_reg 02287 btfsc color,2 02288 clrf Bb_reg 02289 btfsc color,0 02290 clrf Cr_reg 02291 btfsc color,1 02292 clrf Cg_reg 02293 btfsc color,2 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 61 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02294 clrf Cb_reg 02295 btfsc color,0 02296 clrf Dr_reg 02297 btfsc color,1 02298 clrf Dg_reg 02299 btfsc color,2 02300 clrf Db_reg 02301 02302 btfsc color,3 02303 clrf Ar_reg 02304 btfsc color,3 02305 clrf Ag_reg 02306 btfsc color,3 02307 clrf Ab_reg 02308 02309 btfsc color,4 02310 clrf Br_reg 02311 btfsc color,4 02312 clrf Bg_reg 02313 btfsc color,4 02314 clrf Bb_reg 02315 02316 btfsc color,5 02317 clrf Cr_reg 02318 btfsc color,5 02319 clrf Cg_reg 02320 btfsc color,5 02321 clrf Cb_reg 02322 02323 btfsc color,6 02324 clrf Dr_reg 02325 btfsc color,6 02326 clrf Dg_reg 02327 btfsc color,6 02328 clrf Db_reg 02329 02330 movlw 0x20 02331 call strobe_delay 02332 02333 return 02334 #endif 02335 02336 #ifdef PATTERN5 02337 ;********************************************************************** 02338 table_type_5 02339 ;********************************************************************** 02340 ; 02341 ; 1 bytes 02342 ; 02343 ; ABCDEFX = 7 bits for LEDs. 02344 ; 02345 02346 var p2count MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 62 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02347 02348 call get_next_pattern_entry 02349 movwf in0 02350 02351 movlw 0x04 ; call display 4 times, speed thing 02352 movwf p2count 02353 02354 p2loop 02355 movfw pspeed 02356 call display_1bit 02357 02358 decfsz p2count,f 02359 goto p2loop 02360 02361 return 02362 #endif 02363 02364 #ifdef PATTERN6 02365 ;********************************************************************** 02366 table_type_6 02367 ;********************************************************************** 02368 ; 02369 ; 3 bytes 02370 ; 02371 ; AAAAAAAA AAAAAAAA AAADDDDD 02372 ; 02373 ; A = 19 bits of LED 02374 ; DDDDD = a repeat counter. 02375 02376 var p2count 02377 02378 call get_next_pattern_entry 02379 movwf in0 02380 02381 call get_next_pattern_entry 02382 movwf in1 02383 02384 call get_next_pattern_entry 02385 movwf in2 02386 02387 movlw b'00011111' 02388 andwf in2,w 02389 movwf p2count 02390 incf p2count,f 02391 rlf p2count,f 02392 rlf p2count,f 02393 02394 p2loop 02395 movfw pspeed 02396 call display_1bit 02397 02398 decfsz p2count,f 02399 goto p2loop MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 63 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02400 02401 return 02402 #endif 02403 02404 #define BRIGHT1 0x40 02405 #define BRIGHT2 0xA0 02406 02407 #ifdef PATTERN7 02408 ;********************************************************************** 02409 table_type_7 02410 ;********************************************************************** 02411 ; 02412 ; 1 bytes 02413 ; 02414 ; ABBCCCCC 02415 ; 02416 ; A = shire Right/Left 02417 ; BB = two bit intensity to shift on 02418 ; CCCCC = Number of shifts to loop 02419 ; 02420 ; if CCCCC = 0x11111, specical case: turn all LEDs off. 02421 ; 02422 02423 var t7count 02424 02425 call get_next_pattern_entry 02426 movwf in0 02427 02428 movlw b'00011111' 02429 andwf in0,w 02430 movwf t7count 02431 02432 movlw b'00011111' ; if shiftcount is 31, then clear all LEDs 02433 subwf t7count,w 02434 btfss STATUS,Z 02435 goto t7_loop 02436 02437 clrf in0 ; quick way to clear all the LEDS. 02438 clrf in1 02439 clrf in2 02440 call display_1bit 02441 goto t7_return 02442 02443 02444 t7_loop 02445 btfsc in0,7 02446 goto t7_set19 02447 ; 02448 ; set LED 1 02449 movfw A1_A4_reg ; 18 -> 19 02450 movwf A4_A1_reg 02451 02452 movfw A2_A1_reg ; 17 -> 18 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 64 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02453 movwf A1_A4_reg 02454 02455 movfw A1_A2_reg ; 16 -> 17 02456 movwf A2_A1_reg 02457 02458 movfw A2_A4_reg ; 15 -> 16 02459 movwf A1_A2_reg 02460 02461 movfw A4_A2_reg ; 14 -> 15 02462 movwf A2_A4_reg 02463 02464 movfw A0_A1_reg ; 13 -> 14 02465 movwf A4_A2_reg 02466 02467 movfw A1_A0_reg ; 12 -> 13 02468 movwf A0_A1_reg 02469 02470 movfw A0_A4_reg ; 11 -> 12 02471 movwf A1_A0_reg 02472 02473 movfw A4_A0_reg ; 10 -> 11 02474 movwf A0_A4_reg 02475 02476 movfw A0_A2_reg ; 09 -> 10 02477 movwf A4_A0_reg 02478 02479 movfw A2_A0_reg ; 08 -> 09 02480 movwf A0_A2_reg 02481 02482 movfw A5_A1_reg ; 07 -> 08 02483 movwf A2_A0_reg 02484 02485 movfw A1_A5_reg ; 06 -> 07 02486 movwf A5_A1_reg 02487 02488 movfw A5_A4_reg ; 05 -> 06 02489 movwf A1_A5_reg 02490 02491 movfw A4_A5_reg ; 04 -> 05 02492 movwf A5_A4_reg 02493 02494 movfw A5_A2_reg ; 03 -> 04 02495 movwf A4_A5_reg 02496 02497 movfw A2_A5_reg ; 02 -> 03 02498 movwf A5_A2_reg 02499 02500 movfw A5_A0_reg ; 01 -> 02 02501 movwf A2_A5_reg 02502 02503 clrf A5_A0_reg 02504 movlw BRIGHT1 02505 btfsc in0,5 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 65 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02506 addwf A5_A0_reg,f 02507 movlw BRIGHT2 02508 btfsc in0,6 02509 addwf A5_A0_reg,f 02510 goto t7_cont 02511 ; 02512 ; set LED 19 02513 t7_set19 02514 movfw A2_A5_reg ; 02 -> 01 02515 movwf A5_A0_reg 02516 02517 movfw A5_A2_reg ; 03 -> 02 02518 movwf A2_A5_reg 02519 02520 movfw A4_A5_reg ; 04 -> 03 02521 movwf A5_A2_reg 02522 02523 movfw A5_A4_reg ; 05 -> 04 02524 movwf A4_A5_reg 02525 02526 movfw A1_A5_reg ; 06 -> 05 02527 movwf A5_A4_reg 02528 02529 movfw A5_A1_reg ; 07 -> 06 02530 movwf A1_A5_reg 02531 02532 movfw A2_A0_reg ; 08 -> 07 02533 movwf A5_A1_reg 02534 02535 movfw A0_A2_reg ; 09 -> 08 02536 movwf A2_A0_reg 02537 02538 movfw A4_A0_reg ; 10 -> 09 02539 movwf A0_A2_reg 02540 02541 movfw A0_A4_reg ; 11 -> 10 02542 movwf A4_A0_reg 02543 02544 movfw A1_A0_reg ; 12 -> 11 02545 movwf A0_A4_reg 02546 02547 movfw A0_A1_reg ; 13 -> 12 02548 movwf A1_A0_reg 02549 02550 movfw A4_A2_reg ; 14 -> 13 02551 movwf A0_A1_reg 02552 02553 movfw A2_A4_reg ; 15 -> 14 02554 movwf A4_A2_reg 02555 02556 movfw A1_A2_reg ; 16 -> 15 02557 movwf A2_A4_reg 02558 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 66 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02559 movfw A2_A1_reg ; 17 -> 16 02560 movwf A1_A2_reg 02561 02562 movfw A1_A4_reg ; 18 -> 17 02563 movwf A2_A1_reg 02564 02565 movfw A4_A1_reg ; 19 -> 18 02566 movwf A1_A4_reg 02567 02568 clrf A4_A1_reg 02569 movlw BRIGHT1 02570 btfsc in0,5 02571 addwf A4_A1_reg,f 02572 movlw BRIGHT2 02573 btfsc in0,6 02574 addwf A4_A1_reg,f 02575 02576 t7_cont 02577 02578 movf pspeed,w 02579 call strobe_delay 02580 ; 02581 ; This is a quick hack, because without this button presses are not seen for minutes 02582 ; This early exit might impact the pattern getting displayed. 02583 ; 02584 btfsc button,0 ; if putton pressed show pattern id 02585 goto t7_return 02586 02587 btfsc IR_in_good,0 02588 goto t7_return 02589 02590 decfsz t7count,f 02591 goto t7_loop 02592 02593 t7_return 02594 return 02595 #endif 02596 02597 02598 #ifdef PATTERN8 02599 ;********************************************************************** 02600 table_type_8 ; - 19 LED fader 02601 ;********************************************************************** 02602 02603 var delay1 02604 var fad 02605 var color 02606 02607 02608 incf delay1,f 02609 02610 movf delay1,w ; testing for 0 02611 btfss STATUS,Z MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 67 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02612 goto cf8_loop2a 02613 02614 movlw TICK_VALUE ; we are using timer0 for the counts, 0 through tick value is LED off. 02615 movwf delay1 02616 02617 ; 02618 ; select a pattern 02619 ; 02620 comf fad,f 02621 movf fad,w ; testing for 0 02622 btfss fad,0 02623 incf color,f 02624 02625 cf8_loop2a 02626 movf delay1,w ; fading up 02627 btfsc fad,0 02628 comf delay1,w ; fading down 02629 02630 movwf A5_A0_reg ; 01 02631 movwf A2_A5_reg ; 02 02632 movwf A5_A2_reg ; 03 02633 movwf A4_A5_reg ; 04 02634 movwf A5_A4_reg ; 05 02635 movwf A1_A5_reg ; 06 02636 movwf A5_A1_reg ; 07 02637 movwf A2_A0_reg ; 08 02638 movwf A0_A2_reg ; 09 02639 movwf A4_A0_reg ; 10 02640 movwf A0_A4_reg ; 11 02641 movwf A1_A0_reg ; 12 02642 movwf A0_A1_reg ; 13 02643 movwf A4_A2_reg ; 14 02644 movwf A2_A4_reg ; 15 02645 movwf A1_A2_reg ; 16 02646 movwf A2_A1_reg ; 17 02647 movwf A1_A4_reg ; 18 02648 movwf A4_A1_reg ; 19 02649 02650 movlw 0x03 02651 call strobe_delay 02652 02653 return 02654 #endif 02655 02656 #ifdef PATTERN9 02657 ;********************************************************************** 02658 table_type_9 02659 ;********************************************************************** 02660 ; 02661 ; 3 bytes 02662 ; 02663 ; AAAAAAAA AAAAAAAA AAADDDDD 02664 ; MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 68 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02665 ; A = 19 bits of LED 02666 ; DDDDD = a repeat counter. 02667 02668 var p2count 02669 02670 call get_next_pattern_entry 02671 movwf in0 02672 02673 call get_next_pattern_entry 02674 movwf in1 02675 02676 call get_next_pattern_entry 02677 movwf in2 02678 02679 call get_next_pattern_entry 02680 movwf in3 02681 02682 call get_next_pattern_entry 02683 movwf in4 02684 02685 movlw b'00011111' 02686 andwf in2,w 02687 movwf p2count 02688 incf p2count,f 02689 rlf p2count,f 02690 rlf p2count,f 02691 02692 p2loop 02693 movfw pspeed 02694 call display_1bit 02695 02696 decfsz p2count,f 02697 goto p2loop 02698 02699 return 02700 #endif 02701 02702 #ifdef PATTERN10 02703 ;********************************************************************** 02704 table_type_10 02705 ;********************************************************************** 02706 ; 76543210 <-- bits 02707 ; AABBCCDD <-- LEDs 02708 ; 01010101 <-- stays on for 1 unit - b'01' 02709 ; 10101010 <-- stays on for 2 units - b'10' 02710 ; 11111111 <-- stays on for 3 units - b'11' 02711 02712 ; in0 LEDs 0,1 02713 ; in1 LEDs 2,3 02714 ; in2 LEDs 4,5 02715 ; in3 LED 6 02716 02717 call get_next_pattern_entry MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 69 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02718 movwf in0 02719 02720 call get_next_pattern_entry 02721 movwf in1 02722 02723 call get_next_pattern_entry ;4rgb 02724 movwf in2 ;4rgb 02725 02726 call get_next_pattern_entry ;4rgb 02727 movwf in3 ;4rgb 02728 02729 02730 02731 movf pspeed,w 02732 movwf speed 02733 call display_2bit 02734 02735 return 02736 #endif 02737 02738 #ifdef PATTERN11 02739 ;********************************************************************** 02740 table_type_11 02741 ;********************************************************************** 02742 ; 76543210 <-- bits 02743 ; AABBCCDD <-- LEDs 02744 ; 01010101 <-- stays on for 1 unit - b'01' 02745 ; 10101010 <-- stays on for 2 units - b'10' 02746 ; 11111111 <-- stays on for 3 units - b'11' 02747 02748 ; in0 LEDs 0,1,3,4 02749 ; in1 LEDs 5,6,C 02750 02751 call get_next_pattern_entry 02752 movwf in0 02753 02754 call get_next_pattern_entry 02755 movwf in1 02756 02757 movf pspeed,w 02758 movwf speed 02759 call display_2bit 02760 02761 return 02762 #endif 02763 02764 #ifdef DISPLAY_1BIT_A 02765 ;********************************************************************** 02766 display_1bit ; Mono 6 LEDs, Badge LED add center (IR) for 7 02767 ;********************************************************************** 02768 02769 movwf speed ;w has the speed/delay 02770 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 70 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02771 clrf Ar_reg 02772 btfsc in0,7 02773 comf Ar_reg,f 02774 02775 clrf Ag_reg 02776 btfsc in0,5 02777 comf Ag_reg,f 02778 02779 clrf Ab_reg 02780 btfsc in0,3 02781 comf Ab_reg,f 02782 02783 clrf Cr_reg 02784 btfsc in0,6 02785 comf Cr_reg,f 02786 02787 clrf Cg_reg 02788 btfsc in0,4 02789 comf Cg_reg,f 02790 02791 clrf Cb_reg 02792 btfsc in0,2 02793 comf Cb_reg,f 02794 02795 #ifdef BADGE 02796 clrf Center_reg 02797 btfsc in0,1 02798 comf Center_reg,f 02799 #endif 02800 02801 movf speed,w 02802 call strobe_delay 02803 02804 return 02805 #endif 02806 #ifdef DISPLAY_1BIT_B 02807 ;********************************************************************** 02808 display_1bit ; 19 Circle LEDs (38 LEDs) 02809 ;********************************************************************** 02810 02811 movwf speed ;w has the speed/delay 02812 02813 clrf A0_A1_reg ; 12R 02814 btfsc in2,1 02815 comf A0_A1_reg,f 02816 02817 clrf A0_A2_reg ; 11R 02818 btfsc in2,3 02819 comf A0_A2_reg,f 02820 02821 clrf A0_C0_reg ; 10R 02822 btfsc in2,5 02823 comf A0_C0_reg,f MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 71 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02824 02825 clrf A0_C1_reg ; 9R 02826 btfsc in2,7 02827 comf A0_C1_reg,f 02828 02829 clrf A0_C2_reg ; 18R 02830 btfsc in2,4 02831 comf A0_C2_reg,f 02832 02833 clrf A0_C4_reg ; 17R 02834 btfsc in0,3 02835 comf A0_C4_reg,f 02836 02837 clrf A1_A0_reg ; 12G 02838 btfsc in2,0 02839 comf A1_A0_reg,f 02840 02841 clrf A1_A2_reg ; 1R 02842 btfsc in0,7 02843 comf A1_A2_reg,f 02844 02845 clrf A1_C0_reg ; 2R 02846 btfsc in0,5 02847 comf A1_C0_reg,f 02848 02849 clrf A1_C1_reg ; 14R 02850 btfsc in3,5 02851 comf A1_C1_reg,f 02852 02853 clrf A1_C2_reg ; 13R 02854 btfsc in3,7 02855 comf A1_C2_reg,f 02856 02857 clrf A1_C4_reg ; 19R 02858 btfsc in4,3 02859 comf A1_C4_reg,f 02860 02861 clrf A2_A0_reg ; 11G 02862 btfsc in2,2 02863 comf A2_A0_reg,f 02864 02865 clrf A2_A1_reg ; 1G 02866 btfsc in0,6 02867 comf A2_A1_reg,f 02868 02869 clrf A2_C0_reg ; 3R 02870 btfsc in0,3 02871 comf A2_C0_reg,f 02872 02873 clrf A2_C1_reg ; 4R 02874 btfsc in0,1 02875 comf A2_C1_reg,f 02876 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 72 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02877 clrf A2_C2_reg ; 15R 02878 btfsc in3,3 02879 comf A2_C2_reg,f 02880 02881 clrf A2_C4_reg ; 16R 02882 btfsc in3,1 02883 comf A2_C4_reg,f 02884 02885 clrf C0_A0_reg ; 10G 02886 btfsc in2,4 02887 comf C0_A0_reg,f 02888 02889 clrf C0_A1_reg ; 2G 02890 btfsc in0,4 02891 comf C0_A1_reg,f 02892 02893 clrf C0_A2_reg ; 3G 02894 btfsc in0,2 02895 comf C0_A2_reg,f 02896 02897 clrf C0_C1_reg ; 5G 02898 btfsc in1,7 02899 comf C0_C1_reg,f 02900 02901 clrf C0_C2_reg ; 6R 02902 btfsc in1,5 02903 comf C0_C2_reg,f 02904 02905 clrf C0_C4_reg ; 7R 02906 btfsc in1,3 02907 comf C0_C4_reg,f 02908 02909 ; clrf C1_A0_reg ; 9G 02910 ; btfsc in2,6 02911 ; comf C1_A0_reg,f 02912 02913 ; clrf C1_A1_reg ; 14G 02914 ; btfsc in3,4 02915 ; comf C1_A1_reg,f 02916 02917 ; clrf C1_A2_reg ; 4G 02918 ; btfsc in0,0 02919 ; comf C1_A2_reg,f 02920 02921 ; clrf C1_C0_reg ; 5G 02922 ; btfsc in1,6 02923 ; comf C1_C0_reg,f 02924 02925 ; clrf C1_C2_reg ; no LED 02926 02927 ; clrf C1_C4_reg ; 8R 02928 ; btfsc in1,1 02929 ; comf C1_C4_reg,f MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 73 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02930 02931 ; clrf C2_A0_reg ; 18G 02932 ; btfsc in4,4 02933 ; comf C2_A0_reg,f 02934 02935 ; clrf C2_A1_reg ; 13G 02936 ; btfsc in3,6 02937 ; comf C2_A1_reg,f 02938 02939 ; clrf C2_A2_reg ; 15G 02940 ; btfsc in3,2 02941 ; comf C2_A2_reg,f 02942 02943 ; clrf C2_C0_reg ; 6G 02944 ; btfsc in1,4 02945 ; comf C2_C0_reg,f 02946 02947 ; clrf C2_C1_reg ; no LED 02948 02949 ; clrf C2_C4_reg ; no LED 02950 02951 ; clrf C4_A0_reg ; 17G 02952 ; btfsc in4,6 02953 ; comf C4_A0_reg,f 02954 02955 ; clrf C4_A1_reg ; 19G 02956 ; btfsc in4,2 02957 ; comf C4_A1_reg,f 02958 02959 ; clrf C4_A2_reg ; 16G 02960 ; btfsc in3,0 02961 ; comf C4_A2_reg,f 02962 02963 ; clrf C4_C0_reg ; 7G 02964 ; btfsc in1,2 02965 ; comf C4_C0_reg,f 02966 02967 ; clrf C4_C1_reg ; 8G 02968 ; btfsc in1,0 02969 ; comf C4_C1_reg,f 02970 02971 ; clrf C4_C2_reg ; no LED 02972 02973 ; movf speed,w 02974 ; call strobe_delay 02975 02976 return 02977 #endif 02978 #ifdef DISPLAY_1BIT_C 02979 ;********************************************************************** 0387 02980 display_1bit ; 12 LEDs, BI6 & 4RGB Badge LED add center (IR) for 13 02981 ;********************************************************************** 02982 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 74 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0387 00DE 02983 movwf speed ;w has the speed/delay 02984 0388 01A7 02985 clrf Ar_reg 0389 1BDB 02986 btfsc in0,7 038A 09A7 02987 comf Ar_reg,f 02988 038B 01A8 02989 clrf Ag_reg 038C 19DB 02990 btfsc in0,3 038D 09A8 02991 comf Ag_reg,f 02992 038E 01A9 02993 clrf Ab_reg 038F 1BDC 02994 btfsc in1,7 0390 09A9 02995 comf Ab_reg,f 02996 0391 01AA 02997 clrf Br_reg 0392 1B5B 02998 btfsc in0,6 0393 09AA 02999 comf Br_reg,f 03000 0394 01AB 03001 clrf Bg_reg 0395 195B 03002 btfsc in0,2 0396 09AB 03003 comf Bg_reg,f 03004 0397 01AC 03005 clrf Bb_reg 0398 1B5C 03006 btfsc in1,6 0399 09AC 03007 comf Bb_reg,f 03008 039A 01AD 03009 clrf Cr_reg 039B 1ADB 03010 btfsc in0,5 039C 09AD 03011 comf Cr_reg,f 03012 039D 01AE 03013 clrf Cg_reg 039E 18DB 03014 btfsc in0,1 039F 09AE 03015 comf Cg_reg,f 03016 03A0 01AF 03017 clrf Cb_reg 03A1 1ADC 03018 btfsc in1,5 03A2 09AF 03019 comf Cb_reg,f 03020 03A3 01B0 03021 clrf Dr_reg 03A4 1A5B 03022 btfsc in0,4 03A5 09B0 03023 comf Dr_reg,f 03024 03A6 01B1 03025 clrf Dg_reg 03A7 185B 03026 btfsc in0,0 03A8 09B1 03027 comf Dg_reg,f 03028 03A9 01B2 03029 clrf Db_reg 03AA 1A5C 03030 btfsc in1,4 03AB 09B2 03031 comf Db_reg,f 03032 03033 #ifdef BADGE 03034 clrf Center_reg 03035 btfsc in1,3 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 75 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03036 comf Center_reg,f 03037 #endif 03038 03AC 085E 03039 movf speed,w 03AD 22A4 03040 call strobe_delay 03041 03AE 0008 03042 return 03043 #endif 03044 #ifdef DISPLAY_1BIT_D 03045 ;********************************************************************** 03046 display_1bit ; 20 LEDs 03047 ;********************************************************************** 03048 03049 movwf speed ;w has the speed/delay 03050 03051 clrf A0_A5_reg ; IR 03052 03053 clrf A5_A0_reg ; 01 03054 btfsc in0,7 03055 comf A5_A0_reg,f 03056 03057 clrf A2_A5_reg ; 02 03058 btfsc in0,6 03059 comf A2_A5_reg,f 03060 03061 clrf A5_A2_reg ; 03 03062 btfsc in0,5 03063 comf A5_A2_reg,f 03064 03065 clrf A4_A5_reg ; 04 03066 btfsc in0,4 03067 comf A4_A5_reg,f 03068 03069 clrf A5_A4_reg ; 05 03070 btfsc in0,3 03071 comf A5_A4_reg,f 03072 03073 clrf A1_A5_reg ; 06 03074 btfsc in0,2 03075 comf A1_A5_reg,f 03076 03077 clrf A5_A1_reg ; 07 03078 btfsc in0,1 03079 comf A5_A1_reg,f 03080 03081 clrf A2_A0_reg ; 08 03082 btfsc in0,0 03083 comf A2_A0_reg,f 03084 03085 clrf A0_A2_reg ; 09 03086 btfsc in1,7 03087 comf A0_A2_reg,f 03088 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 76 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03089 clrf A4_A0_reg ; 10 03090 btfsc in1,6 03091 comf A4_A0_reg,f 03092 03093 clrf A0_A4_reg ; 11 03094 btfsc in1,5 03095 comf A0_A4_reg,f 03096 03097 clrf A1_A0_reg ; 12 03098 btfsc in1,4 03099 comf A1_A0_reg,f 03100 03101 clrf A0_A1_reg ; 13 03102 btfsc in1,3 03103 comf A0_A1_reg,f 03104 03105 clrf A4_A2_reg ; 14 03106 btfsc in1,2 03107 comf A4_A2_reg,f 03108 03109 clrf A2_A4_reg ; 15 03110 btfsc in1,1 03111 comf A2_A4_reg,f 03112 03113 clrf A1_A2_reg ; 16 03114 btfsc in1,0 03115 comf A1_A2_reg,f 03116 03117 clrf A2_A1_reg ; 17 03118 btfsc in2,7 03119 comf A2_A1_reg,f 03120 03121 clrf A1_A4_reg ; 18 03122 btfsc in2,6 03123 comf A1_A4_reg,f 03124 03125 clrf A4_A1_reg ; 19 03126 btfsc in2,5 03127 comf A4_A1_reg,f 03128 03129 03130 movf speed,w 03131 call strobe_delay 03132 03133 return 03134 #endif 03135 #ifdef DISPLAY_2BIT_A 03136 ;********************************************************************** 03137 display_2bit 03138 ;********************************************************************** 03139 movf speed,w ;enter here if repeat count is in speed 03140 display_w_2bit ;enter here if repeat count is in W reg 03141 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 77 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03142 ; 76543210 <-- bits 03143 ; AABBCCDD <-- LEDs 03144 ; 01010101 <-- stays on for 1 unit - b'01' 03145 ; 10101010 <-- stays on for 2 units - b'10' 03146 ; 11111111 <-- stays on for 3 units - b'11' 03147 03148 ; in0 LEDs 1,2,3,4 03149 ; in1 LEDs 5,6,C 03150 03151 03152 clrf Ar_reg 03153 movlw BRIGHT1 03154 btfsc in0,6 03155 addwf Ar_reg,f 03156 movlw BRIGHT2 03157 btfsc in0,7 03158 addwf Ar_reg,f 03159 03160 clrf Ag_reg 03161 movlw BRIGHT1 03162 btfsc in0,2 03163 addwf Ag_reg,f 03164 movlw BRIGHT2 03165 btfsc in0,3 03166 addwf Ag_reg,f 03167 03168 clrf Ab_reg 03169 movlw BRIGHT1 03170 btfsc in1,6 03171 addwf Ab_reg,f 03172 movlw BRIGHT2 03173 btfsc in1,7 03174 addwf Ab_reg,f 03175 03176 clrf Cr_reg 03177 movlw BRIGHT1 03178 btfsc in0,4 03179 addwf Cr_reg,f 03180 movlw BRIGHT2 03181 btfsc in0,5 03182 addwf Cr_reg,f 03183 03184 clrf Cg_reg 03185 movlw BRIGHT1 03186 btfsc in0,0 03187 addwf Cg_reg,f 03188 movlw BRIGHT2 03189 btfsc in0,1 03190 addwf Cg_reg,f 03191 03192 clrf Cb_reg 03193 movlw BRIGHT1 03194 btfsc in1,4 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 78 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03195 addwf Cb_reg,f 03196 movlw BRIGHT2 03197 btfsc in1,5 03198 addwf Cb_reg,f 03199 03200 #ifdef BADGE 03201 clrf Center_reg 03202 movlw BRIGHT1 03203 btfsc in1,2 03204 addwf Center_reg,f 03205 movlw BRIGHT2 03206 btfsc in1,3 03207 addwf Center_reg,f 03208 #endif 03209 03210 movf speed,w 03211 call strobe_delay 03212 movf speed,w 03213 call strobe_delay 03214 movf speed,w 03215 call strobe_delay 03216 03217 return 03218 #endif 03219 03220 #ifdef DISPLAY_2BIT_C 03221 ;********************************************************************** 03AF 03222 display_2bit 03223 ;********************************************************************** 03AF 085E 03224 movf speed,w ;enter here if repeat count is in speed 03B0 03225 display_w_2bit ;enter here if repeat count is in W reg 03226 03227 ; 76543210 <-- bits 03228 ; AABBCCDD <-- LEDs 03229 ; 01010101 <-- stays on for 1 unit - b'01' 03230 ; 10101010 <-- stays on for 2 units - b'10' 03231 ; 11111111 <-- stays on for 3 units - b'11' 03232 03233 ; in0 red 03234 ; in1 green 03235 ; in2 blue 03236 03B0 01A7 03237 clrf Ar_reg 03B1 3040 03238 movlw BRIGHT1 03B2 1B5B 03239 btfsc in0,6 03B3 07A7 03240 addwf Ar_reg,f 03B4 30A0 03241 movlw BRIGHT2 03B5 1BDB 03242 btfsc in0,7 03B6 07A7 03243 addwf Ar_reg,f 03244 03B7 01A8 03245 clrf Ag_reg 03B8 3040 03246 movlw BRIGHT1 03B9 1B5C 03247 btfsc in1,6 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 79 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03BA 07A8 03248 addwf Ag_reg,f 03BB 30A0 03249 movlw BRIGHT2 03BC 1BDC 03250 btfsc in1,7 03BD 07A8 03251 addwf Ag_reg,f 03252 03BE 01A9 03253 clrf Ab_reg 03BF 3040 03254 movlw BRIGHT1 03C0 1B5D 03255 btfsc in2,6 03C1 07A9 03256 addwf Ab_reg,f 03C2 30A0 03257 movlw BRIGHT2 03C3 1BDD 03258 btfsc in2,7 03C4 07A9 03259 addwf Ab_reg,f 03260 03C5 01AA 03261 clrf Br_reg 03C6 3040 03262 movlw BRIGHT1 03C7 1A5B 03263 btfsc in0,4 03C8 07AA 03264 addwf Br_reg,f 03C9 30A0 03265 movlw BRIGHT2 03CA 1ADB 03266 btfsc in0,5 03CB 07AA 03267 addwf Br_reg,f 03268 03CC 01AB 03269 clrf Bg_reg 03CD 3040 03270 movlw BRIGHT1 03CE 1A5C 03271 btfsc in1,4 03CF 07AB 03272 addwf Bg_reg,f 03D0 30A0 03273 movlw BRIGHT2 03D1 1ADC 03274 btfsc in1,5 03D2 07AB 03275 addwf Bg_reg,f 03276 03D3 01AC 03277 clrf Bb_reg 03D4 3040 03278 movlw BRIGHT1 03D5 1A5D 03279 btfsc in2,4 03D6 07AC 03280 addwf Bb_reg,f 03D7 30A0 03281 movlw BRIGHT2 03D8 1ADD 03282 btfsc in2,5 03D9 07AC 03283 addwf Bb_reg,f 03284 03DA 01AD 03285 clrf Cr_reg 03DB 3040 03286 movlw BRIGHT1 03DC 195B 03287 btfsc in0,2 03DD 07AD 03288 addwf Cr_reg,f 03DE 30A0 03289 movlw BRIGHT2 03DF 19DB 03290 btfsc in0,3 03E0 07AD 03291 addwf Cr_reg,f 03292 03E1 01AE 03293 clrf Cg_reg 03E2 3040 03294 movlw BRIGHT1 03E3 195C 03295 btfsc in1,2 03E4 07AE 03296 addwf Cg_reg,f 03E5 30A0 03297 movlw BRIGHT2 03E6 19DC 03298 btfsc in1,3 03E7 07AE 03299 addwf Cg_reg,f 03300 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 80 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03E8 01AF 03301 clrf Cb_reg 03E9 3040 03302 movlw BRIGHT1 03EA 195D 03303 btfsc in2,2 03EB 07AF 03304 addwf Cb_reg,f 03EC 30A0 03305 movlw BRIGHT2 03ED 19DD 03306 btfsc in2,3 03EE 07AF 03307 addwf Cb_reg,f 03308 03EF 01B0 03309 clrf Dr_reg 03F0 3040 03310 movlw BRIGHT1 03F1 185B 03311 btfsc in0,0 03F2 07B0 03312 addwf Dr_reg,f 03F3 30A0 03313 movlw BRIGHT2 03F4 18DB 03314 btfsc in0,1 03F5 07B0 03315 addwf Dr_reg,f 03316 03F6 01B1 03317 clrf Dg_reg 03F7 3040 03318 movlw BRIGHT1 03F8 185C 03319 btfsc in1,0 03F9 07B1 03320 addwf Dg_reg,f 03FA 30A0 03321 movlw BRIGHT2 03FB 18DC 03322 btfsc in1,1 03FC 07B1 03323 addwf Dg_reg,f 03324 03FD 01B2 03325 clrf Db_reg 03FE 3040 03326 movlw BRIGHT1 03FF 185D 03327 btfsc in2,0 0400 07B2 03328 addwf Db_reg,f 0401 30A0 03329 movlw BRIGHT2 0402 18DD 03330 btfsc in2,1 0403 07B2 03331 addwf Db_reg,f 03332 03333 #ifdef BADGE 03334 clrf Center_reg 03335 movlw BRIGHT1 03336 btfsc in3,6 03337 addwf Center_reg,f 03338 movlw BRIGHT2 03339 btfsc in3,7 03340 addwf Center_reg,f 03341 #endif 03342 0404 085E 03343 movf speed,w 0405 22A4 03344 call strobe_delay 0406 085E 03345 movf speed,w 0407 22A4 03346 call strobe_delay 0408 085E 03347 movf speed,w 0409 22A4 03348 call strobe_delay 03349 040A 0008 03350 return 03351 #endif 03352 03353 ;********************************************************************** MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 81 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03354 ; IR Tester 03355 ;********************************************************************** 040B 03356 IR_Tester 040B 03357 itop 040B 3002 03358 movlw 0x02 040C 0233 03359 subwf instate,w 040D 1C03 03360 btfss STATUS,C 040E 0103 03361 clrw 040F 00DB 03362 movwf in0 03363 0410 3000 03364 movlw 0x00 0411 00DC 03365 movwf in1 03366 0412 3001 03367 movlw 0x01 0413 2387 03368 call display_1bit 03369 03370 ; 03371 ; Check for push button 03372 ; 0414 1C3A 03373 btfss button,0 0415 2C25 03374 goto iloop1 0416 01B4 03375 clrf max_instate 0417 01B3 03376 clrf instate 03377 0418 084A 03378 movf scount,w ; F22 0419 3E00 03379 addlw 0 ; F23 041A 1D03 03380 btfss STATUS,Z ; F24 041B 2C25 03381 goto iloop1 03382 041C 01DB 03383 clrf in0 041D 01DC 03384 clrf in1 041E 09DC 03385 comf in1,f 03386 041F 30FF 03387 movlw 0xFF 0420 2387 03388 call display_1bit 03389 03390 ; send an IR signel 0421 01C2 03391 clrf out_address ; address 0x00 "TV remote" 0422 300C 03392 movlw 0x0c 0423 00C3 03393 movwf out_command ; code 0x0c (on/off) 0424 223C 03394 call rf_command_out 03395 03396 ; 03397 ; Check for IR Command 03398 ; 0425 03399 iloop1 0425 1C3D 03400 btfss IR_in_good,0 0426 2C0B 03401 goto itop 0427 01BD 03402 clrf IR_in_good 03403 03404 ; flash all LEDs Red 0428 30F0 03405 movlw 0xF0 0429 00DB 03406 movwf in0 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 82 LOC OBJECT CODE LINE SOURCE TEXT VALUE 042A 01DC 03407 clrf in1 03408 042B 307F 03409 movlw 0x7f 042C 2387 03410 call display_1bit 03411 03412 ; flash all LEDs off 042D 01DB 03413 clrf in0 042E 01DC 03414 clrf in1 03415 042F 303F 03416 movlw 0x3f 0430 2387 03417 call display_1bit 03418 03419 ; flash all LEDs Red 0431 30F0 03420 movlw 0xF0 0432 00DB 03421 movwf in0 0433 01DC 03422 clrf in1 03423 0434 307F 03424 movlw 0x7f 0435 2387 03425 call display_1bit 03426 03427 ; display command and address 0436 0836 03428 movf command,w 0437 00DB 03429 movwf in0 0438 0837 03430 movf address,w 0439 00DC 03431 movwf in1 03432 043A 30FF 03433 movlw 0xff 043B 2387 03434 call display_1bit 043C 30FF 03435 movlw 0xff 043D 2387 03436 call display_1bit 043E 01B4 03437 clrf max_instate 043F 01B3 03438 clrf instate 03439 0440 2C0B 03440 goto itop 03441 03442 03443 ; 03444 ; M A I N 03445 ; 03446 ;********************************************************************** 0441 03447 main 03448 ;********************************************************************** 0441 01BA 03449 clrf button 0442 0185 03450 clrf PORTA 0443 0181 03451 clrf TMR0 0444 01D9 03452 clrf pattern 0445 01CA 03453 clrf scount 0446 01B8 03454 clrf toggle 0447 01B7 03455 clrf address 0448 01B6 03456 clrf command 0449 01B9 03457 clrf IR_lhalf 044A 01B3 03458 clrf instate 044B 01B4 03459 clrf max_instate MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 83 LOC OBJECT CODE LINE SOURCE TEXT VALUE 044C 01BD 03460 clrf IR_in_good 044D 01A2 03461 clrf dcycle 03462 #ifdef PATTERN2 03463 clrf delay1 03464 clrf fad 03465 clrf color 03466 #endif 03467 #ifdef MONO 03468 clrf Br_reg 03469 clrf Bg_reg 03470 clrf Bb_reg 03471 clrf Dr_reg 03472 clrf Dg_reg 03473 clrf Db_reg 03474 #endif 03475 044E 3007 03476 movlw 0x07 044F 0099 03477 movwf CMCON0 ;turn off comparator 03478 0450 1683 03479 setbank1 03480 03481 ; set up TMR0 & pullups 03482 ; +---------- disable pullups (1) 03483 ; |+--------- interrupt edge select (don't care) 03484 ; ||+-------- TMR0 source = internal clock (0) 03485 ; |||+------- TMR0 source edge select (don't care) 03486 ; ||||+------ assign prescaler to TMR0 (0) 03487 ; |||||+++--- prescaler set to 8X (010) 03488 ; |||||||| 0451 3082 03489 movlw b'10000010' 0452 0081 03490 movwf OPTION_REG 03491 03492 0453 3070 03493 movlw b'01110000' ;switch to 8 MHz clock 0454 048F 03494 iorwf OSCCON,f 03495 0455 019F 03496 clrf ANSEL ;set pins to digital 03497 03498 #ifdef __16F688 03499 ; setup timer0 03500 bcf OPTION_REG,T0CS 03501 #endif 03502 0456 1283 03503 setbank0 03504 03505 ; enable timer0 interupt 0457 168B 03506 bsf INTCON,T0IE 0458 178B 03507 bsf INTCON,GIE 03508 0459 03509 loop_ddf 03510 ; flash all LEDs on This kills some time, allowing us to sample the button and IR-Rx 0459 30FF 03511 movlw b'11111111' 03512 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 84 LOC OBJECT CODE LINE SOURCE TEXT VALUE 045A 00DB 03513 movwf in0 045B 00DC 03514 movwf in1 045C 00DD 03515 movwf in2 03516 #ifdef C19 03517 movwf in3 03518 movwf in4 03519 #endif 03520 045D 30FF 03521 movlw 0xff 045E 2387 03522 call display_1bit 03523 03524 03525 ; Trun all the LEDs off 045F 01DB 03526 clrf in0 0460 01DC 03527 clrf in1 0461 01DD 03528 clrf in2 03529 #ifdef C19 03530 clrf in3 03531 clrf in4 03532 #endif 03533 0462 30FF 03534 movlw 0xff 0463 2387 03535 call display_1bit 03536 03537 ; if button pressed durring powerup run IR_Tester 03538 ; else run pattern driver 03539 ; 0464 1C3A 03540 btfss button,0 0465 2B1F 03541 goto pattern_driver 0466 230E 03542 call toggle_demo 03543 #ifdef ENABLE_IR 0467 2C0B 03544 goto IR_Tester 03545 #else 03546 goto pattern_driver 03547 #endif 03548 03549 ;********************************************************************** 0468 03550 table_lookup 03551 ;********************************************************************** 0468 0852 03552 movf tbl_hi,w 0469 008A 03553 movwf PCLATH 046A 0875 03554 movf pindex,w 046B 0753 03555 addwf tbl_low,w 046C 1803 03556 btfsc STATUS,0 ; check carry flag 046D 0A8A 03557 incf PCLATH,f 046E 0082 03558 movwf PCL 03559 03560 ;********************************************************************** 046F 03561 MasterTable 03562 ;********************************************************************** 03563 make_mtab NUM_TAB 0000 M local i = 0 M while i <= NUM_TAB MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 85 LOC OBJECT CODE LINE SOURCE TEXT VALUE 046F 3404 348D M dt HIGH table0, LOW table0 00000001 M i += 1 0471 3404 348D M dt HIGH table1, LOW table1 00000002 M i += 1 0473 3404 3496 M dt HIGH table2, LOW table2 00000003 M i += 1 0475 3404 34CF M dt HIGH table3, LOW table3 00000004 M i += 1 0477 3405 343E M dt HIGH table4, LOW table4 00000005 M i += 1 0479 3405 3477 M dt HIGH table5, LOW table5 00000006 M i += 1 047B 3405 347E M dt HIGH table6, LOW table6 00000007 M i += 1 047D 3405 348D M dt HIGH table7, LOW table7 00000008 M i += 1 047F 3405 349C M dt HIGH table8, LOW table8 00000009 M i += 1 0481 3405 34AB M dt HIGH table9, LOW table9 0000000A M i += 1 0483 3405 34C4 M dt HIGH table10, LOW table10 0000000B M i += 1 0485 3405 34D7 M dt HIGH table11, LOW table11 0000000C M i += 1 0487 3405 34E8 M dt HIGH table12, LOW table12 0000000D M i += 1 0489 3406 3421 M dt HIGH table13, LOW table13 0000000E M i += 1 048B 3406 3436 M dt HIGH table14, LOW table14 0000000F M i += 1 M endw 03564 03565 03566 03567 ;********************************************************************** 048D 03568 table0 ; dummy entry, actual data for pattern 0 is in the EEPROM 03569 ;********************************************************************** 03570 03571 #ifdef RGB4 03572 #include <4rgb_patterns.asm> 03573 #endif 03574 #ifdef BI6 03575 #ifdef MONO 03576 #ifdef BADGE 03577 #include <6led+c_patterns.asm> 03578 #else 03579 #include <6led_patterns.asm> 03580 #endif 03581 #else 03582 #ifdef BADGE 03583 #include <6bi+c_patterns.asm> 03584 #else 03585 #include <6bi_patterns.asm> MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 86 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ;********************************************************************** 00002 ; Copyright (C) 2005,2006,2007 Dwayne Forsyth 00003 ; 00004 ; This program is free software; you can redistribute it and/or 00005 ; modify it under the terms of the GNU General Public License 00006 ; as published by the Free Software Foundation; either version 2 00007 ; of the License, or (at your option) any later version. 00008 ; 00009 ; This program is distributed in the hope that it will be useful, 00010 ; but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 ; GNU General Public License for more details. 00013 ; 00014 ; You should have received a copy of the GNU General Public License 00015 ; along with this program; if not, write to the 00016 ; 00017 ; Free Software Foundation, Inc. 00018 ; 51 Franklin Street, Fifth Floor 00019 ; Boston, MA 02110-1301, USA. 00020 ; 00021 ;********************************************************************** 00022 00023 00024 ;********************************************************************** 00025 ; DF1 - retro 00026 ;********************************************************************** 00027 00028 start_pattern 3, 0x30 048D M table1 M if (3 == 1) || (3 == 6) M dt 3,0x30,(endpat1-$)/3 ;tbltype1,speed,length M else M if (3 == 3) || (3 == 0x0b) 048D 3403 3430 3403 M dt 3,0x30,(endpat1-$)/2 ;tbltype1,speed,length M else M if (3 == 9) M dt 3,0x30,(endpat1-$)/5 ;tbltype1,speed,length M else M if (3 == 0x0a) M dt 3,0x30,(endpat1-$)/4 ;tbltype1,speed,length M else M dt 3,0x30,(endpat1-$-1) M endif M endif M endif M endif 0490 3441 3400 00029 dt 0x41, 0x00 ; 1 0492 3410 3440 00030 dt 0x10, 0x40 ; 2 0494 3404 3410 00031 dt 0x04, 0x10 ; 3 00032 end_pattern 0496 M endpat1 00000002 M patternc = patternc + 1 00033 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 87 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00034 ;********************************************************************** 00035 ; fade in/out: white, red, green, blue, yellow, cyan, violet 00036 ;********************************************************************** 00037 start_pattern 1, 0x30 0496 M table2 M if (1 == 1) || (1 == 6) 0496 3401 3430 3412 M dt 1,0x30,(endpat2-$)/3 ;tbltype1,speed,length M else M if (1 == 3) || (1 == 0x0b) M dt 1,0x30,(endpat2-$)/2 ;tbltype1,speed,length M else M if (1 == 9) M dt 1,0x30,(endpat2-$)/5 ;tbltype1,speed,length M else M if (1 == 0x0a) M dt 1,0x30,(endpat2-$)/4 ;tbltype1,speed,length M else M dt 1,0x30,(endpat2-$-1) M endif M endif M endif M endif 00038 ; R c B 0499 34FF 341B 3400 00039 dt b'11111111',b'00011011',b'00000000' ; red -> yellow 049C 34FE 346F 3400 00040 dt b'11111110',b'01101111',b'00000000' 049F 34F9 34BF 3400 00041 dt b'11111001',b'10111111',b'00000000' 04A2 34E4 34FF 3400 00042 dt b'11100100',b'11111111',b'00000000' ; yellow -> green 04A5 3490 34FF 3401 00043 dt b'10010000',b'11111111',b'00000001' 04A8 3440 34FF 3406 00044 dt b'01000000',b'11111111',b'00000110' 04AB 3400 34FF 341B 00045 dt b'00000000',b'11111111',b'00011011' ; green -> cyan 04AE 3400 34FE 346F 00046 dt b'00000000',b'11111110',b'01101111' 04B1 3400 34F9 34BF 00047 dt b'00000000',b'11111001',b'10111111' 04B4 3400 34E4 34FF 00048 dt b'00000000',b'11100100',b'11111111' ; cyan -> blue 04B7 3401 3490 34FF 00049 dt b'00000001',b'10010000',b'11111111' 04BA 3406 3440 34FF 00050 dt b'00000110',b'01000000',b'11111111' 04BD 341B 3400 34FF 00051 dt b'00011011',b'00000000',b'11111111' ; blue -> violet 04C0 346F 3400 34FE 00052 dt b'01101111',b'00000000',b'11111110' 04C3 34BF 3400 34F9 00053 dt b'10111111',b'00000000',b'11111001' 04C6 34FF 3400 34E4 00054 dt b'11111111',b'00000000',b'11100100' ; violet -> red 04C9 34FF 3401 3490 00055 dt b'11111111',b'00000001',b'10010000' 04CC 34FF 3406 3440 00056 dt b'11111111',b'00000110',b'01000000' 00057 end_pattern 04CF M endpat2 00000003 M patternc = patternc + 1 00058 00059 ;********************************************************************** 00060 ; red chase fad up, green chase fad up 00061 ;********************************************************************** 00062 start_pattern 1, 0x30 04CF M table3 M if (1 == 1) || (1 == 6) 04CF 3401 3430 3424 M dt 1,0x30,(endpat3-$)/3 ;tbltype1,speed,length M else MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 88 LOC OBJECT CODE LINE SOURCE TEXT VALUE M if (1 == 3) || (1 == 0x0b) M dt 1,0x30,(endpat3-$)/2 ;tbltype1,speed,length M else M if (1 == 9) M dt 1,0x30,(endpat3-$)/5 ;tbltype1,speed,length M else M if (1 == 0x0a) M dt 1,0x30,(endpat3-$)/4 ;tbltype1,speed,length M else M dt 1,0x30,(endpat3-$-1) M endif M endif M endif M endif 00063 ; R c B 04D2 3440 3400 3400 00064 dt b'01000000',b'00000000',b'00000000' ; low Red 04D5 3444 3400 3400 00065 dt b'01000100',b'00000000',b'00000000' ; 04D8 3444 3440 3400 00066 dt b'01000100',b'01000000',b'00000000' ; 04DB 3444 3444 3400 00067 dt b'01000100',b'01000100',b'00000000' ; 04DE 3444 3444 3440 00068 dt b'01000100',b'01000100',b'01000000' ; 04E1 3444 3444 3444 00069 dt b'01000100',b'01000100',b'01000100' ; 04E4 3484 3444 3444 00070 dt b'10000100',b'01000100',b'01000100' ; Med Red 04E7 3488 3444 3444 00071 dt b'10001000',b'01000100',b'01000100' ; 04EA 3488 3484 3444 00072 dt b'10001000',b'10000100',b'01000100' ; 04ED 3488 3488 3444 00073 dt b'10001000',b'10001000',b'01000100' ; 04F0 3488 3488 3484 00074 dt b'10001000',b'10001000',b'10000100' ; 04F3 3488 3488 3488 00075 dt b'10001000',b'10001000',b'10001000' ; 04F6 34C8 3488 3488 00076 dt b'11001000',b'10001000',b'10001000' ; Hi Red 04F9 34CC 3488 3488 00077 dt b'11001100',b'10001000',b'10001000' ; 04FC 34CC 34C8 3488 00078 dt b'11001100',b'11001000',b'10001000' ; 04FF 34CC 34CC 3488 00079 dt b'11001100',b'11001100',b'10001000' ; 0502 34CC 34CC 34C8 00080 dt b'11001100',b'11001100',b'11001000' ; 0505 34CC 34CC 34CC 00081 dt b'11001100',b'11001100',b'11001100' ; 0508 34DC 34CC 34CC 00082 dt b'11011100',b'11001100',b'11001100' ; Low Green 050B 34DD 34CC 34CC 00083 dt b'11011101',b'11001100',b'11001100' ; 050E 34DD 34DC 34CC 00084 dt b'11011101',b'11011100',b'11001100' ; 0511 34DD 34DD 34CC 00085 dt b'11011101',b'11011101',b'11001100' ; 0514 34DD 34DD 34DC 00086 dt b'11011101',b'11011101',b'11011100' ; 0517 34DD 34DD 34DD 00087 dt b'11011101',b'11011101',b'11011101' ; 051A 34ED 34DD 34DD 00088 dt b'11101101',b'11011101',b'11011101' ; Med Green 051D 34EE 34DD 34DD 00089 dt b'11101110',b'11011101',b'11011101' ; 0520 34EE 34ED 34DD 00090 dt b'11101110',b'11101101',b'11011101' ; 0523 34EE 34EE 34DD 00091 dt b'11101110',b'11101110',b'11011101' ; 0526 34EE 34EE 34ED 00092 dt b'11101110',b'11101110',b'11101101' ; 0529 34EE 34EE 34EE 00093 dt b'11101110',b'11101110',b'11101110' ; 052C 34FE 34EE 34EE 00094 dt b'11111110',b'11101110',b'11101110' ; High Green 052F 34FF 34EE 34EE 00095 dt b'11111111',b'11101110',b'11101110' ; 0532 34FF 34FE 34EE 00096 dt b'11111111',b'11111110',b'11101110' ; 0535 34FF 34FF 34FE 00097 dt b'11111111',b'11111111',b'11111110' ; 0538 34FF 34FF 34FE 00098 dt b'11111111',b'11111111',b'11111110' ; 053B 34FF 34FF 34FF 00099 dt b'11111111',b'11111111',b'11111111' ; 00100 00101 end_pattern MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 89 LOC OBJECT CODE LINE SOURCE TEXT VALUE 053E M endpat3 00000004 M patternc = patternc + 1 00102 00103 ;********************************************************************** 00104 ; fad up/down 00105 ;********************************************************************** 00106 start_pattern 1, 0x30 053E M table4 M if (1 == 1) || (1 == 6) 053E 3401 3430 3412 M dt 1,0x30,(endpat4-$)/3 ;tbltype1,speed,length M else M if (1 == 3) || (1 == 0x0b) M dt 1,0x30,(endpat4-$)/2 ;tbltype1,speed,length M else M if (1 == 9) M dt 1,0x30,(endpat4-$)/5 ;tbltype1,speed,length M else M if (1 == 0x0a) M dt 1,0x30,(endpat4-$)/4 ;tbltype1,speed,length M else M dt 1,0x30,(endpat4-$-1) M endif M endif M endif M endif 00107 ; R c B 0541 3444 3444 3444 00108 dt b'01000100',b'01000100',b'01000100' ; 0544 3488 3488 3488 00109 dt b'10001000',b'10001000',b'10001000' ; 0547 34CC 34CC 34CC 00110 dt b'11001100',b'11001100',b'11001100' ; 054A 3488 3488 3488 00111 dt b'10001000',b'10001000',b'10001000' ; 054D 3444 3444 3444 00112 dt b'01000100',b'01000100',b'01000100' ; 0550 3400 3400 3400 00113 dt b'00000000',b'00000000',b'00000000' ; 0553 3411 3411 3411 00114 dt b'00010001',b'00010001',b'00010001' ; 0556 3422 3422 3422 00115 dt b'00100010',b'00100010',b'00100010' ; 0559 3433 3433 3433 00116 dt b'00110011',b'00110011',b'00110011' ; 055C 3422 3422 3422 00117 dt b'00100010',b'00100010',b'00100010' ; 055F 3411 3411 3411 00118 dt b'00010001',b'00010001',b'00010001' ; 0562 3400 3400 3400 00119 dt b'00000000',b'00000000',b'00000000' ; 0565 3455 3455 3455 00120 dt b'01010101',b'01010101',b'01010101' ; 0568 34AA 34AA 34AA 00121 dt b'10101010',b'10101010',b'10101010' ; 056B 34FF 34FF 34FF 00122 dt b'11111111',b'11111111',b'11111111' ; 056E 34AA 34AA 34AA 00123 dt b'10101010',b'10101010',b'10101010' ; 0571 3455 3455 3455 00124 dt b'01010101',b'01010101',b'01010101' ; 0574 3400 3400 3400 00125 dt b'00000000',b'00000000',b'00000000' ; 00126 end_pattern 0577 M endpat4 00000005 M patternc = patternc + 1 00127 00128 00129 00130 00131 ;********************************************************************** 00132 ;table2 ; DF2 - xmas MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 90 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00133 ;********************************************************************** 00134 00135 start_pattern 3, 0x30 0577 M table5 M if (3 == 1) || (3 == 6) M dt 3,0x30,(endpat5-$)/3 ;tbltype1,speed,length M else M if (3 == 3) || (3 == 0x0b) 0577 3403 3430 3402 M dt 3,0x30,(endpat5-$)/2 ;tbltype1,speed,length M else M if (3 == 9) M dt 3,0x30,(endpat5-$)/5 ;tbltype1,speed,length M else M if (3 == 0x0a) M dt 3,0x30,(endpat5-$)/4 ;tbltype1,speed,length M else M dt 3,0x30,(endpat5-$-1) M endif M endif M endif M endif 057A 3466 3460 00136 dt 0x66, 0x60 ; 1 057C 3499 3490 00137 dt 0x99, 0x90 ; 2 00138 end_pattern 057E M endpat5 00000006 M patternc = patternc + 1 00139 00140 ;********************************************************************** 00141 ;table3 ; DF3 - train 00142 ;********************************************************************** 00143 00144 start_pattern 3, 0x30 057E M table6 M if (3 == 1) || (3 == 6) M dt 3,0x30,(endpat6-$)/3 ;tbltype1,speed,length M else M if (3 == 3) || (3 == 0x0b) 057E 3403 3430 3406 M dt 3,0x30,(endpat6-$)/2 ;tbltype1,speed,length M else M if (3 == 9) M dt 3,0x30,(endpat6-$)/5 ;tbltype1,speed,length M else M if (3 == 0x0a) M dt 3,0x30,(endpat6-$)/4 ;tbltype1,speed,length M else M dt 3,0x30,(endpat6-$-1) M endif M endif M endif M endif 0581 3464 3400 00145 dt 0x64, 0x00 ; 1 0583 3419 3400 00146 dt 0x19, 0x00 ; 2 0585 3406 3440 00147 dt 0x06, 0x40 ; 3 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 91 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0587 3401 3490 00148 dt 0x01, 0x90 ; 4 0589 3440 3460 00149 dt 0x40, 0x60 ; 5 058B 3490 3410 00150 dt 0x90, 0x10 ; 6 00151 end_pattern 058D M endpat6 00000007 M patternc = patternc + 1 00152 00153 ;********************************************************************** 00154 ;table4 ; DF4 - half 00155 ;********************************************************************** 00156 00157 start_pattern 3, 0x30 058D M table7 M if (3 == 1) || (3 == 6) M dt 3,0x30,(endpat7-$)/3 ;tbltype1,speed,length M else M if (3 == 3) || (3 == 0x0b) 058D 3403 3430 3406 M dt 3,0x30,(endpat7-$)/2 ;tbltype1,speed,length M else M if (3 == 9) M dt 3,0x30,(endpat7-$)/5 ;tbltype1,speed,length M else M if (3 == 0x0a) M dt 3,0x30,(endpat7-$)/4 ;tbltype1,speed,length M else M dt 3,0x30,(endpat7-$-1) M endif M endif M endif M endif 0590 345A 3490 00158 dt 0x5A, 0x90 ; 1 0592 346A 3450 00159 dt 0x6A, 0x50 ; 2 0594 34A9 3450 00160 dt 0xA9, 0x50 ; 3 0596 34A5 3460 00161 dt 0xA5, 0x60 ; 4 0598 3495 34A0 00162 dt 0x95, 0xA0 ; 5 059A 3456 34A0 00163 dt 0x56, 0xA0 ; 6 00164 end_pattern 059C M endpat7 00000008 M patternc = patternc + 1 00165 00166 ;********************************************************************** 00167 ;table5 ; DF5 - passing 00168 ;********************************************************************** 00169 00170 start_pattern 3, 0x10 059C M table8 M if (3 == 1) || (3 == 6) M dt 3,0x10,(endpat8-$)/3 ;tbltype1,speed,length M else M if (3 == 3) || (3 == 0x0b) 059C 3403 3410 3406 M dt 3,0x10,(endpat8-$)/2 ;tbltype1,speed,length M else M if (3 == 9) MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 92 LOC OBJECT CODE LINE SOURCE TEXT VALUE M dt 3,0x10,(endpat8-$)/5 ;tbltype1,speed,length M else M if (3 == 0x0a) M dt 3,0x10,(endpat8-$)/4 ;tbltype1,speed,length M else M dt 3,0x10,(endpat8-$-1) M endif M endif M endif M endif 059F 3442 3400 00171 dt 0x42, 0x00 ; 1 05A1 3418 3400 00172 dt 0x18, 0x00 ; 2 05A3 3424 3400 00173 dt 0x24, 0x00 ; 3 05A5 3481 3400 00174 dt 0x81, 0x00 ; 4 05A7 3400 3460 00175 dt 0x00, 0x60 ; 5 05A9 3400 3490 00176 dt 0x00, 0x90 ; 6 00177 end_pattern 05AB M endpat8 00000009 M patternc = patternc + 1 00178 00179 ;********************************************************************** 00180 ;table6 ; DF6 - rpm 00181 ;********************************************************************** 00182 00183 start_pattern 3, 0x30 05AB M table9 M if (3 == 1) || (3 == 6) M dt 3,0x30,(endpat9-$)/3 ;tbltype1,speed,length M else M if (3 == 3) || (3 == 0x0b) 05AB 3403 3430 340B M dt 3,0x30,(endpat9-$)/2 ;tbltype1,speed,length M else M if (3 == 9) M dt 3,0x30,(endpat9-$)/5 ;tbltype1,speed,length M else M if (3 == 0x0a) M dt 3,0x30,(endpat9-$)/4 ;tbltype1,speed,length M else M dt 3,0x30,(endpat9-$-1) M endif M endif M endif M endif 05AE 3440 3400 00184 dt 0x40, 0x00 ; 1 05B0 3450 3400 00185 dt 0x50, 0x00 ; 2 05B2 3454 3400 00186 dt 0x54, 0x00 ; 3 05B4 3457 3400 00187 dt 0x57, 0x00 ; 4 05B6 3457 34C0 00188 dt 0x57, 0xC0 ; 5 05B8 3457 34E0 00189 dt 0x57, 0xE0 ; 6 05BA 3457 34C0 00190 dt 0x57, 0xC0 ; 7 05BC 3457 3400 00191 dt 0x57, 0x00 ; 8 05BE 3450 3400 00192 dt 0x50, 0x00 ; 9 05C0 3440 3400 00193 dt 0x40, 0x00 ; 10 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 93 LOC OBJECT CODE LINE SOURCE TEXT VALUE 05C2 3400 3404 00194 dt 0x00, 0x04 ; 11/12/13/14 00195 end_pattern 05C4 M endpat9 0000000A M patternc = patternc + 1 00196 00197 ;********************************************************************** 00198 ;table7 ; DF7 - right 00199 ;********************************************************************** 00200 00201 start_pattern 3, 0x30 05C4 M table10 M if (3 == 1) || (3 == 6) M dt 3,0x30,(endpat10-$)/3 ;tbltype1,speed,length M else M if (3 == 3) || (3 == 0x0b) 05C4 3403 3430 3408 M dt 3,0x30,(endpat10-$)/2 ;tbltype1,speed,length M else M if (3 == 9) M dt 3,0x30,(endpat10-$)/5 ;tbltype1,speed,length M else M if (3 == 0x0a) M dt 3,0x30,(endpat10-$)/4 ;tbltype1,speed,length M else M dt 3,0x30,(endpat10-$-1) M endif M endif M endif M endif 05C7 3400 3400 00202 dt 0x00, 0x00 ; 1 05C9 3400 3450 00203 dt 0x00, 0x50 ; 2 05CB 3441 3400 00204 dt 0x41, 0x00 ; 3 05CD 3414 3400 00205 dt 0x14, 0x00 ; 4 05CF 3400 3400 00206 dt 0x00, 0x00 ; 5 05D1 3400 34A0 00207 dt 0x00, 0xA0 ; 6 05D3 3482 3400 00208 dt 0x82, 0x00 ; 7 05D5 3428 3400 00209 dt 0x28, 0x00 ; 8 00210 end_pattern 05D7 M endpat10 0000000B M patternc = patternc + 1 00211 00212 ;********************************************************************** 00213 ;table8 ; DF8 - down 00214 ;********************************************************************** 00215 00216 start_pattern 3, 0x10 05D7 M table11 M if (3 == 1) || (3 == 6) M dt 3,0x10,(endpat11-$)/3 ;tbltype1,speed,length M else M if (3 == 3) || (3 == 0x0b) 05D7 3403 3410 3407 M dt 3,0x10,(endpat11-$)/2 ;tbltype1,speed,length M else M if (3 == 9) MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 94 LOC OBJECT CODE LINE SOURCE TEXT VALUE M dt 3,0x10,(endpat11-$)/5 ;tbltype1,speed,length M else M if (3 == 0x0a) M dt 3,0x10,(endpat11-$)/4 ;tbltype1,speed,length M else M dt 3,0x10,(endpat11-$-1) M endif M endif M endif M endif 05DA 3440 3400 00217 dt 0x40, 0x00 ; 1 05DC 34D0 3410 00218 dt 0xD0, 0x10 ; 2 05DE 34B4 3470 00219 dt 0xB4, 0x70 ; 3 05E0 342D 34E0 00220 dt 0x2D, 0xE0 ; 4 05E2 340B 3480 00221 dt 0x0B, 0x80 ; 5 05E4 3402 3400 00222 dt 0x02, 0x00 ; 6 05E6 3400 3402 00223 dt 0x00, 0x02 ; 7/8/9 00224 end_pattern 05E8 M endpat11 0000000C M patternc = patternc + 1 00225 00226 ;********************************************************************** 00227 ; fade around 00228 ;********************************************************************** 00229 start_pattern 1, 0x30 05E8 M table12 M if (1 == 1) || (1 == 6) 05E8 3401 3430 3412 M dt 1,0x30,(endpat12-$)/3 ;tbltype1,speed,length M else M if (1 == 3) || (1 == 0x0b) M dt 1,0x30,(endpat12-$)/2 ;tbltype1,speed,length M else M if (1 == 9) M dt 1,0x30,(endpat12-$)/5 ;tbltype1,speed,length M else M if (1 == 0x0a) M dt 1,0x30,(endpat12-$)/4 ;tbltype1,speed,length M else M dt 1,0x30,(endpat12-$-1) M endif M endif M endif M endif 00230 ; 1R 2R 3R 4R 5R 6R 05EB 34C0 3400 3400 00231 dt b'11000000',b'00000000',b'00000000' 05EE 3484 3400 3400 00232 dt b'10000100',b'00000000',b'00000000' 05F1 3448 3400 3400 00233 dt b'01001000',b'00000000',b'00000000' 05F4 340C 3400 3400 00234 dt b'00001100',b'00000000',b'00000000' 05F7 3408 3440 3400 00235 dt b'00001000',b'01000000',b'00000000' 05FA 3404 3480 3400 00236 dt b'00000100',b'10000000',b'00000000' 05FD 3400 34C0 3400 00237 dt b'00000000',b'11000000',b'00000000' 0600 3400 3484 3400 00238 dt b'00000000',b'10000100',b'00000000' 0603 3400 3448 3400 00239 dt b'00000000',b'01001000',b'00000000' MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 95 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0606 3400 340C 3400 00240 dt b'00000000',b'00001100',b'00000000' 0609 3400 3408 3440 00241 dt b'00000000',b'00001000',b'01000000' 060C 3400 3404 3480 00242 dt b'00000000',b'00000100',b'10000000' 060F 3400 3400 34C0 00243 dt b'00000000',b'00000000',b'11000000' 0612 3400 3400 3488 00244 dt b'00000000',b'00000000',b'10001000' 0615 3400 3400 3444 00245 dt b'00000000',b'00000000',b'01000100' 0618 3400 3400 340C 00246 dt b'00000000',b'00000000',b'00001100' 061B 3440 3400 3408 00247 dt b'01000000',b'00000000',b'00001000' 061E 3480 3400 3404 00248 dt b'10000000',b'00000000',b'00000100' 00249 end_pattern 0621 M endpat12 0000000D M patternc = patternc + 1 00250 00251 ;********************************************************************** 00252 ; fade up/down 00253 ;********************************************************************** 00254 start_pattern 0x01, 0x30 0621 M table13 M if (0x01 == 1) || (0x01 == 6) 0621 3401 3430 3406 M dt 0x01,0x30,(endpat13-$)/3 ;tbltype1,speed,length M else M if (0x01 == 3) || (0x01 == 0x0b) M dt 0x01,0x30,(endpat13-$)/2 ;tbltype1,speed,length M else M if (0x01 == 9) M dt 0x01,0x30,(endpat13-$)/5 ;tbltype1,speed,length M else M if (0x01 == 0x0a) M dt 0x01,0x30,(endpat13-$)/4 ;tbltype1,speed,length M else M dt 0x01,0x30,(endpat13-$-1) M endif M endif M endif M endif 00255 ; 1R 2R 3R 4R 5R 6R 0624 3400 3400 3400 00256 dt b'00000000',b'00000000',b'00000000' 0627 3455 3455 3455 00257 dt b'01010101',b'01010101',b'01010101' 062A 34AA 34AA 34AA 00258 dt b'10101010',b'10101010',b'10101010' 062D 34FF 34FF 34FF 00259 dt b'11111111',b'11111111',b'11111111' 0630 34AA 34AA 34AA 00260 dt b'10101010',b'10101010',b'10101010' 0633 3455 3455 3455 00261 dt b'01010101',b'01010101',b'01010101' 00262 end_pattern 0636 M endpat13 0000000E M patternc = patternc + 1 00263 00264 ;********************************************************************** 00265 ; fade up/down 00266 ;********************************************************************** 00267 start_pattern 0x01, 0x30 0636 M table14 M if (0x01 == 1) || (0x01 == 6) 0636 3401 3430 3406 M dt 0x01,0x30,(endpat14-$)/3 ;tbltype1,speed,length MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 96 LOC OBJECT CODE LINE SOURCE TEXT VALUE M else M if (0x01 == 3) || (0x01 == 0x0b) M dt 0x01,0x30,(endpat14-$)/2 ;tbltype1,speed,length M else M if (0x01 == 9) M dt 0x01,0x30,(endpat14-$)/5 ;tbltype1,speed,length M else M if (0x01 == 0x0a) M dt 0x01,0x30,(endpat14-$)/4 ;tbltype1,speed,length M else M dt 0x01,0x30,(endpat14-$-1) M endif M endif M endif M endif 00268 ; 1R 2R 3R 4R 5R 6R 0639 3433 3433 3433 00269 dt b'00110011',b'00110011',b'00110011' 063C 3466 3466 3466 00270 dt b'01100110',b'01100110',b'01100110' 063F 3499 34AA 34AA 00271 dt b'10011001',b'10101010',b'10101010' 0642 34CC 34CC 34CC 00272 dt b'11001100',b'11001100',b'11001100' 0645 3499 34AA 34AA 00273 dt b'10011001',b'10101010',b'10101010' 0648 3466 3466 3466 00274 dt b'01100110',b'01100110',b'01100110' 00275 end_pattern 064B M endpat14 0000000F M patternc = patternc + 1 00276 00277 ;********************************************************************** 00278 ;table10 ; DF3 - fast spin 00279 ;********************************************************************** 00280 00281 start_pattern 5, 0x10 064B M table15 M if (5 == 1) || (5 == 6) M dt 5,0x10,(endpat15-$)/3 ;tbltype1,speed,length M else M if (5 == 3) || (5 == 0x0b) M dt 5,0x10,(endpat15-$)/2 ;tbltype1,speed,length M else M if (5 == 9) M dt 5,0x10,(endpat15-$)/5 ;tbltype1,speed,length M else M if (5 == 0x0a) M dt 5,0x10,(endpat15-$)/4 ;tbltype1,speed,length M else 064B 3405 3410 3406 M dt 5,0x10,(endpat15-$-1) M endif M endif M endif M endif 064E 3480 00282 dt 0x80 ; G1 064F 3440 00283 dt 0x40 ; G2 0650 3420 00284 dt 0x20 ; G3 0651 3410 00285 dt 0x10 ; G4 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 97 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0652 3408 00286 dt 0x08 ; G5 0653 3405 00287 dt 0x05 ; G6 00288 end_pattern 0654 M endpat15 00000010 M patternc = patternc + 1 00289 00290 ;********************************************************************** 00291 ; EEPROM ;test pattern for 4RGB with 2 bits of luminance per LED 00292 ;********************************************************************** 2100 00293 org 0x2100 ; data EEPROM location 00294 ; 00295 ; Because there are no extra bits in the LED buffer to use as an 00296 ; end-of-pattern flag, the pattern table header has a length byte. 00297 ; 00298 2100 0003 0060 0011 00299 de 0x03,0x60,(endpat0-$)/2 ;tbltype1,speed,length 2103 00AA 00A0 00300 DE 0xAA, 0xA0 ; Red 2105 0055 0050 00301 DE 0x55, 0x50 ; Green 2107 00FF 00F0 00302 DE 0xFF, 0xF0 ; All 2109 0000 0000 00303 DE 0x00, 0x00 ; Blank/Center 00304 210B 0080 0000 00305 DE 0x80, 0x00 ; R1 210D 0020 0000 00306 DE 0x20, 0x00 ; R2 210F 0008 0000 00307 DE 0x08, 0x00 ; R3 2111 0002 0000 00308 DE 0x02, 0x00 ; R4 2113 0000 0080 00309 DE 0x00, 0x80 ; R5 2115 0000 0020 00310 DE 0x00, 0x20 ; R6 00311 2117 0040 0000 00312 DE 0x40, 0x00 ; G1 2119 0010 0000 00313 DE 0x10, 0x00 ; G2 211B 0004 0000 00314 DE 0x04, 0x00 ; G3 211D 0001 0000 00315 DE 0x01, 0x00 ; G4 211F 0000 0040 00316 DE 0x00, 0x40 ; G5 2121 0000 0010 00317 DE 0x00, 0x10 ; G6 00318 2123 0000 0001 00319 DE 0x00, 0x01 ; Blank 2125 00320 endpat0 00321 03586 #endif 03587 #endif 03588 #endif 03589 #ifdef S19 03590 #include <19led_stick_patterns.asm> 03591 #endif 03592 #ifdef C19 03593 #include <19bi_circle_patterns.asm> 03594 #endif 03595 03596 END ; directive 'end of program' MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 98 SYMBOL TABLE LABEL VALUE ADCON0 0000001F ADCS0 00000004 ADCS1 00000005 ADCS2 00000006 ADFM 00000007 ADIE 00000006 ADIF 00000006 ADON 00000000 ADRESH 0000001E ADRESL 0000009E ANS0 00000000 ANS1 00000001 ANS2 00000002 ANS3 00000003 ANSEL 0000009F Ab_reg 00000029 Ag_reg 00000028 Ar_reg 00000027 Ax_dir 000000F4 BI6 BIN2LED BRIGHT1 0x40 BRIGHT2 0xA0 Bb_reg 0000002C Bg_reg 0000002B Br_reg 0000002A C 00000000 CCP1CON 00000015 CCP1IE 00000005 CCP1IF 00000005 CCP1M0 00000000 CCP1M1 00000001 CCP1M2 00000002 CCP1M3 00000003 CCPR1H 00000014 CCPR1L 00000013 CHS0 00000002 CHS1 00000003 CHS2 00000004 CINV 00000004 CIS 00000003 CM0 00000000 CM1 00000001 CM2 00000002 CMCON0 00000019 CMCON1 0000001A CMIE 00000003 CMIF 00000003 CMSYNC 00000000 COUT 00000006 Cb_reg 0000002F Cg_reg 0000002E Cr_reg 0000002D MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 99 SYMBOL TABLE LABEL VALUE DC 00000001 DC1B0 00000004 DC1B1 00000005 DISPLAY_1BIT_C DISPLAY_2BIT_C Db_reg 00000032 Dg_reg 00000031 Dr_reg 00000030 EEADR 0000009B EECON1 0000009C EECON2 0000009D EEDAT 0000009A EEDATA 0000009A EEIE 00000007 EEIF 00000007 ENABLE_IR F 00000001 FSR 00000004 GIE 00000007 GO 00000001 GO_DONE 00000001 GPIE 00000003 GPIF 00000000 GPIO 00000005 HTS 00000002 INDF 00000000 INTCON 0000000B INTE 00000004 INTEDG 00000006 INTF 00000001 IOC 00000096 IOC0 00000000 IOC1 00000001 IOC2 00000002 IOC3 00000003 IOC4 00000004 IOC5 00000005 IOCA 00000096 IOCA0 00000000 IOCA1 00000001 IOCA2 00000002 IOCA3 00000003 IOCA4 00000004 IOCA5 00000005 IRBIT 4 IRCF0 00000004 IRCF1 00000005 IRCF2 00000006 IRP 00000007 IR_Tester 0000040B IR_in 00000035 IR_in_good 0000003D IR_lhalf 00000039 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 100 SYMBOL TABLE LABEL VALUE LTS 00000001 Lcontinue 0000021E LedOut Lstate0 0000011D Lstate0a 00000125 Lstate1 00000128 Lstate10 00000170 Lstate10a 00000176 Lstate11 0000017C Lstate12 00000180 Lstate12a 00000186 Lstate13 0000018C Lstate14 00000190 Lstate14a 00000196 Lstate15 0000019C Lstate16 000001A0 Lstate16a 000001A6 Lstate17 000001AC Lstate18 000001B0 Lstate18a 000001B6 Lstate19 000001BC Lstate1a 0000012D Lstate2 00000130 Lstate20 000001C0 Lstate20a 000001C6 Lstate21 000001CC Lstate22 000001D0 Lstate22a 000001D6 Lstate23 000001DC Lstate24 000001E0 Lstate24a 000001E6 Lstate25 000001EC Lstate26 000001F0 Lstate26a 000001F6 Lstate27 000001FC Lstate28 00000200 Lstate28a 00000206 Lstate29 0000020C Lstate2a 00000135 Lstate3 00000138 Lstate30 00000210 Lstate30a 00000216 Lstate31 0000021C Lstate3a 0000013D Lstate4 00000140 Lstate4a 00000145 Lstate5 00000148 Lstate5a 0000014D Lstate6 00000150 Lstate6a 0000015A Lstate6b 00000158 Lstate7 0000015C Lstate8 00000160 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 101 SYMBOL TABLE LABEL VALUE Lstate8a 00000166 Lstate9 0000016C MasterTable 0000046F NOT_BOD 00000000 NOT_DONE 00000001 NOT_GPPU 00000007 NOT_PD 00000003 NOT_POR 00000001 NOT_RAPU 00000007 NOT_T1SYNC 00000002 NOT_TO 00000004 NUM_TAB 0000000E OPTION_REG 00000081 OSCCON 0000008F OSCTUNE 00000090 OSFIE 00000002 OSFIF 00000002 OSTS 00000003 PATTERN1 PATTERN3 PCL 00000002 PCLATH 0000000A PCON 0000008E PEIE 00000006 PIE1 0000008C PIR1 0000000C PORTA 00000005 PR2 00000092 PS0 00000000 PS1 00000001 PS2 00000002 PSA 00000003 RD 00000000 RP0 00000005 RP1 00000006 SBODEN 00000004 SCS 00000000 STATUS 00000003 SWDTEN 00000000 T0CS 00000005 T0IE 00000005 T0IF 00000002 T0SE 00000004 T1CKPS0 00000004 T1CKPS1 00000005 T1CON 00000010 T1GE 00000006 T1GINV 00000007 T1GSS 00000001 T1IE 00000000 T1IF 00000000 T1OSCEN 00000003 T2CKPS0 00000000 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 102 SYMBOL TABLE LABEL VALUE T2CKPS1 00000001 T2CON 00000012 T2IE 00000001 T2IF 00000001 TICK_VALUE D'35' TMR0 00000001 TMR1CS 00000001 TMR1H 0000000F TMR1IE 00000000 TMR1IF 00000000 TMR1L 0000000E TMR1ON 00000000 TMR2 00000011 TMR2IE 00000001 TMR2IF 00000001 TMR2ON 00000002 TOUTPS0 00000003 TOUTPS1 00000004 TOUTPS2 00000005 TOUTPS3 00000006 TRISA 00000085 TRISIO 00000085 TUN0 00000000 TUN1 00000001 TUN2 00000002 TUN3 00000003 TUN4 00000004 ULPWUE 00000005 VCFG 00000006 VR0 00000000 VR1 00000001 VR2 00000002 VR3 00000003 VRCON 00000099 VREN 00000007 VRR 00000005 W 00000000 WDTCON 00000018 WDTPS0 00000001 WDTPS1 00000002 WDTPS2 00000003 WDTPS3 00000004 WPU 00000095 WPUA 00000095 WR 00000001 WREN 00000002 WRERR 00000003 Z 00000002 _BOD_NSLEEP 00003EFF _BOD_OFF 00003CFF _BOD_ON 00003FFF _BOD_SBODEN 00003DFF _CPD_OFF 00003FFF MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 103 SYMBOL TABLE LABEL VALUE _CPD_ON 00003F7F _CP_OFF 00003FFF _CP_ON 00003FBF _EC_OSC 00003FFB _EXTRC 00003FFF _EXTRCIO 00003FFE _EXTRC_OSC_CLKOUT 00003FFF _EXTRC_OSC_NOCLKOUT 00003FFE _FCMEN_OFF 000037FF _FCMEN_ON 00003FFF _HS_OSC 00003FFA _IESO_OFF 00003BFF _IESO_ON 00003FFF _INTOSC 00003FFD _INTOSCIO 00003FFC _INTRC_OSC_CLKOUT 00003FFD _INTRC_OSC_NOCLKOUT 00003FFC _LP_OSC 00003FF8 _MCLRE_OFF 00003FDF _MCLRE_ON 00003FFF _PWRTE_OFF 00003FFF _PWRTE_ON 00003FEF _WDT_OFF 00003FF7 _WDT_ON 00003FFF _XT_OSC 00003FF9 __12F683 00000001 address 00000037 b2l_in_green 0000004F b2l_in_red 0000004E b2l_lcount 0000004D b2l_loop 00000279 b2l_out_hi 0000004B b2l_out_low 0000004C bin2led 00000275 blinkie_check 0000032B butcount 0000003E button 0000003A button_check 00000347 command 00000036 count1 00000023 count2 00000024 dcycle 00000022 delay 00000283 delay_count 00000050 delay_loop 00000284 delay_loop2 00000239 demo_mode 00000060 display_1bit 00000387 display_2bit 000003AF display_cycle0 00000049 display_cycle1 00000055 display_cycle2 00000061 display_cycle3 0000006D MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 104 SYMBOL TABLE LABEL VALUE display_pattern_id 000002AB display_w_2bit 000003B0 drive_main_leds 0000002F dupvar end_pattern endpat0 00002125 endpat1 00000496 endpat10 000005D7 endpat11 000005E8 endpat12 00000621 endpat13 00000636 endpat14 0000064B endpat15 00000654 endpat2 000004CF endpat3 0000053E endpat4 00000577 endpat5 0000057E endpat6 0000058D endpat7 0000059C endpat8 000005AB endpat9 000005C4 entry exit_int 00000044 exit_tx 00000042 fcount 00000026 get_next_pattern_entry 000002E1 get_next_tx_bit 0000022E get_state_tbl_hi_address 000000C5 get_state_tbl_low_address 000000CB glabel1 000002E7 go_state_table 000000D9 greturn 000002F1 iloop1 00000425 in0 0000005B in1 0000005C in2 0000005D input 000000F6 instate 00000033 intcon_save 000000F2 itop 0000040B loop_ddf 00000459 main 00000441 make_mtab make_state_jump_table max_instate 00000034 mem 00000063 mem2 000000F7 mult_nop next_pattern 00000288 nextf 00000021 out0 00000046 out1 00000047 out2 00000048 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 105 SYMBOL TABLE LABEL VALUE out3 00000049 out_address 00000042 out_command 00000043 out_pattern 00000045 out_toggle 00000044 p2count 00000062 p2loop 00000382 past_exit 00000298 past_pattern 00000290 pattern 00000059 pattern_driver 0000031F patternc 00000010 pclath_save 00000056 pclath_temp 000000F3 pindex 000000F5 pindex2 0000003C ploop0 00000329 ploop1a 0000034D ploop2 00000353 ploop2a 00000366 ploop3 0000036B psize 00000061 pspeed 0000005F ptop 0000031F qcount 00000041 qdelay 00000238 read_button_in 0000021F read_eeprom 00000304 read_ir_in 00000223 remote_check 00000332 repeat 00000025 repeat_loop 00000022 rf_command_out 0000023C scount 0000004A send_nothing 0000002E send_one 0000001B send_zero 0000002C set_exit 000002A3 set_loop 0000029C set_max_state 00000227 set_pattern 00000299 setbank0 bcf STATUS,RP0 setbank1 bsf STATUS,RP0 setup_pattern_table 000002BE setup_pattern_temp 00000054 skip1 00000015 slabel1 000002CC smi_l1 0000022D speed 0000005E sreturn 000002E0 start_pattern state2_tbl state_jump_table 000000DD MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 106 SYMBOL TABLE LABEL VALUE state_tbl status_temp 000000F1 stop2 000002BE strobe_a0 00000079 strobe_a1 0000008C strobe_a2 0000009F strobe_a5 000000B2 strobe_c0 000000B2 strobe_c1 000000B2 strobe_c2 000000B2 strobe_c4 000000B2 strobe_count 00000051 strobe_delay 000002A4 strobe_delay1 000002A5 strobe_delay2 000002A6 table0 0000048D table1 0000048D table10 000005C4 table11 000005D7 table12 000005E8 table13 00000621 table14 00000636 table15 0000064B table2 00000496 table3 000004CF table4 0000053E table5 00000577 table6 0000057E table7 0000058D table8 0000059C table9 000005AB table_lookup 00000468 table_lookup2 000000D2 table_type_1 0000036E table_type_3 00000378 tbl2_hi 0000003F tbl2_low 00000040 tbl_hi 00000052 tbl_low 00000053 tbltype 0000005A tbltype1 tdemo_cont 00000318 tdemo_on 00000316 temp2 00000057 temp_high 00000055 toggle 00000038 toggle_demo 0000030E toggle_demo_temp 00000058 tx_1 0000003B var var_all_bank w_temp 000000F0 write_eeprom 000002F3 MPASM 5.06 GENERIC_683.ASM 6-1-2007 20:04:59 PAGE 107 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0000 : X---XXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0140 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0180 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 01C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0200 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0240 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0280 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 02C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0300 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0340 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0380 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 03C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0400 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0440 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0480 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 04C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0500 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0540 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0580 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 05C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0600 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0640 : XXXXXXXXXXXXXXXX XXXX------------ ---------------- ---------------- 2000 : -------X-------- ---------------- ---------------- ---------------- 2100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXX----------- ---------------- All other memory blocks unused. Program Memory Words Used: 1617 Program Memory Words Free: 431 Errors : 0 Warnings : 1 reported, 0 suppressed Messages : 0 reported, 53 suppressed