MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ;********************************************************************** 00002 ; * 00003 ; Filename: dmx_Projector.asm * 00004 ; Date: 15-2-2004 * 00005 ; File Version: DMX -> Keyboard Interface * 00006 ; * 00007 ; Author: Paul Harris * 00008 ; Company: * 00009 ; * 00010 ;********************************************************************** 00011 00012 list p=16f627A ; list directive to define processor 00013 #include ; processor specific variable definitions 00001 LIST 00002 ; P16F627A.INC Standard Header File, Version 1.10 Microchip Technology, Inc. 00265 LIST 00014 00015 errorlevel -302 ; suppress message 302 from list file 00016 2007 3F42 00017 __CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC & _MCLRE_OFF & _LVP_OFF 00018 00019 00020 #DEFINE Keyboard_Clk_In PORTB,0 00021 #DEFINE DMX_Data_In PORTB,1 00022 #DEFINE Keyboard_Data_In PORTB,2 00023 #DEFINE Keyboard_Data_Out PORTB,6 00024 #DEFINE Keyboard_Clk_Out PORTB,7 00025 #DEFINE Data_Rec_LED PORTA,3 00026 #DEFINE Data_Error_LED PORTA,4 00027 00028 00029 ;PORT A definitions ; 1= In, 0= Out 000000E7 00030 PORTA_CONFIG equ B'11100111'; 00031 00032 ;PORT B definitions 1 = Input 0= Output 0000003F 00033 PORTB_CONFIG equ B'00111111' 00034 00035 ; Programme Constants 00000000 00036 Start_Vector EQU D'0' 00000004 00037 Interrupt_Vector EQU D'4' 00000070 00038 Common_Ram_Base EQU H'70' 00000020 00039 Ram_Base EQU H'20' 01312D00 00040 Osc_Freq EQU D'20000000' ; Pic Frequency 004C4B40 00041 Instruction_rate EQU Osc_Freq/D'4' ; Instruction Rate 00042 00043 ; DMX Constants 0003D090 00044 Baud_Rate EQU D'250000' 00000004 00045 Baud_Rate_Constant EQU (Osc_Freq/(D'16'*Baud_Rate))-D'1' 00000008 00046 Number_Of_Channels EQU D'8' 00000000 00047 startcode EQU D'0' 00000080 00048 Switch_Point EQU D'128' ; At What point dose 0 become 1 ?? 0000000C 00049 DMX_Address EQU D'12' ; DMX Address to write to EEPROM 00050 MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 2 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00051 ; Keyboard Constants 000000C8 00052 Keybd_TX_Constant EQU D'200' ; - Instructions to process it ! 0000007E 00053 Scroll_Key EQU h'7E' ; - Key to Enter setup mode is Scroll ! 00000079 00054 Plus_Key EQU h'79' 0000007B 00055 Minus_Key EQU h'7B' 0000005A 00056 Enter_Key EQU h'5A' 00000076 00057 Esc_Key EQU h'76' 00000029 00058 Space_Key EQU h'29' 00059 00060 ; *********** Define Flags ************* 00061 ; IFlag 00000000 00062 Break_Detected equ 0 ; Break detected 00000001 00063 Start_Detected equ 1 ; Start Byte detected 00000002 00064 Valid_Channel equ 2 ; Reached valid channels 00000003 00065 No_DMX_Data equ 3 ; No recieved DMX Data 00066 00067 ; Int_Flag 00000000 00068 Start equ 0 ; Start Bit Detected 00000001 00069 Parity equ 1 ; Parity Bit Deteected 00000002 00070 Stop equ 2 ; Stop Bit Detected 00000003 00071 Data_End equ 3 ; End Of Data Tranmission... 00072 00073 ; Flag 00000000 00074 Keyboard_Data equ 0 ; New Data From Keyboard 00000001 00075 Keyboard_TX equ 1 ; 00000002 00076 DMX_Data equ 2 ; New DMX Data recieved 00000003 00077 dmx_error equ 3 ; Error detected in DMX tranmission 00000004 00078 ignore_next equ 4 ; Ignore next chacture (Setup Mode) 00079 00080 00081 ;***** VARIABLE DEFINITIONS 00082 CBLOCK Common_Ram_Base 00083 00000070 00084 Int_W 00000071 00085 Int_Status 00000072 00086 Int_PCLath 00000073 00087 Int_FSR 00000074 00088 ee_address 00000075 00089 ee_data 00090 00091 ENDC 00092 00093 CBLOCK Ram_Base 00094 00095 ; Interupt Variables 00000020 00096 Iflag 00000021 00097 Int_Flag 00000022 00098 Int_FlagB 00000023 00099 Int_TX_Data 00000024 00100 Int_Count 00000025 00101 Int_CountB 00000026 00102 Int_Data 00000027 00103 IH_Channel_Count_L MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 3 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000028 00104 IH_Channel_Count_H 00000029 00105 IH_Channels_Recieved 0000002A 00106 IH_Temp 0000002B 00107 Int_Parity 00108 0000002C 00109 flag ; Flags !! 0000002D 00110 temp ; Temp 0000002E 00111 Channel_Flags ; DMX Channels Activated Flags 0000002F 00112 Old_Channel_Flags ; Old DMX Flags 00000030 00113 DMX_Start_Addr_L ; DMX Start Address 00000031 00114 DMX_Start_Addr_H 00000032 00115 DMX_Start_Code ; DMX Start Code52 00000033 00116 Data_Recieved ; Keyboard Data recieved 00000034 00117 Channels ; Number of Channels to recieve 00000035 00118 Channel_Values : (Number_Of_Channels+2) 0000003F 00119 Char_In ; Chacture temp register 00000040 00120 String_Count ; Chacture count for Tx 00000041 00121 Char_Count ; Count for setup of chactures 00000042 00122 Char_Channel ; Current Char channel on 00000043 00123 NumH ; Bin -> Dec 00000044 00124 NumL 00000045 00125 Hund 00000046 00126 Tens_Ones 00000047 00127 Char_Bank: 6 ; Characture temp save registers 00128 ENDC 00129 00130 00131 ;********************************************************************** 0000 00132 ORG Start_Vector ; processor reset vector 0000 0000 00133 nop ; Included for ICD 0001 018A 00134 clrf PCLATH ; ensure page bits are cleared 0002 294A 00135 goto Initalise ; go to beginning of program 00136 00137 0004 00138 ORG Interrupt_Vector ; interrupt vector location 00139 0004 00F0 00140 MOVWF Int_W ; Save PIC state 0005 0E03 00141 SWAPF STATUS,W 0006 0183 00142 CLRF STATUS 0007 00F1 00143 MOVWF Int_Status 0008 080A 00144 MOVF PCLATH,W 0009 00F2 00145 MOVWF Int_PCLath 000A 018A 00146 CLRF PCLATH 000B 1383 00147 BCF STATUS,IRP 000C 0804 00148 MOVF FSR,W 000D 00F3 00149 MOVWF Int_FSR 00150 000E 00151 IH_Interrupt_Poll 000E 188B 00152 btfsc INTCON,INTF ; Test for RB0 Interupt 000F 281D 00153 goto IH_RB0 0010 1A8C 00154 btfsc PIR1,RCIF ; USART Interupt Pending ? 0011 2849 00155 goto IH_Check_USART ; Yes, Goto Usart handler 0012 180C 00156 btfsc PIR1,TMR1IF ; Timer 1 interupt ?? MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 4 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0013 2891 00157 goto IH_Timer1 00158 0014 0873 00159 IH_Exit movf Int_FSR,W ; Restore PIC state 0015 0084 00160 movwf FSR 0016 0872 00161 movf Int_PCLath,W 0017 008A 00162 movwf PCLATH 0018 0E71 00163 swapf Int_Status,W 0019 0083 00164 movwf STATUS 001A 0EF0 00165 swapf Int_W,F 001B 0E70 00166 swapf Int_W,W 001C 0009 00167 retfie ; Return from interrupt 00168 00169 ; ******************************************************** 00170 ; * Recieve From Keyboard 00171 001D 1683 00172 IH_RB0 bsf STATUS,RP0 ; change to bank 1 001E 1B01 00173 btfsc OPTION_REG,INTEDG ; Look for Falling Edge 001F 2844 00174 goto IH_RB0_End ; 1 = rising edge 00175 0020 00176 IH_RB0_Start ; Falling Signal. 0020 1701 00177 bsf OPTION_REG,INTEDG ; set to look for Rising Edge 0021 1283 00178 bcf STATUS,RP0 ; move back to bank 0 0022 1906 00179 btfsc Keyboard_Data_In ; Mirror Data On Output 0023 1706 00180 bsf Keyboard_Data_Out 0024 1D06 00181 btfss Keyboard_Data_In 0025 1306 00182 bcf Keyboard_Data_Out 0026 108B 00183 bcf INTCON,INTF ; Clear interupt flag 0027 1386 00184 bcf Keyboard_Clk_Out ; Set Clock 00185 0028 1921 00186 btfsc Int_Flag,Stop ; Stop Bit Detected yet ? 0029 283D 00187 goto IH_RB0_Stop ; Yes, 002A 1821 00188 btfsc Int_Flag,Start ; Start Bit Detected Yet ? 002B 2833 00189 goto IH_RB0_SBit ; Yes, 002C 1906 00190 btfsc Keyboard_Data_In ; Check if start bit present ? 002D 280E 00191 goto IH_Interrupt_Poll ; No, 002E 3008 00192 movlw d'8' ; Setup Bits to recieve 002F 00A4 00193 movwf Int_Count 00194 ;bsf Data_Error_LED ; Led On 0030 01A6 00195 clrf Int_Data ; Clear data register 0031 1421 00196 bsf Int_Flag,Start ; Set Flag 0032 280E 00197 goto IH_Interrupt_Poll 00198 0033 00199 IH_RB0_SBit 0033 0CA6 00200 rrf Int_Data,f 0034 13A6 00201 bcf Int_Data,7 ; Clear Bit 7 0035 1906 00202 btfsc Keyboard_Data_In ; Check Port 0036 17A6 00203 bsf Int_Data,7 ; Set Bit If required 0037 0BA4 00204 decfsz Int_Count,f ; Exit Is More Data to Collect 0038 280E 00205 goto IH_Interrupt_Poll 0039 3002 00206 movlw D'2' ; Setup to recieve 2 Parity and stop bits 003A 00A4 00207 movwf Int_Count 003B 1521 00208 bsf Int_Flag,Stop ; Set Stop bnit Flag 003C 280E 00209 goto IH_Interrupt_Poll MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 5 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00210 003D 00211 IH_RB0_Stop 003D 0BA4 00212 decfsz Int_Count,f ; Two Bits Yet ? 003E 280E 00213 goto IH_Interrupt_Poll ; No, 003F 01A1 00214 clrf Int_Flag ; Reset flags 0040 0826 00215 movf Int_Data,w 0041 00B3 00216 movwf Data_Recieved 0042 142C 00217 bsf flag,Keyboard_Data ; Set Flag to show new keyboard Data 00218 ;bcf Data_Error_LED ; Led Off 0043 280E 00219 goto IH_Interrupt_Poll 00220 0044 00221 IH_RB0_End ; Rising Signal 0044 108B 00222 bcf INTCON,INTF ; Clear Interupt flag 0045 1301 00223 bcf OPTION_REG,INTEDG ; Set RB0 Interupt to falling edge 0046 1283 00224 bcf STATUS,RP0 ; change to bank 0 0047 1786 00225 bsf Keyboard_Clk_Out ; Mirror Signal 0048 280E 00226 goto IH_Interrupt_Poll 00227 00228 ; *********************************************************** 00229 ; * Recieve DMX Data 0049 00230 IH_Check_USART 0049 128C 00231 bcf PIR1,RCIF ; Clear Interupt flag 00232 004A 00233 IH_Check_HW_Overrun 004A 1898 00234 btfsc RCSTA,OERR ; Has a HW overrun occurred ? 004B 2885 00235 goto IH_HW_Overrun ; Yes, do a HW reset 00236 004C 00237 IH_Check_9th_bit 00238 ; clrf IH_Timer_Count ; Clear Timer count 004C 1C18 00239 btfss RCSTA,RX9D ; Dose 9th Bit of data = 1, eg Break 004D 2856 00240 goto IH_Wait_Break ; Yes, start receiving again 00241 004E 00242 IH_Check_SW_Overrun 004E 1918 00243 btfsc RCSTA,FERR ; Has a framing error occurred ? 004F 288B 00244 goto IH_SW_Overrun ; Yes, do a Usart reset 00245 0050 00246 IH_Test_Flags 0050 1920 00247 btfsc Iflag,Valid_Channel ; Test to see if receiving valid channels 0051 2877 00248 goto IH_Valid_Channel ; Yes, get next channel 0052 18A0 00249 btfsc Iflag,Start_Detected ; Test to see it start byte has arrived 0053 2865 00250 goto IH_Wait_Channel ; Yes, Check Channel counts 0054 1820 00251 btfsc Iflag,Break_Detected ; Test to see if break has arrived 0055 285D 00252 goto IH_Wait_Start ; Yes, wait for start byte 00253 0056 00254 IH_Wait_Break 0056 01A0 00255 clrf Iflag ; Clear all interupt flags 0057 081A 00256 movf RCREG,w ; Move recieved data in to w 0058 1818 00257 btfsc RCSTA,RX9D ; Test if break has arrived 0059 280E 00258 goto IH_Interrupt_Poll ; No, Break not detected 005A 1903 00259 btfsc STATUS,Z ; Yes, Dose detected break =0 ? 005B 1420 00260 bsf Iflag,Break_Detected ; Yes, set flag to indicate break arrived 005C 280E 00261 goto IH_Interrupt_Poll 00262 MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 6 LOC OBJECT CODE LINE SOURCE TEXT VALUE 005D 00263 IH_Wait_Start 005D 01A9 00264 clrf IH_Channels_Recieved ; Clear number of channels recieved 005E 01A7 00265 clrf IH_Channel_Count_L ; Clear Low channel count 005F 01A8 00266 clrf IH_Channel_Count_H ; Clear High channel count 0060 14A0 00267 bsf Iflag,Start_Detected ; Set flag to indicate Start Byte arrived 0061 081A 00268 movf RCREG,w ; Check start code = 0 0062 1D03 00269 btfss STATUS,Z ; 0063 01A0 00270 clrf Iflag ; if No then clear flags and wait for ne xt break 0064 280E 00271 goto IH_Interrupt_Poll 00272 0065 00273 IH_Wait_Channel 0065 081A 00274 movf RCREG,w ; Store Recieved value in temp 0066 00AA 00275 movwf IH_Temp 0067 0AA7 00276 incf IH_Channel_Count_L,f ; Increase channel count 0068 1903 00277 btfsc STATUS,Z ; for both Low and High bytes 0069 0AA8 00278 incf IH_Channel_Count_H,f ; 006A 0828 00279 movf IH_Channel_Count_H,w ; Compare the high byte of channel count to 006B 0631 00280 xorwf DMX_Start_Addr_H,w ; DMX start address 006C 1D03 00281 btfss STATUS,Z ; If Not equal then exit 006D 280E 00282 goto IH_Interrupt_Poll 006E 0827 00283 movf IH_Channel_Count_L,w ; Compare the low byte of channel count to 006F 0630 00284 xorwf DMX_Start_Addr_L,w ; DMX Start address 0070 1D03 00285 btfss STATUS,Z ; if not equal then exit 0071 280E 00286 goto IH_Interrupt_Poll 0072 1520 00287 bsf Iflag,Valid_Channel ; if address equal then set valid channe ls 0073 082A 00288 movf IH_Temp,w 0074 00B5 00289 movwf Channel_Values ; Store value in first channel 0075 0AA9 00290 incf IH_Channels_Recieved,f ; and increase count 0076 280E 00291 goto IH_Interrupt_Poll 00292 0077 00293 IH_Valid_Channel 0077 3035 00294 movlw Channel_Values ; Load address of memory block 0078 0729 00295 addwf IH_Channels_Recieved,w ; add channel offset 0079 0084 00296 movwf FSR ; and move in to FSR 007A 081A 00297 movf RCREG,w ; Store result in the 007B 0080 00298 movwf INDF ; channel position in memory 007C 0829 00299 movf IH_Channels_Recieved,w ; 007D 0AA9 00300 incf IH_Channels_Recieved,f ; Increase count (Note No effect on w !) 007E 0634 00301 xorwf Channels,w ; Check if all channels recieved 007F 1D03 00302 btfss STATUS,Z ; 0080 280E 00303 goto IH_Interrupt_Poll ; No, then return to interupt poll 0081 01A0 00304 clrf Iflag ; Yes, Clear flags and wait for break 0082 1585 00305 bsf Data_Rec_LED ; Set DMX Data LED 0083 152C 00306 bsf flag,DMX_Data ; Set DMX Data recieve flag 0084 280E 00307 goto IH_Interrupt_Poll ; exit back to Handler 00308 0085 00309 IH_HW_Overrun 0085 1218 00310 bcf RCSTA,CREN ; Reset UART 0086 1618 00311 bsf RCSTA,CREN ; receive logic 0087 15AC 00312 bsf flag,dmx_error ; Turn on hardware overrun LED MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 7 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0088 1605 00313 bsf Data_Error_LED ; Turn on DMX Error led 0089 1185 00314 bcf Data_Rec_LED ; Off Data Led 008A 284C 00315 goto IH_Check_9th_bit 00316 008B 00317 IH_SW_Overrun 008B 1218 00318 bcf RCSTA,CREN ; reset UART 008C 1618 00319 bsf RCSTA,CREN ; receive logic 008D 15AC 00320 bsf flag,dmx_error ; Turn on software Overrun Led 008E 1605 00321 bsf Data_Error_LED ; Turn on DMX Error led 008F 1185 00322 bcf Data_Rec_LED ; Off Data Led 0090 2850 00323 goto IH_Test_Flags 00324 00325 ;********************************************************** 00326 ;* Transmitte to keyboard 0091 00327 IH_Timer1 ; Keyboard Data Tx 0091 100C 00328 bcf PIR1,TMR1IF ; Clear interupt flag 0092 30FF 00329 movlw h'ff'-High(Keybd_TX_Constant-d'30') ; 0093 008F 00330 movwf TMR1H ; Reload Timer 0094 3055 00331 movlw h'ff'-Low(Keybd_TX_Constant-d'30') ; - 30 (Number of steps lost) 0095 008E 00332 movwf TMR1L ; To too Clk Change 0096 1B86 00333 btfsc Keyboard_Clk_Out ; High Or Low Out At Present 0097 289A 00334 goto IH_Data_TX ; High, 0098 1786 00335 bsf Keyboard_Clk_Out ; Low so set Clk then, 0099 280E 00336 goto IH_Interrupt_Poll ; exit back to Handler 00337 009A 00338 IH_Data_TX 009A 19A2 00339 btfsc Int_FlagB,Data_End ; Finised TX ? 009B 28C2 00340 goto IH_Data_End ; Yes. shut it all down then !! 009C 1922 00341 btfsc Int_FlagB,Stop ; Stop Bit Sent ? 009D 28BD 00342 goto IH_Data_Stop ; Yes, 009E 18A2 00343 btfsc Int_FlagB,Parity 009F 28B6 00344 goto IH_Data_Parity 00A0 1822 00345 btfsc Int_FlagB,Start ; Start Bit Sent ? 00A1 28AA 00346 goto IH_Data_Start ; Yes, 00347 00A2 00348 IH_Data_Beginning 00A2 3008 00349 movlw d'8' ; Setup Bits to tx 00A3 00A5 00350 movwf Int_CountB 00A4 01AB 00351 clrf Int_Parity 00A5 1306 00352 bcf Keyboard_Data_Out ; Clear Data Output 00A6 1185 00353 bcf Data_Rec_LED ; Led Off 00A7 1422 00354 bsf Int_FlagB,Start ; Set Flag 00A8 1386 00355 bcf Keyboard_Clk_Out ; Clear Clock output 00A9 280E 00356 goto IH_Interrupt_Poll 00357 00AA 00358 IH_Data_Start 00AA 1823 00359 btfsc Int_TX_Data,0 ; Check Bit 0 00AB 1706 00360 bsf Keyboard_Data_Out 00AC 1C23 00361 btfss Int_TX_Data,0 00AD 1306 00362 bcf Keyboard_Data_Out 00AE 1823 00363 btfsc Int_TX_Data,0 ; Create Parity Register 00AF 0AAB 00364 incf Int_Parity,f 00B0 0CA3 00365 rrf Int_TX_Data,f ; Rotate Data Around MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 8 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00B1 1386 00366 bcf Keyboard_Clk_Out ; Clear Clock output 00B2 0BA5 00367 decfsz Int_CountB,f ; Exit Is More Data to Collect 00B3 280E 00368 goto IH_Interrupt_Poll 00B4 14A2 00369 bsf Int_FlagB,Parity ; Set Parity bit Flag 00B5 280E 00370 goto IH_Interrupt_Poll 00371 00B6 00372 IH_Data_Parity 00B6 182B 00373 btfsc Int_Parity,0 ; Check Parity Bit 0 00B7 1306 00374 bcf Keyboard_Data_Out ; And set output 00B8 1C2B 00375 btfss Int_Parity,0 00B9 1706 00376 bsf Keyboard_Data_Out 00BA 1522 00377 bsf Int_FlagB,Stop ; Set Stop bit Flag 00BB 1386 00378 bcf Keyboard_Clk_Out ; Clear Clock output 00BC 280E 00379 goto IH_Interrupt_Poll 00380 00381 00BD 00382 IH_Data_Stop 00BD 1706 00383 bsf Keyboard_Data_Out ; Set Keyboard Data Out 00BE 0000 00384 nop 00BF 15A2 00385 bsf Int_FlagB,Data_End ; Set Data End Flag 00C0 1386 00386 bcf Keyboard_Clk_Out ; Clear Clock output 00C1 280E 00387 goto IH_Interrupt_Poll 00388 00C2 00389 IH_Data_End 00C2 1010 00390 bcf T1CON,TMR1ON ; Disable Timer 1 00C3 01A2 00391 clrf Int_FlagB ; Reset flags 00C4 10AC 00392 bcf flag,Keyboard_TX ; Clear Trasmit Flag 00C5 1585 00393 bsf Data_Rec_LED ; Led On 00C6 280E 00394 goto IH_Interrupt_Poll 00395 00396 ; --------------------------------------------------------------------------- 00397 ; ***** Tables 00398 00399 ; Number Lookup Table - Return Keyboard Codes for Numbers 00400 ; 00C7 00401 Num_Lookup 00C7 018A 00402 clrf PCLATH 00C8 0782 00403 addwf PCL,f 00C9 3445 00404 retlw h'45' ;0 00CA 3416 00405 retlw h'16' ;1 00CB 341E 00406 retlw h'1E' ;2 00CC 3426 00407 retlw h'26' ;3 00CD 3425 00408 retlw h'25' ;4 00CE 342E 00409 retlw h'2E' ;5 00CF 3436 00410 retlw h'36' ;6 00D0 343D 00411 retlw h'3D' ;7 00D1 343E 00412 retlw h'3E' ;8 00D2 3446 00413 retlw h'46' ;9 00414 00415 ; Message Lookup 00D3 00416 msg1 00D3 3000 00417 movlw HIGH(msg1+3) 00D4 008A 00418 movwf PCLATH MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 9 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00D5 0840 00419 movf String_Count,w 00D6 0782 00420 addwf PCL,f 00D7 341B 00421 retlw h'1B' ; s String =28 Chactures 00D8 3424 00422 retlw h'24' ; e 00D9 344B 00423 retlw h'4B' ; l 00DA 3424 00424 retlw h'24' ; e 00DB 3421 00425 retlw h'21' ; c 00DC 342C 00426 retlw h'2C' ; t 00DD 3429 00427 retlw h'29' ; 00DE 341C 00428 retlw h'1C' ; a 00DF 3423 00429 retlw h'23' ; d 00E0 3423 00430 retlw h'23' ; d 00E1 342D 00431 retlw h'2D' ; r 00E2 3424 00432 retlw h'24' ; e 00E3 341B 00433 retlw h'1B' ; s 00E4 341B 00434 retlw h'1B' ; s 00E5 3429 00435 retlw h'29' ; 00E6 343C 00436 retlw h'3C' ; u 00E7 341B 00437 retlw h'1B' ; s 00E8 3443 00438 retlw h'43' ; i 00E9 3431 00439 retlw h'31' ; n 00EA 3434 00440 retlw h'34' ; g 00EB 3429 00441 retlw h'29' ; 00EC 3479 00442 retlw h'79' ; + 00ED 347B 00443 retlw h'7B' ; - 00EE 3429 00444 retlw h'29' ; 00EF 3442 00445 retlw h'42' ; k 00F0 3424 00446 retlw h'24' ; e 00F1 3435 00447 retlw h'35' ; y 00F2 341B 00448 retlw h'1B' ; s 00F3 3429 00449 retlw h'29' ; 00F4 341C 00450 retlw h'1C' ; a 00F5 3423 00451 retlw h'23' ; d 00F6 3423 00452 retlw h'23' ; d 00F7 342D 00453 retlw h'2D' ; r 00F8 3424 00454 retlw h'24' ; e 00F9 341B 00455 retlw h'1B' ; s 00FA 341B 00456 retlw h'1B' ; s 00FB 3400 00457 retlw h'0' ; End OF String 00458 0100 00459 org h'100' ; Prevent table crossing PCLATH 0100 00460 msg2 0100 3001 00461 movlw HIGH(msg2+3) 0101 008A 00462 movwf PCLATH ; Setup PCLATH 0102 0840 00463 movf String_Count,w 0103 0782 00464 addwf PCL,f 0104 341B 00465 retlw h'1B' ; s String =24 Chactures 0105 3424 00466 retlw h'24' ; e 0106 344B 00467 retlw h'4B' ; l 0107 3424 00468 retlw h'24' ; e 0108 3421 00469 retlw h'21' ; c 0109 342C 00470 retlw h'2C' ; t 010A 3429 00471 retlw h'29' ; MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 10 LOC OBJECT CODE LINE SOURCE TEXT VALUE 010B 3442 00472 retlw h'42' ; k 010C 3424 00473 retlw h'24' ; e 010D 3435 00474 retlw h'35' ; y 010E 341B 00475 retlw h'1B' ; s 010F 3429 00476 retlw h'29' ; 0110 342B 00477 retlw h'2B' ; f 0111 3444 00478 retlw h'44' ; o 0112 342D 00479 retlw h'2D' ; r 0113 3429 00480 retlw h'29' ; 0114 3421 00481 retlw h'21' ; c 0115 3433 00482 retlw h'33' ; h 0116 341C 00483 retlw h'1C' ; a 0117 3431 00484 retlw h'31' ; n 0118 3431 00485 retlw h'31' ; n 0119 3424 00486 retlw h'24' ; e 011A 344B 00487 retlw h'4B' ; l 011B 3400 00488 retlw h'0' ; End Of String 00489 011C 00490 msg3 011C 3001 00491 movlw HIGH(msg3+3) 011D 008A 00492 movwf PCLATH ; Setup PCLATH 011E 0840 00493 movf String_Count,w 011F 0782 00494 addwf PCL,f 0120 341B 00495 retlw h'1B' ; s String =14 Chactures 0121 3424 00496 retlw h'24' ; e 0122 342C 00497 retlw h'2C' ; t 0123 342C 00498 retlw h'2C' ; t 0124 3443 00499 retlw h'43' ; i 0125 3431 00500 retlw h'31' ; n 0126 3434 00501 retlw h'34' ; g 0127 341B 00502 retlw h'1B' ; s 0128 3429 00503 retlw h'29' ; 0129 341B 00504 retlw h'1B' ; s 012A 341C 00505 retlw h'1C' ; a 012B 342A 00506 retlw h'2A' ; v 012C 3424 00507 retlw h'24' ; e 012D 3423 00508 retlw h'23' ; d 012E 3400 00509 retlw h'0' ; End Of String 00510 012F 00511 msg4 012F 3001 00512 movlw HIGH(msg4+3) 0130 008A 00513 movwf PCLATH ; Setup PCLATH 0131 0840 00514 movf String_Count,w 0132 0782 00515 addwf PCL,f 0133 341B 00516 retlw h'1B' ; S String =18 Chactures 0134 3424 00517 retlw h'24' ; e 0135 342C 00518 retlw h'2C' ; t 0136 342C 00519 retlw h'2C' ; t 0137 3443 00520 retlw h'43' ; i 0138 3431 00521 retlw h'31' ; n 0139 3434 00522 retlw h'34' ; g 013A 341B 00523 retlw h'1B' ; s 013B 3429 00524 retlw h'29' ; MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 11 LOC OBJECT CODE LINE SOURCE TEXT VALUE 013C 3431 00525 retlw h'31' ; N 013D 3444 00526 retlw h'44' ; o 013E 342C 00527 retlw h'2C' ; t 013F 3429 00528 retlw h'29' ; 0140 341C 00529 retlw h'1C' ; A 0141 344B 00530 retlw h'4B' ; l 0142 344B 00531 retlw h'4B' ; l 0143 3429 00532 retlw h'29' ; 0144 341B 00533 retlw h'1B' ; S 0145 341C 00534 retlw h'1C' ; a 0146 342A 00535 retlw h'2A' ; v 0147 3424 00536 retlw h'24' ; e 0148 3423 00537 retlw h'23' ; d 0149 3400 00538 retlw h'0' ; End Of String 00539 014A 00540 Initalise 014A 0185 00541 clrf PORTA ; \ 014B 0186 00542 clrf PORTB ; 014C 01AC 00543 clrf flag ; Clear flag register 014D 01A0 00544 clrf Iflag ; Clear Interupt flag 014E 01A1 00545 clrf Int_Flag ; " 014F 01A2 00546 clrf Int_FlagB ; " 0150 01B0 00547 clrf DMX_Start_Addr_L; Clear DMX Address 0151 01B1 00548 clrf DMX_Start_Addr_H; 00549 0152 3007 00550 movlw b'00000111' ; Disable comparitors 0153 009F 00551 movwf CMCON 0154 3000 00552 movlw b'00000000' 0155 0090 00553 movwf T1CON ; Setup Timer 1 0156 1683 00554 bsf STATUS,RP0 ; Set up port I/O directions 0157 30E7 00555 movlw PORTA_CONFIG ; 1 = Input 0 = Output 0158 0085 00556 movwf TRISA ; Make PORTA 0159 303F 00557 movlw PORTB_CONFIG 015A 0086 00558 movwf TRISB ; Make PORTB 015B 3080 00559 movlw B'10000000' ; set up options - Timer0 from instruction cycle clock with 015C 0081 00560 movwf OPTION_REG ; no prescaler 015D 1283 00561 bcf STATUS,RP0 ; Bank 0 00562 015E 00563 Get_DMX_Address 015E 3000 00564 movlw d'0' ; EEPROM Address for DMX Address Low 015F 00F4 00565 movwf ee_address 0160 229D 00566 call ee_read 0161 00B0 00567 movwf DMX_Start_Addr_L; Low Address 0162 0AF4 00568 incf ee_address,f 0163 229D 00569 call ee_read 0164 00B1 00570 movwf DMX_Start_Addr_H; High Address 0165 3008 00571 movlw Number_Of_Channels 0166 00B4 00572 movwf Channels ; Number of DMX Channels to recieve 0167 1786 00573 bsf Keyboard_Clk_Out 00574 00575 ; Initialize UART 0168 1683 00576 bsf STATUS,RP0 ; Bank 1 0169 3004 00577 movlw Baud_Rate_Constant MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 12 LOC OBJECT CODE LINE SOURCE TEXT VALUE 016A 0099 00578 movwf SPBRG 016B 1518 00579 bsf TXSTA,BRGH 016C 1218 00580 bcf TXSTA,SYNC 016D 140C 00581 bsf PIE1,TMR1IE ; Enable Timer1 Interupt 016E 168C 00582 bsf PIE1,RCIE ; Enable USART Interupt 016F 1283 00583 bcf STATUS,RP0 ; Bank 0 0170 1718 00584 bsf RCSTA,RX9 0171 1618 00585 bsf RCSTA,CREN 0172 1798 00586 bsf RCSTA,SPEN 00587 00588 ; Interrupts 0173 018C 00589 clrf PIR1 ; Clear interupts 0174 018B 00590 clrf INTCON 0175 170B 00591 bsf INTCON,PEIE ; Enable Peripheral Interupts 0176 160B 00592 bsf INTCON,INTE ; Enable RB0 Interupt 0177 178B 00593 bsf INTCON,GIE ; Enable global interrupts 00594 00595 ; ----------------------------------------------------------------- 0178 00596 Main 0178 192C 00597 btfsc flag,DMX_Data ; New DMX Data ??? 0179 217D 00598 call Check_DMX_Data ; Yes 017A 182C 00599 btfsc flag,Keyboard_Data ; New Keyboard Data ? 017B 29D2 00600 goto Check_Keyboard ; Yes 017C 2978 00601 goto Main ; Loop 00602 00603 00604 ; ***************************************************************************** 00605 ; * Check Incomming Data * 00606 ; * Input - DMX_Data, flags Output - flags * 00607 ; ***************************************************************************** 017D 00608 Check_DMX_Data 017D 01AE 00609 clrf Channel_Flags ; DMX Present output Flags 017E 112C 00610 bcf flag,DMX_Data ; Clear flag 00611 017F 0835 00612 movf Channel_Values,w; Channel 1 0180 3C80 00613 sublw Switch_Point ; 0181 1C03 00614 btfss STATUS,C ; greater than switch Point ? 0182 142E 00615 bsf Channel_Flags,0 ; Yes 00616 0183 0836 00617 movf Channel_Values+d'1',w ; Channel 2 0184 3C80 00618 sublw Switch_Point ; 0185 1C03 00619 btfss STATUS,C ; greater than switch Point ? 0186 14AE 00620 bsf Channel_Flags,1 ; Yes 00621 0187 0837 00622 movf Channel_Values+d'2',w ; Channel 3 0188 3C80 00623 sublw Switch_Point ; 0189 1C03 00624 btfss STATUS,C ; greater than switch Point ? 018A 152E 00625 bsf Channel_Flags,2 ; Yes 00626 018B 0838 00627 movf Channel_Values+d'3',w ; Channel 4 018C 3C80 00628 sublw Switch_Point ; 018D 1C03 00629 btfss STATUS,C ; greater than switch Point ? 018E 15AE 00630 bsf Channel_Flags,3 ; Yes MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 13 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00631 018F 0839 00632 movf Channel_Values+d'4',w ; Channel 5 0190 3C80 00633 sublw Switch_Point ; 0191 1C03 00634 btfss STATUS,C ; greater than switch Point ? 0192 162E 00635 bsf Channel_Flags,4 ; Yes 00636 0193 083A 00637 movf Channel_Values+d'5',w ; Channel 6 0194 3C80 00638 sublw Switch_Point ; 0195 1C03 00639 btfss STATUS,C ; greater than switch Point ? 0196 16AE 00640 bsf Channel_Flags,5 ; Yes 00641 0197 083B 00642 movf Channel_Values+d'6',w ; Channel 7 0198 3C80 00643 sublw Switch_Point ; 0199 1C03 00644 btfss STATUS,C ; greater than switch Point ? 019A 172E 00645 bsf Channel_Flags,6 ; Yes 00646 019B 083C 00647 movf Channel_Values+d'7',w ; Channel 8 019C 3C80 00648 sublw Switch_Point ; 019D 1C03 00649 btfss STATUS,C ; greater than switch Point ? 019E 17AE 00650 bsf Channel_Flags,7 ; Yes 00651 019F 00652 Check_Channel_Flags 019F 082E 00653 movf Channel_Flags,w ; Look for chages between Current 01A0 062F 00654 xorwf Old_Channel_Flags,w ; Activated DMX Channels and the old ones 01A1 052E 00655 andwf Channel_Flags,w ; looking for value changing 0 -> 1 01A2 00AF 00656 movwf Old_Channel_Flags ; Save Flags Left 4 Processing 01A3 0103 00657 clrw 01A4 182F 00658 btfsc Old_Channel_Flags,0 ; Key 1 EEPROM Address 01A5 3002 00659 movlw d'2' 01A6 18AF 00660 btfsc Old_Channel_Flags,1 ; Key 2 EEPROM Address 01A7 3008 00661 movlw d'8' 01A8 192F 00662 btfsc Old_Channel_Flags,2 ; Key 3 EEPROM Address 01A9 300E 00663 movlw d'14' 01AA 19AF 00664 btfsc Old_Channel_Flags,3 ; Key 4 EEPROM Address 01AB 3014 00665 movlw d'20' 01AC 1A2F 00666 btfsc Old_Channel_Flags,4 ; Key 5 EEPROM Address 01AD 301A 00667 movlw d'26' 01AE 1AAF 00668 btfsc Old_Channel_Flags,5 ; Key 6 EEPROM Address 01AF 3020 00669 movlw d'32' 01B0 1B2F 00670 btfsc Old_Channel_Flags,6 ; Key 7 EEPROM Address 01B1 3026 00671 movlw d'38' 01B2 1BAF 00672 btfsc Old_Channel_Flags,7 ; Key 8 EEPROM Address 01B3 302C 00673 movlw d'44' 01B4 39FF 00674 andlw b'11111111' ; Used to get Status register to change 01B5 1903 00675 btfsc STATUS,Z ; Any Data there ?? 01B6 29CF 00676 goto Check_End ; NO, 00677 01B7 00F4 00678 movwf ee_address ; Look Value 1 01B8 229D 00679 call ee_read ; Get Value to Send To PC 01B9 2293 00680 call To_Keyboard ; Send it ! 01BA 2301 00681 call Delay ; And Wait 00682 01BB 0AF4 00683 incf ee_address,f ; Lookup Value 2 MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 14 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01BC 229D 00684 call ee_read ; Get Value to Send To PC 01BD 2293 00685 call To_Keyboard ; Send it ! 01BE 2301 00686 call Delay ; And Wait 00687 01BF 0AF4 00688 incf ee_address,f ; Lookup Value 3 01C0 229D 00689 call ee_read ; Get Value to Send To PC 01C1 2293 00690 call To_Keyboard ; Send it ! 01C2 2301 00691 call Delay ; And Wait 00692 01C3 0AF4 00693 incf ee_address,f ; Lookup Value 4 01C4 229D 00694 call ee_read ; Get Value to Send To PC 01C5 2293 00695 call To_Keyboard ; Send it ! 01C6 2301 00696 call Delay ; And Wait 00697 01C7 0AF4 00698 incf ee_address,f ; Lookup Value 5 01C8 229D 00699 call ee_read ; Get Value to Send To PC 01C9 2293 00700 call To_Keyboard ; Send it ! 01CA 2301 00701 call Delay ; And Wait 00702 01CB 0AF4 00703 incf ee_address,f ; Lookup Value 6 01CC 229D 00704 call ee_read ; Get Value to Send To PC 01CD 2293 00705 call To_Keyboard ; Send it ! 01CE 2301 00706 call Delay ; And Wait 01CF 00707 Check_End 01CF 082E 00708 movf Channel_Flags,w ; Loadup Old Channel Flags 01D0 00AF 00709 movwf Old_Channel_Flags 01D1 0008 00710 return 00711 00712 ; ***************************************************************************** 00713 ; * Check Chacture From Keyboard * 00714 ; * Input - Flags, Data_Recieved Output - None * 00715 ; ***************************************************************************** 01D2 00716 Check_Keyboard 01D2 102C 00717 bcf flag,Keyboard_Data ; Clear recieved flag 01D3 0833 00718 movf Data_Recieved,w ; Check Data 01D4 3A7E 00719 xorlw Scroll_Key ; to see if the same as setup key 01D5 1D03 00720 btfss STATUS,Z ; The Same ? 01D6 2978 00721 goto Main ; No, 00722 01D7 01C0 00723 clrf String_Count ; Clear Count 01D8 1683 00724 bsf STATUS,RP0 ; Bank 1 01D9 128C 00725 bcf PIE1,RCIE ; disble USART Interupt Flag 01DA 1283 00726 bcf STATUS,RP0 ; Bank 0 01DB 1585 00727 bsf Data_Rec_LED 01DC 1605 00728 bsf Data_Error_LED ; Switch Off LED's 01DD 00729 msg1_loop 01DD 0840 00730 movf String_Count,w ; get chacture 01DE 20D3 00731 call msg1 01DF 3E00 00732 addlw d'0' ; Check Status reg looking for Z 01E0 1903 00733 btfsc STATUS,Z 01E1 29E5 00734 goto Display_Address 01E2 2283 00735 call Send_Char ; Send Chacture 01E3 0AC0 00736 incf String_Count,f MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 15 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01E4 29DD 00737 goto msg1_loop ; and arond Again 00738 01E5 00739 Display_Address ; Disply current DMX Address 01E5 0830 00740 movf DMX_Start_Addr_L,w 01E6 00C4 00741 movwf NumL 01E7 0831 00742 movf DMX_Start_Addr_H,w 01E8 00C3 00743 movwf NumH 01E9 2AB7 00744 goto bin2dec999fast 00745 01EA 00746 Address_Recieve 01EA 0000 00747 nop 01EB 1C2C 00748 btfss flag,Keyboard_Data ; look for new keyboard Data 01EC 29EA 00749 goto Address_Recieve 00750 01ED 102C 00751 bcf flag,Keyboard_Data ; Clear recieved flag 01EE 0833 00752 movf Data_Recieved,w ; Check Data 01EF 3AF0 00753 xorlw h'F0' ; to see if F0 ? 01F0 1D03 00754 btfss STATUS,Z ; The Same ? 01F1 29F4 00755 goto Address_Recieve_2 ; No 01F2 162C 00756 bsf flag,ignore_next ; Set Flag to ignore next chacture 01F3 29EA 00757 goto Address_Recieve ; Recieve next Char 00758 01F4 00759 Address_Recieve_2 01F4 1E2C 00760 btfss flag,ignore_next ; Ignore next flag set ? 01F5 29F8 00761 goto Address_Recieve_3 ; No, 01F6 122C 00762 bcf flag,ignore_next ; Yes - clear 01F7 29EA 00763 goto Address_Recieve ; Recieve next Char 00764 01F8 00765 Address_Recieve_3 01F8 0833 00766 movf Data_Recieved,w ; Check Data 01F9 3A79 00767 xorlw Plus_Key ; to see if + ? 01FA 1903 00768 btfsc STATUS,Z ; The Same ? 01FB 2A71 00769 goto Inc_DMX_Address ; Yes 00770 01FC 0833 00771 movf Data_Recieved,w ; Check Data 01FD 3A7B 00772 xorlw Minus_Key ; to see if - ? 01FE 1903 00773 btfsc STATUS,Z ; The Same ? 01FF 2A79 00774 goto Dec_DMX_Address ; Yes 00775 0200 0833 00776 movf Data_Recieved,w ; Check Data 0201 3A7E 00777 xorlw Scroll_Key ; to see if save ? 0202 1903 00778 btfsc STATUS,Z ; The Same ? 0203 2A09 00779 goto Save_Address ; Yes 00780 0204 0833 00781 movf Data_Recieved,w ; Check Data 0205 3A76 00782 xorlw Esc_Key ; to see if Escape ? 0206 1903 00783 btfsc STATUS,Z ; The Same ? 0207 2A62 00784 goto Exit_Setup ; Yes 00785 0208 29EA 00786 goto Address_Recieve 00787 0209 00788 Save_Address ; Save DMX Addrsss in EEPROM 0209 3000 00789 movlw d'0' ; Address 1 MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 16 LOC OBJECT CODE LINE SOURCE TEXT VALUE 020A 00F4 00790 movwf ee_address 020B 0830 00791 movf DMX_Start_Addr_L,w ; Write Low address 020C 00F5 00792 movwf ee_data 020D 22A4 00793 call ee_write 020E 0AF4 00794 incf ee_address,f ; Write next address 020F 0831 00795 movf DMX_Start_Addr_H,w ; Write High Address 0210 00F5 00796 movwf ee_data 0211 22A4 00797 call ee_write 00798 0212 3008 00799 movlw d'8' ; Load Channel Count 0213 00C2 00800 movwf Char_Channel 0214 0AF4 00801 incf ee_address,f 00802 0215 00803 Char_Setup 0215 01C1 00804 clrf Char_Count 0216 01C7 00805 clrf Char_Bank ; Clear Char Bank 0217 01C8 00806 clrf Char_Bank+1 0218 01C9 00807 clrf Char_Bank+2 0219 01CA 00808 clrf Char_Bank+3 021A 01CB 00809 clrf Char_Bank+4 021B 01CC 00810 clrf Char_Bank+5 021C 01CD 00811 clrf Char_Bank+6 021D 01C0 00812 clrf String_Count 021E 00813 msg2_loop 021E 0840 00814 movf String_Count,w ; get chacture 021F 2100 00815 call msg2 0220 3E00 00816 addlw d'0' ; Check Status reg looking for Z 0221 1903 00817 btfsc STATUS,Z 0222 2A26 00818 goto Char_Setup_B 0223 2283 00819 call Send_Char ; Send Chacture 0224 0AC0 00820 incf String_Count,f 0225 2A1E 00821 goto msg2_loop ; and arond Again 00822 0226 00823 Char_Setup_B 0226 0842 00824 movf Char_Channel,w 0227 3C09 00825 sublw d'9' ; Find Current Channel 0228 20C7 00826 call Num_Lookup ; lookup number code 0229 2283 00827 call Send_Char ; And Send 022A 305A 00828 movlw Enter_Key 022B 2283 00829 call Send_Char ; + CR 022C 102C 00830 bcf flag,Keyboard_Data ; Clear New Data Flag 022D 3047 00831 movlw Char_Bank ; Setup indirect address 022E 0084 00832 movwf FSR 00833 022F 0833 00834 movf Data_Recieved,w ; Check Data 0230 3AF0 00835 xorlw h'F0' ; to see if F0 ? 0231 1D03 00836 btfss STATUS,Z ; The Same ? 0232 2A37 00837 goto Char_Save ; No 0233 00838 char_wait_loop 0233 0000 00839 nop 0234 1C2C 00840 btfss flag,Keyboard_Data ; Recieve next Char 0235 2A33 00841 goto char_wait_loop 0236 102C 00842 bcf flag,Keyboard_Data ; Next Char is good !!! MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 17 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00843 0237 00844 Char_Save 0237 0000 00845 nop 0238 1C2C 00846 btfss flag,Keyboard_Data ; look for new keyboard Data 0239 2A37 00847 goto Char_Save 023A 102C 00848 bcf flag,Keyboard_Data ; Clear Flag 00849 023B 0833 00850 movf Data_Recieved,w ; Check Data 023C 3A7E 00851 xorlw Scroll_Key ; to see if Enter ? 023D 1903 00852 btfsc STATUS,Z ; The Same ? 023E 2A4C 00853 goto Char_Write ; Yes, Write to EEPROM 00854 023F 0833 00855 movf Data_Recieved,w ; Check Data 0240 3A76 00856 xorlw Esc_Key ; to see if Enter ? 0241 1903 00857 btfsc STATUS,Z ; The Same ? 0242 2A62 00858 goto Exit_Setup ; Yes 00859 0243 0833 00860 movf Data_Recieved,w 0244 0080 00861 movwf INDF ; Save Key 0245 0A84 00862 incf FSR,f ; Next pointer.... 0246 0AC1 00863 incf Char_Count,f ; Increase count 0247 0841 00864 movf Char_Count,w 0248 3A07 00865 xorlw d'7' ; dose it = 7 ?? 0249 1903 00866 btfsc STATUS,Z 024A 03C1 00867 decf Char_Count,f ; Yes, make = 6. 024B 2A37 00868 goto Char_Save 00869 024C 00870 Char_Write 024C 3006 00871 movlw d'6' ; Setup Write to 6 locations in EEPROM 024D 00C1 00872 movwf Char_Count 024E 3047 00873 movlw Char_Bank ; Setup indirect addressing 024F 0084 00874 movwf FSR 0250 00875 Char_Write_Loop 0250 0800 00876 movf INDF,w 0251 00F5 00877 movwf ee_data ; Get data 0252 22A4 00878 call ee_write ; And write it 0253 0AF4 00879 incf ee_address,f ; next Address 0254 0A84 00880 incf FSR,f ; Next Address 0255 0BC1 00881 decfsz Char_Count,f ; Check if finished ? 0256 2A50 00882 goto Char_Write_Loop ; No, 00883 0257 0BC2 00884 decfsz Char_Channel,f ; End Of write next channel or finish ! 0258 2A15 00885 goto Char_Setup 00886 0259 00887 Char_Finish 0259 01C0 00888 clrf String_Count 025A 00889 msg3_loop 025A 0840 00890 movf String_Count,w ; get chacture 025B 211C 00891 call msg3 025C 3E00 00892 addlw d'0' ; Check Status reg looking for Z 025D 1903 00893 btfsc STATUS,Z 025E 2A6B 00894 goto Exit_All 025F 2283 00895 call Send_Char ; Send Chacture MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 18 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0260 0AC0 00896 incf String_Count,f 0261 2A5A 00897 goto msg3_loop ; and arond Again 00898 00899 0262 00900 Exit_Setup 0262 01C0 00901 clrf String_Count 0263 00902 msg4_loop 0263 0840 00903 movf String_Count,w ; get chacture 0264 212F 00904 call msg4 0265 3E00 00905 addlw d'0' ; Check Status reg looking for Z 0266 1903 00906 btfsc STATUS,Z 0267 2A6B 00907 goto Exit_All 0268 2283 00908 call Send_Char ; Send Chacture 0269 0AC0 00909 incf String_Count,f 026A 2A63 00910 goto msg4_loop 00911 026B 00912 Exit_All 026B 1185 00913 bcf Data_Rec_LED 026C 1205 00914 bcf Data_Error_LED ; Switch Off LED's 026D 1683 00915 bsf STATUS,RP0 ; Bank 1 026E 168C 00916 bsf PIE1,RCIE ; Enable USART Interupt Flag 026F 1283 00917 bcf STATUS,RP0 ; Bank 0 0270 2978 00918 goto Main 00919 00920 ; ***************************************************************************** 00921 ; * Increase Decrease DMX Address * 00922 ; * Input - DMX Address Output * 00923 ; ***************************************************************************** 00924 0271 00925 Inc_DMX_Address 0271 0FB0 00926 incfsz DMX_Start_Addr_L,f ; Increase DMX Address 0272 29E5 00927 goto Display_Address ; No Overrun 00928 0273 0AB1 00929 incf DMX_Start_Addr_H,f ; Yes increase High 0274 1CB1 00930 btfss DMX_Start_Addr_H,1 ; High =2 ??? 0275 29E5 00931 goto Display_Address ; No 0276 03B1 00932 decf DMX_Start_Addr_H,f ; Yes 0277 03B0 00933 decf DMX_Start_Addr_L,f ; 0278 29EA 00934 goto Address_Recieve ; Don't display new address 00935 0279 00936 Dec_DMX_Address 0279 03B0 00937 decf DMX_Start_Addr_L,f 027A 1D03 00938 btfss STATUS,Z ; Zero ??? 027B 29E5 00939 goto Display_Address ; No, 00940 027C 0831 00941 movf DMX_Start_Addr_H,w ; Yes, 027D 1903 00942 btfsc STATUS,Z ; High = 0 ??? 027E 2A81 00943 goto Dec_DMX_Address_A ; No 027F 03B1 00944 decf DMX_Start_Addr_H,f ; Yes, 0280 29E5 00945 goto Display_Address 00946 0281 00947 Dec_DMX_Address_A 0281 0AB0 00948 incf DMX_Start_Addr_L,f ; Back to 1 MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 19 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0282 29EA 00949 goto Address_Recieve ; Don't display new address 00950 00951 ; ***************************************************************************** 00952 ; * Send Chacture to keyboard * 00953 ; * Input - Chactuture in w Output - None 00954 ; ***************************************************************************** 0283 00955 Send_Char 0283 00BF 00956 movwf Char_In ; Save chacture 0284 2293 00957 call To_Keyboard ; send Chacture 0285 2301 00958 call Delay 0286 2301 00959 call Delay 0287 2301 00960 call Delay 0288 30F0 00961 movlw h'F0' ; Send Break string 0289 2293 00962 call To_Keyboard 028A 2301 00963 call Delay 028B 2301 00964 call Delay 028C 2301 00965 call Delay 028D 083F 00966 movf Char_In,w 028E 2293 00967 call To_Keyboard 028F 2301 00968 call Delay 0290 2301 00969 call Delay 0291 2301 00970 call Delay 0292 0008 00971 return 00972 00973 00974 00975 ; ***************************************************************************** 00976 ; * Write Byte to Keyboard * 00977 ; * Input - Byte to write in w Output - None * 00978 ; ***************************************************************************** 0293 00979 To_Keyboard 0293 00A3 00980 movwf Int_TX_Data ; Load Transmit register 0294 39FF 00981 andlw b'11111111' ; load Status register 0295 1903 00982 btfsc STATUS,Z ; Check data Present. 0296 0008 00983 return ; No, 0297 14AC 00984 bsf flag,Keyboard_TX; Set TX Flag - Wait till reset 0298 1410 00985 bsf T1CON,TMR1ON ; Enable Timer 1 - allow interupt 0299 00986 Keyboard_Wait 0299 0000 00987 nop 029A 18AC 00988 btfsc flag,Keyboard_TX; Wait till Transmitted. 029B 2A99 00989 goto Keyboard_Wait 029C 0008 00990 return 00991 00992 00993 00994 ; ****************************************************** 00995 ; * EEREAD * 00996 ; * * 00997 ; * ee_address = Address in EEPROM w = data read * 00998 ; ****************************************************** 00999 029D 01000 ee_read MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 20 LOC OBJECT CODE LINE SOURCE TEXT VALUE 029D 1683 01001 bsf STATUS,RP0 ; Move to bank 1 029E 0874 01002 movf ee_address,w 029F 009B 01003 movwf EEADR ; Store eeaddress in correct location 01004 ;bcf EECON1,EEPGD ; Point to Data Memory 02A0 141C 01005 bsf EECON1,RD ; Start EEprom read cycle 02A1 081A 01006 movf EEDATA,w 02A2 1283 01007 bcf STATUS,RP0 ; Bank to bank 0 02A3 0008 01008 return 01009 01010 ; *************************************************************** 01011 ; * EEWRITE * 01012 ; * * 01013 ; * ee_aaddress = Address in EEPROM ee_data = data to write * 01014 ; *************************************************************** 01015 02A4 01016 ee_write 01017 ;bcf PIR1,EEIF ; clear EE interupt flag 02A4 1683 01018 bsf STATUS,RP0 ; Move to bank 1 02A5 0874 01019 movf ee_address,w 02A6 009B 01020 movwf EEADR ; Save eeaddress 02A7 0875 01021 movf ee_data,w 02A8 009A 01022 movwf EEDATA ; save eedata 02A9 138B 01023 bcf INTCON,GIE ; Disable interupts 01024 ;bcf EECON1,EEPGD ; Access Data Memory 02AA 151C 01025 bsf EECON1,WREN ; put WREN 02AB 3055 01026 movlw H'55' 02AC 009D 01027 movwf EECON2 02AD 30AA 01028 movlw H'AA' 02AE 009D 01029 movwf EECON2 02AF 149C 01030 bsf EECON1,WR ; write cycle started 02B0 111C 01031 bcf EECON1,WREN ; Disable Futher writes 01032 ;bcf STATUS,RP0 ; goto Bank 0 02B1 0064 01033 wr1 clrwdt 01034 ;btfss PIR1,EEIF ; wait for EE write interupt flag 02B2 189C 01035 btfsc EECON1,WR ; Wait write to complete 02B3 2AB1 01036 goto wr1 ; write cycle wait 02B4 1283 01037 bcf STATUS,RP0 ; Bank 0 02B5 178B 01038 bsf INTCON,GIE ; Enable all interupts 02B6 0008 01039 return 01040 ; *********************************************** 01041 ; * Fast binary to decimal conversion (0..999) * 01042 ; * * 01043 ; * Input: NumH:NumL * 01044 ; * Output Hund:Tens_Ones (packed BCD) * 01045 ; * * 01046 ; * Size: 59 instructions * 01047 ; * Execution time (with return): 60 * 01048 ; * * 01049 ; * 8-July-2000 by Nikolai Golovchenko * 01050 ; * Based on 8bit BIN2BCD of Scott Dattalo * 01051 ; *********************************************** 02B7 01052 bin2dec999fast 02B7 0E44 01053 swapf NumL,w ;Add the upper and lower nibbles MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02B8 0744 01054 addwf NumL,w ;to get the one's digit 02B9 390F 01055 andlw 0x0F 02BA 1883 01056 skpndc ;Go through a binary to bcd 02BB 3E16 01057 addlw 0x16 ;conversion for just the one's 02BC 1883 01058 skpndc ;digit 02BD 3E06 01059 addlw 0x06 02BE 3E06 01060 addlw 0x06 02BF 1C83 01061 skpdc 02C0 3EFA 01062 addlw -0x06 01063 02C1 1A44 01064 btfsc NumL,4 ;bit 4 is a special case 02C2 3E1B 01065 addlw 0x16 - 1 + 0x6 02C3 1C83 01066 skpdc 02C4 3EFA 01067 addlw -0x06 ;now adjust the ten's digit 02C5 1AC4 01068 btfsc NumL,5 ;2^5 = 32, so add 3 to the ten's 02C6 3E30 01069 addlw 0x30 ;digit if bit 5 is set 02C7 1B44 01070 btfsc NumL,6 ;2^6 = 64, so add 6 02C8 3E60 01071 addlw 0x60 ;if bit 6 is set 02C9 1BC4 01072 btfsc NumL,7 ;2^7 = 128, so add 2 (the ten's 02CA 3E20 01073 addlw 0x20 ;digit) if bit 7 is set 02CB 3E60 01074 addlw 0x60 ;convert the ten's digit to bcd 02CC 01C5 01075 clrf Hund 02CD 0DC5 01076 rlf Hund,f ;if there's a carry, then the input 02CE 1C45 01077 btfss Hund,0 ;was greater than 99. 02CF 3EA0 01078 addlw -0x60 02D0 00C6 01079 movwf Tens_Ones 02D1 3066 01080 movlw 0x66 ;2^8 = 256, so add 0x56 to Tens_Ones 02D2 1843 01081 btfsc NumH,0 02D3 30BC 01082 movlw 0x56 + 0x66 ;add 0x66 for decimal adjust 02D4 07C6 01083 addwf Tens_Ones,f 02D5 1803 01084 skpnc 02D6 0AC5 01085 incf Hund,f 02D7 0103 01086 clrw 02D8 1C03 01087 skpc 02D9 3860 01088 iorlw 0x60 02DA 1C83 01089 skpdc 02DB 3806 01090 iorlw 0x06 02DC 02C6 01091 subwf Tens_Ones,f 02DD 3066 01092 movlw 0x66 ;2^9 = 512, so add 0x12 to Tens_Ones 02DE 18C3 01093 btfsc NumH,1 02DF 3078 01094 movlw 0x12 + 0x66 02E0 07C6 01095 addwf Tens_Ones,f 02E1 1803 01096 skpnc 02E2 0AC5 01097 incf Hund,f 02E3 0103 01098 clrw 02E4 1C03 01099 skpc 02E5 3860 01100 iorlw 0x60 02E6 1C83 01101 skpdc 02E7 3806 01102 iorlw 0x06 02E8 02C6 01103 subwf Tens_Ones,f 02E9 1BC4 01104 btfsc NumL,7 ;finish with hundreds 02EA 0AC5 01105 incf Hund,f 02EB 3002 01106 movlw 2 MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 22 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02EC 1843 01107 btfsc NumH,0 02ED 07C5 01108 addwf Hund,f 02EE 3005 01109 movlw 5 02EF 18C3 01110 btfsc NumH,1 02F0 07C5 01111 addwf Hund,f 01112 02F1 01113 split 02F1 3029 01114 movlw Space_Key 02F2 2283 01115 call Send_Char ; Send Space 02F3 0845 01116 movf Hund,w ; Send Hundreds 02F4 20C7 01117 call Num_Lookup 02F5 2283 01118 call Send_Char 02F6 0E46 01119 swapf Tens_Ones,w 02F7 390F 01120 andlw h'0F' 02F8 20C7 01121 call Num_Lookup ; Send Tens 02F9 2283 01122 call Send_Char 02FA 0846 01123 movf Tens_Ones,w 02FB 390F 01124 andlw 0Fh 02FC 20C7 01125 call Num_Lookup ; Send Ones 02FD 2283 01126 call Send_Char 02FE 305A 01127 movlw Enter_Key ; Send CR 02FF 2283 01128 call Send_Char 0300 29EA 01129 goto Address_Recieve ; Return 01130 01131 ; ******************************************************************** 01132 ; * Delay Loop * 01133 ; * Input - None Output - None * 01134 ; ******************************************************************** 0301 01135 Delay 0301 01AD 01136 clrf temp 0302 01137 Delay_Loop 0302 0000 01138 nop 0303 0000 01139 nop 0304 0000 01140 nop 0305 0000 01141 nop 0306 0FAD 01142 incfsz temp,f 0307 2B02 01143 goto Delay_Loop 0308 0008 01144 return 01145 01146 ; ************** EEPROM Data *********************** 01147 ; Initalize EEDATA 2100 01148 org H'2100' ; Initialize EEPROM Data 2100 000C 0000 01149 de LOW(DMX_Address),HIGH(DMX_Address) ; Dmx Address Low:High 2102 00E0 0074 00E0 01150 de h'E0',h'74',h'E0',h'F0',h'74',h'00' ; Right Arrow 00F0 0074 0000 2108 00E0 006B 00E0 01151 de h'E0',h'6B',h'E0',h'F0',h'6B',h'00' ; Left Arrow 00F0 006B 0000 210E 0076 00F0 0076 01152 de h'76',h'F0',h'76',h'00',h'00',h'00' ; Escape Key 0000 0000 0000 2114 0003 00F0 0003 01153 de h'03',h'F0',h'03',h'00',h'00',h'00' ; F5 Key 0000 0000 0000 211A 005A 00F0 005A 01154 de h'5A',h'F0',h'5A',h'00',h'00',h'00' ; Enter Key 0000 0000 0000 MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 23 LOC OBJECT CODE LINE SOURCE TEXT VALUE 2120 0036 00F0 0036 01155 de h'36',h'F0',h'36',h'00',h'00',h'00' ; 6 0000 0000 0000 2126 003D 00F0 003D 01156 de h'3D',h'F0',h'3D',h'00',h'00',h'00' ; 7 0000 0000 0000 212C 003E 00F0 003E 01157 de h'3E',h'F0',h'3E',h'00',h'00',h'00' ; 8 0000 0000 0000 2132 0000 0000 0000 01158 de h'00',h'00',h'00',h'00',h'00',h'00' 0000 0000 0000 01159 01160 end MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 24 SYMBOL TABLE LABEL VALUE ADEN 00000003 Address_Recieve 000001EA Address_Recieve_2 000001F4 Address_Recieve_3 000001F8 BRGH 00000002 Baud_Rate 0003D090 Baud_Rate_Constant 00000004 Break_Detected 00000000 C 00000000 C1INV 00000004 C1OUT 00000006 C2INV 00000005 C2OUT 00000007 CCP1CON 00000017 CCP1IE 00000002 CCP1IF 00000002 CCP1M0 00000000 CCP1M1 00000001 CCP1M2 00000002 CCP1M3 00000003 CCP1X 00000005 CCP1Y 00000004 CCPR1H 00000016 CCPR1L 00000015 CIS 00000003 CM0 00000000 CM1 00000001 CM2 00000002 CMCON 0000001F CMIE 00000006 CMIF 00000006 CREN 00000004 CSRC 00000007 Channel_Flags 0000002E Channel_Values 00000035 Channels 00000034 Char_Bank 00000047 Char_Channel 00000042 Char_Count 00000041 Char_Finish 00000259 Char_In 0000003F Char_Save 00000237 Char_Setup 00000215 Char_Setup_B 00000226 Char_Write 0000024C Char_Write_Loop 00000250 Check_Channel_Flags 0000019F Check_DMX_Data 0000017D Check_End 000001CF Check_Keyboard 000001D2 Common_Ram_Base 00000070 DC 00000001 DMX_Address 0000000C MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 25 SYMBOL TABLE LABEL VALUE DMX_Data 00000002 DMX_Data_In PORTB,1 DMX_Start_Addr_H 00000031 DMX_Start_Addr_L 00000030 DMX_Start_Code 00000032 Data_End 00000003 Data_Error_LED PORTA,4 Data_Rec_LED PORTA,3 Data_Recieved 00000033 Dec_DMX_Address 00000279 Dec_DMX_Address_A 00000281 Delay 00000301 Delay_Loop 00000302 Display_Address 000001E5 EEADR 0000009B EECON1 0000009C EECON2 0000009D EEDATA 0000009A EEIE 00000007 EEIF 00000007 Enter_Key 0000005A Esc_Key 00000076 Exit_All 0000026B Exit_Setup 00000262 F 00000001 FERR 00000002 FSR 00000004 GIE 00000007 Get_DMX_Address 0000015E Hund 00000045 IH_Channel_Count_H 00000028 IH_Channel_Count_L 00000027 IH_Channels_Recieved 00000029 IH_Check_9th_bit 0000004C IH_Check_HW_Overrun 0000004A IH_Check_SW_Overrun 0000004E IH_Check_USART 00000049 IH_Data_Beginning 000000A2 IH_Data_End 000000C2 IH_Data_Parity 000000B6 IH_Data_Start 000000AA IH_Data_Stop 000000BD IH_Data_TX 0000009A IH_Exit 00000014 IH_HW_Overrun 00000085 IH_Interrupt_Poll 0000000E IH_RB0 0000001D IH_RB0_End 00000044 IH_RB0_SBit 00000033 IH_RB0_Start 00000020 IH_RB0_Stop 0000003D IH_SW_Overrun 0000008B IH_Temp 0000002A MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 26 SYMBOL TABLE LABEL VALUE IH_Test_Flags 00000050 IH_Timer1 00000091 IH_Valid_Channel 00000077 IH_Wait_Break 00000056 IH_Wait_Channel 00000065 IH_Wait_Start 0000005D INDF 00000000 INTCON 0000000B INTE 00000004 INTEDG 00000006 INTF 00000001 IRP 00000007 Iflag 00000020 Inc_DMX_Address 00000271 Initalise 0000014A Instruction_rate 004C4B40 Int_Count 00000024 Int_CountB 00000025 Int_Data 00000026 Int_FSR 00000073 Int_Flag 00000021 Int_FlagB 00000022 Int_PCLath 00000072 Int_Parity 0000002B Int_Status 00000071 Int_TX_Data 00000023 Int_W 00000070 Interrupt_Vector 00000004 Keybd_TX_Constant 000000C8 Keyboard_Clk_In PORTB,0 Keyboard_Clk_Out PORTB,7 Keyboard_Data 00000000 Keyboard_Data_In PORTB,2 Keyboard_Data_Out PORTB,6 Keyboard_TX 00000001 Keyboard_Wait 00000299 Main 00000178 Minus_Key 0000007B NOT_BO 00000000 NOT_BOD 00000000 NOT_BOR 00000000 NOT_PD 00000003 NOT_POR 00000001 NOT_RBPU 00000007 NOT_T1SYNC 00000002 NOT_TO 00000004 No_DMX_Data 00000003 NumH 00000043 NumL 00000044 Num_Lookup 000000C7 Number_Of_Channels 00000008 OERR 00000001 OPTION_REG 00000081 MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 27 SYMBOL TABLE LABEL VALUE OSCF 00000003 Old_Channel_Flags 0000002F Osc_Freq 01312D00 PCL 00000002 PCLATH 0000000A PCON 0000008E PEIE 00000006 PIE1 0000008C PIR1 0000000C PORTA 00000005 PORTA_CONFIG 000000E7 PORTB 00000006 PORTB_CONFIG 0000003F PR2 00000092 PS0 00000000 PS1 00000001 PS2 00000002 PSA 00000003 Parity 00000001 Plus_Key 00000079 RBIE 00000003 RBIF 00000000 RCIE 00000005 RCIF 00000005 RCREG 0000001A RCSTA 00000018 RD 00000000 RP0 00000005 RP1 00000006 RX9 00000006 RX9D 00000000 Ram_Base 00000020 SPBRG 00000099 SPEN 00000007 SREN 00000005 STATUS 00000003 SYNC 00000004 Save_Address 00000209 Scroll_Key 0000007E Send_Char 00000283 Space_Key 00000029 Start 00000000 Start_Detected 00000001 Start_Vector 00000000 Stop 00000002 String_Count 00000040 Switch_Point 00000080 T0CS 00000005 T0IE 00000005 T0IF 00000002 T0SE 00000004 T1CKPS0 00000004 T1CKPS1 00000005 MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 28 SYMBOL TABLE LABEL VALUE T1CON 00000010 T1OSCEN 00000003 T2CKPS0 00000000 T2CKPS1 00000001 T2CON 00000012 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 TRISB 00000086 TRMT 00000001 TX9 00000006 TX9D 00000000 TXEN 00000005 TXIE 00000004 TXIF 00000004 TXREG 00000019 TXSTA 00000098 Tens_Ones 00000046 To_Keyboard 00000293 VR0 00000000 VR1 00000001 VR2 00000002 VR3 00000003 VRCON 0000009F VREN 00000007 VROE 00000006 VRR 00000005 Valid_Channel 00000002 W 00000000 WR 00000001 WREN 00000002 WRERR 00000003 Z 00000002 _BODEN_OFF 00003FBF _BODEN_ON 00003FFF _BOREN_OFF 00003FBF _BOREN_ON 00003FFF _CP_OFF 00003FFF _CP_ON 00001FFF _DATA_CP_OFF 00003FFF MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 29 SYMBOL TABLE LABEL VALUE _DATA_CP_ON 00003EFF _ER_OSC_CLKOUT 00003FFF _ER_OSC_NOCLKOUT 00003FFE _EXTCLK_OSC 00003FEF _HS_OSC 00003FEE _INTOSC_OSC_CLKOUT 00003FFD _INTOSC_OSC_NOCLKOUT 00003FFC _INTRC_OSC_CLKOUT 00003FFD _INTRC_OSC_NOCLKOUT 00003FFC _LP_OSC 00003FEC _LVP_OFF 00003F7F _LVP_ON 00003FFF _MCLRE_OFF 00003FDF _MCLRE_ON 00003FFF _PWRTE_OFF 00003FFF _PWRTE_ON 00003FF7 _RC_OSC_CLKOUT 00003FFF _RC_OSC_NOCLKOUT 00003FFE _WDT_OFF 00003FFB _WDT_ON 00003FFF _XT_OSC 00003FED __16F627A 00000001 bin2dec999fast 000002B7 char_wait_loop 00000233 dmx_error 00000003 ee_address 00000074 ee_data 00000075 ee_read 0000029D ee_write 000002A4 flag 0000002C ignore_next 00000004 msg1 000000D3 msg1_loop 000001DD msg2 00000100 msg2_loop 0000021E msg3 0000011C msg3_loop 0000025A msg4 0000012F msg4_loop 00000263 split 000002F1 startcode 00000000 temp 0000002D wr1 000002B1 MPASM 03.60 Released DMX PROJECTOR.ASM 3-2-2004 23:15:40 PAGE 30 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0000 : XXX-XXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXX---- 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 : XXXXXXXXX------- ---------------- ---------------- ---------------- 2000 : -------X-------- ---------------- ---------------- ---------------- 2100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXX-------- All other memory blocks unused. Program Memory Words Used: 772 Program Memory Words Free: 252 Errors : 0 Warnings : 0 reported, 0 suppressed Messages : 0 reported, 24 suppressed