;program TEST8722_2.ASM ;Formatovani je dobre citelne po otevreni v prostredi MPLAB IDE, ktere je ke stazeni na http://www.microchip.com/ ;a pomoci ktereho se program kompiluje. ;Pro PIC18LF6722 volime typ 18F8722, abychom mohli spravne nastavit ;konfiguracni bity MODE, coz je nutne ke spravnemu behu PIC18LF6722. ;Program kompilujeme s nastavenim kompilatoru pro PIC18F8722. ;PIC s F a LF se lisi rozsahem napajecich napeti, programuji se stejne ;a proto je zde volba pouze s F a ne LF. list p=18F8722, r=DEC #include P18F8722.INC ;Konfiguracni bity se bootloaderem neprepisuji, ;jsou zde uvedeny jen pro predstavu o funkci. ;Program jak je muze pracovat s bootloaderem i bez nej, ;lze naprogramovat do PIC bez bootloaderu. CONFIG OSC = HSPLL CONFIG FCMEN = OFF CONFIG IESO = OFF CONFIG PWRT = ON CONFIG BOREN = SBORDIS CONFIG BORV = 28 CONFIG WDT = OFF CONFIG WDTPS = 1 CONFIG MODE = MC CONFIG MCLRE = ON CONFIG LPT1OSC = OFF CONFIG CCP2MX = PORTC CONFIG STVREN = ON CONFIG LVP = OFF CONFIG BBSIZ = BB2K CONFIG XINST = OFF CONFIG DEBUG = OFF CONFIG CP0 = OFF CONFIG CP1 = OFF CONFIG CP2 = OFF CONFIG CP3 = OFF CONFIG CP4 = OFF CONFIG CP5 = OFF CONFIG CP6 = OFF CONFIG CP7 = OFF CONFIG CPB = ON CONFIG CPD = OFF CONFIG WRT0 = OFF CONFIG WRT1 = OFF CONFIG WRT2 = OFF CONFIG WRT3 = OFF CONFIG WRT4 = OFF CONFIG WRT5 = OFF CONFIG WRT6 = OFF CONFIG WRT7 = OFF CONFIG WRTB = ON CONFIG WRTC = ON CONFIG WRTD = OFF CONFIG EBTR0 = OFF CONFIG EBTR1 = OFF CONFIG EBTR2 = OFF CONFIG EBTR3 = OFF CONFIG EBTR4 = OFF CONFIG EBTR5 = OFF CONFIG EBTR6 = OFF CONFIG EBTR7 = OFF CONFIG EBTRB = ON ;At si nemusime pamatovat, ze ruda LED je na RE6, definujeme si nazev LED_RED #DEFINE LED_RED LATE,6 CBLOCK 0 TMP0 TMP1 TMP2 ENDC CBLOCK 0X100 BUFFER ENDC ;Toto je soucast bootloaderu a je to zde uvedeno jen pro predstavu o funkci ;a take z duvodu, aby program spravne bezel jak s bootloaderem, tak bez nej, ;tedy primym naprogramovanim PIC programatorem. ;Protoze bootloader adresy do 0x7FF vcetne nikdy neprepise, muzeme si ;zde napsat skoky za bootloader na adresy 0x800,0x808 a 0x818, cimz bude ;program funkcni jak s bootloaderem, tak bez nej. ORG 0x0 GOTO 0x800 ORG 0x8 GOTO 0x808 ORG 0x18 GOTO 0x818 ;potud odskoky z bootloaderu ORG 0x800 GOTO START ORG 0x808 GOTO 0X808 ORG 0x818 GOTO 0X818 START ;Toto nastaveni provadi i bootloader a teoreticky jej tedy nemusime opakovat. ;Protoze by ale aplikace mela bezet jak s bootloaderem, tak bez nej, ;tato nastaveni provedeme. MOVLW B'00000111' MOVWF CMCON MOVLW B'00000000' MOVWF LATA MOVLW B'00000000' MOVWF LATB MOVLW B'01000000' MOVWF LATC MOVLW B'00000000' MOVWF LATD MOVLW B'11001100' ;OBE LED ZHASNOUT MOVWF LATE MOVLW B'00000000' MOVWF LATF MOVLW B'00000010' MOVWF LATG MOVLW B'11111111' MOVWF TRISA MOVLW B'11111111' MOVWF TRISB MOVLW B'10111111' MOVWF TRISC MOVLW B'11111111' MOVWF TRISD MOVLW B'00110011' MOVWF TRISE MOVLW B'11111111' MOVWF TRISF MOVLW B'11111101' MOVWF TRISG ;ADC VYPNOUT MOVLW B'00001111' MOVWF ADCON1 MOVLW .12 ;115200bps pri 24MHz taktovani (115200bps 8N1) MOVWF SPBRG1 BSF TXSTA1,BRGH BSF TXSTA1,TXEN BSF RCSTA1,CREN BSF RCSTA1,SPEN ;UART1 OK MOVLW .12 ;115200bps pri 24MHz taktovani (115200bps 8N1) MOVWF SPBRG2 BSF TXSTA2,BRGH BSF TXSTA2,TXEN BSF RCSTA2,CREN BSF RCSTA2,SPEN ;UART2 OK ;NYNI MAME NASTAVENY VSTUPY A VYSTUPY PIC - pro jinou aplikaci to muze byt pochopitelne jinak. ;Pro otestovani funkcnosti si nyni zablikame rudou LED. LOOP BCF LED_RED ;nizkou urovni rozsvitime LED RCALL PAU ;chvili pockame BRA $+2 ;jeste pockame 2 cykly, dole se take skace, at mame stejnou pauzu, jen skoci na nasledujici instrukci BSF LED_RED ;vysokou urovni zahasneme LED RCALL PAU ;chvili pockame BRA LOOP ;a jedeme znovu PAU ;Podprogram pro cekani pomoci cekaci smycky ;Pauza je tak dlouha, aby dorovnala blikani na ctvrt sekundy ;v kazdem stavu pri 24MHz taktovani, tedy LED blikne presne 2x za sekundu, 250ms rozsviceno, 250ms zhasnuto. MOVLW 0x34 MOVWF TMP2 MOVLW 0x45 MOVWF TMP1 MOVLW 0x8A MOVWF TMP0 DECFSZ TMP0,F BRA $-2 DECFSZ TMP1,F BRA $-10 DECFSZ TMP2,F BRA $-18 RETURN ;--------------------------------------------------------------------- ;Podprogram pro vyslani seriovym portem. ;V uvedenem programu je nevyuzit, je zde pro zjednoduseni zacatku se seriovymi porty. ;Podprogram po zavolani pocka, az je odvysilan posledni vyslany znak seriovym portem a pote vysle obsah W registru. SEND2 BTFSS PIR3,TX2IF BRA SEND2 MOVWF TXREG2 RETURN ;Podprogram pro prijem seriovym portem. ;V uvedenem programu je nevyuzit, je zde pro zjednoduseni zacatku se seriovymi porty. ;Podprogram nejprve overi, zda nedoslo k preteceni prijimanych znaku, pokud ano, zresetuje prijem ;a dale ceka na prijem znaku ze serioveho portu, po kterem vrati ve W registru prijaty znak. RECEIVE2 BTFSS RCSTA2,OERR BRA RECEIVE2_NOERR BCF RCSTA2,CREN BSF RCSTA2,CREN RECEIVE2_NOERR BTFSS PIR3,RC2IF BRA RECEIVE2_NOERR MOVF RCREG2,W RETURN ;Pokud nahradite program vyse od LOOP do BRA LOOP timto (pochopitelne odstrante stredniky na zacatku radku): ; ;LOOP ; RCALL RECEIVE2 ;pockej na prijem znaku ze seriaku a prijmi znak do W ; RCALL SEND2 ;vysli seriakem znak z W ; BRA LOOP ;od LOOP vsechno opakuj ; ;Muzete napriklad za pomoci Hyperterminalu z Windows posilat znaky do L&REX ;a na obrazovce se Vam budou vracet stejne znaky, ktere byly vyslany, zkratka echo. ;Pochopitelne takova aplikace se hodi maximalne pro test a pro rozumnou cinnost je potreba s obsahem W registru ;(tedy prijatymi znaky) provest dalsi operace, napriklad podle nej nastavovat vystupy a ziskat tak vystupni linky ;ze serioveho portu, vysilat stav vstupnich linek a ziskat tak vstupy vysilane do serioveho portu atp. ;Predpokladem je spravne nastaveni parametru prenosu seriove linky, jak je uvedeno vyse. END