list P=16F628A #INCLUDE __CONFIG _CP_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC & _LVP_OFF & _MCLR_OFF ;kanalen defineren #Define ErrLed PORTB,7 #Define DataLed PORTB,6 #Define BreakLed PORTB,5 #Define ProgramLed PORTB,4 #Define OUT1 PORTB,3 ;geheugen defineren #DEFINE Framing DMX_data,0 #DEFINE Break DMX_data,1 #DEFINE Startcode DMX_data,2 #DEFINE Klaar DMX_data,3 ;geheugen onderverdelen DMX_data EQU 020h Kanaal EQU 021h Teller EQU 022h Reg1 EQU 023h ;begin code ORG 00h goto INIT ;ga naar init ORG 04h goto main INIT movlw 0x07 movwf CMCON ;zet alles digitaal CLRF PORTA ;maak porta laag CLRF PORTB ;maak portb laag BSF STATUS,RP0 ;Select Bank1 MOVLW B'00000000' ;maak van poort A uitgangen MOVWF TRISA MOVLW b'00000000' ;maak van poort B uitgangen MOVWF TRISB BSF TRISB,1 ;op poortb,1 na MOVLW 04h ;waarde voor baudrate MOVWF SPBRG ;in het register setten BSF TXSTA,BRGH ;high speed BCF TXSTA,SYNC ;Async connection BCF STATUS,RP0 ;ga terug naar bank 0 BSF RCSTA,RX9 ;9bit data BSF RCSTA,CREN ;ontvangen aanzetten BSF RCSTA,SPEN ;Enable UART MOVF RCREG,W ;clear RCREG MOVF RCREG,W ;clear RCREG MOVF RCREG,W ;clear RCREG CLRF DMX_data ;file legen CLRF Kanaal ;file legen CLRF Teller ;file legen CLRF Reg1 ;file legen MOVLW 02h ;kanaal nummer instellen MOVWF Kanaal ;naar kanaal zetten MOVF Kanaal,W ;kanaal naar w MOVWF Teller ;w naar teller BSF ProgramLed ;programmaled aan goto main ;begin programma err BSF ErrLed ;error led aan BCF Framing ;framing uit BCF Break ;geen break BCF DataLed ;geen data BCF BreakLed ;geen break BCF Klaar ;niet klaar goto main ;ga naar main overrun BSF ErrLed ;Error led aan BCF RCSTA,CREN ;error uitzetten NOP ;even wachten BSF RCSTA,CREN ;error uitzetten MOVF RCREG,W ;clear RCREG MOVF RCREG,W ;clear RCREG MOVF RCREG,W ;clear RCREG BCF RCSTA,CREN ;error uitzetten NOP ;even wachten BSF RCSTA,CREN ;error uitzetten BCF Break ;nog geen break BCF Framing ;geen framing BCF DataLed ;geen data BCF BreakLed ;geen break BCF Klaar ;niet klaar goto main ;terug naar main frame BSF Framing ;er is een framing error ;dus misschien een break! MOVF RCREG,W ;zet de error uit BCF Break ;nog geen break MOVF Kanaal,W ;kanaal naar w MOVWF Teller ;w naar teller BCF Klaar goto main ;ga naar main break BCF Framing ;framing uitzetten MOVF Reg1,W BTFSS STATUS,Z ;kijken als w 0 is goto err ;ga naar error BSF BreakLed ;breakled aan BSF Break ;er is een break goto main ;ga naar main main BTFSS PIR1,RCIF ;kijken als er data is goto main ;zo niet steeds weer BTFSC RCSTA,OERR ;als er een overrun error is goto overrun ;dan naar overrun BTFSC RCSTA,FERR ;kijken als er een framing error is goto frame ;zo ja ga naar break MOVF RCREG,W ;zet de inkomnde data MOVWF Reg1 ;in Reg1 BTFSC Framing ;kijken als er een framing error is geweest goto break BTFSS Break ;kijk als er een break is geweest goto err ;ga naar err er klopt iets niet BSF DataLed ;data led aan BTFSC Klaar ;kijk als hij al klaar is goto main ;al klaar dan terug naar main ;anders verder met programma DECFSZ Teller ;kijk als het kanaal is bereikt goto main ;ga naar main BTFSS Reg1,7 ;kijk als de waarde hoger is als 128 BCF OUT1 ;lager dan 128 out1 uit BTFSC Reg1,7 ;kijk als de waarde hoger is als 128 BSF OUT1 ;hoger dan 128 out1 aan BSF Klaar ;set klaar goto main ;oneindige loop END