LIST P=18F4550 #include p18f4550.inc ; Ez a program lett kipróbálva! CONFIG FOSC = INTOSCIO_EC CONFIG WDT = OFF CONFIG MCLRE = OFF CONFIG DEBUG = OFF CONFIG LVP = OFF CONFIG BOR = SOFT ; CONFIG BOR = OFF CONFIG IESO = OFF ; nem kapcsolhatók át az oszcillátorok CONFIG PBADEN = OFF ; nem analóg hanem I/O a "B" port ;CONFIG PBADEN = OFF ; Port "B"<0:4> digitális I/O legyen adat: UDATA_ACS ; H'10' ; nincs kezdo memoriacim megadva az ACCESS ramban W_TEMP RES 1 ; w register for context saving (ACCESS) STATUS_TEMP RES 1 ; status used for context saving BSR_TEMP RES 1 ; bank select used for ISR context saving _baudrata_L res 1 ; baudgenerátor regiszterének also bajtja _baudrata_H res 1 ; baudgenerátor regiszterének felso bajtja _vett_ch1 res 1 _vett_ch2 res 1 _vett_ch3 res 1 _vett_ch4 res 1 _vett_ch5 res 1 ORG 0X0000 goto Start ; ????????????????????????????????????????????? ; Feladat: ; 1. UART ketiranyu kapcsolat letesites 9600 baudon ; 2. Kuldok egy sztringet a szamitogeprol UART-on a Pic18F4550-os IC.nek. ; Az IC a fogadott stringhez hozzáfuzi elöl az "OK: " 4 db karaktert és visszaküldi ; az UART-on az osszefuzott stringet ; ??????????????????????????????????????????????? ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code 0x0200 Start: ; ÓRAJEL STARTKORI BEÁLLÍTÁSA banksel TRISC ; accesramterület kiválasztása bsf OSCTUNE,7 ; 8 Mhz intoscról megy a lekisebb órajel lehetOség bsf OSCCON,SCS0 ; { Belso oszcillátor van használva bsf OSCCON,SCS1 ; CPU órajelnek } bsf OSCCON,IRCF0 ;{ 8 Mhz lesz kiválasztva bsf OSCCON,IRCF1 ; frekvenciaosztótól CPU bsf OSCCON,IRCF2 ; órajelnek (belso 8 MHZ-es oszcillátor) } bcf INTCON,RBIE ; "B"=0, port ne tudjon megszakítást indítani bcf INTCON2,RBIP ; B port 4-7 változáskor o esetén alacsony sz. megszakítás ; MEGSZAKÍTÁSBEÁLLÍTÁS STARTKOR bsf RCON,IPEN; ketto pioritású legyen a megszakítás bsf INTCON,GIEH ; magas szintu megszakítások engedélyezése bsf INTCON,GIEL ; alacsony szintu megszakítások engedélyezése bcf INTCON,INT0IE ; Külso megszakítás (RESET) tiltása=0 bcf INTCON3,INT1IE ; Külso megsz -+- bcf INTCON3,INT2IE ; -+- bcf PIE1,TXIE ; Tiltja az adásnál a megszakítást (USART) ; bcf IPR1,TXIP ; 0-nal alacsony szintu lesz a megszakítás USART adásnál ; bcf PIR1,TXIF ; torli a megszakítást jelzo bitet a biztonság kedbeért bcf PIE1,RCIE ; vevo magszakítást tilt (USART), majd engedélyezni kell! bcf IPR1,RCIP ; vevo alacsony szintu megszakitas (USART) bcf PIR1,RCIF ; vevonel torli a megszakitasjelzo bitet bcf INTCON2,RBIP ; B4-B7 megszakítás alacsony szintu, ha 0 bcf INTCON,RBIE ; B4-B7 portváltozáskor megszakítás, ha 1 (Itt még ne!) ; USART IC LÁBAK STARTKORI BEÁLLÍTÁSA ; 25/40 láb lesz a TX adó (aszinkron üzemmód) ami RC6 lenne digitáli I/O ként ; 26/40 láb lesz az RX vevo (aszinkron uzemmod) ami RC7 lenne digitális I/O ként ;USART MODUL STARTKORI BEÁLLÍTÁSA ES ADATBEALLITASOK bcf TXSTA,SYNC bsf RCSTA,SPEN ; USART modul aktiválása ; ADO RESZ bcf TXSTA,TXEN ; Tiltja kezdeskor az adast bcf TXSTA,TX9 ; 9. bit nincs használva bcf BAUDCON,TXCKP ; Kimeno adatok nem ivertaltak bcf PIE1,TXIE ; Tiltja az USART-adonak a megszakítást (adáskor) (PIR1,TXIF bit jelzi valoszinuleg) bcf BAUDCON,WUE ; tiltja az USART-nak az adatkuldes figyelest, így megszakitas sem lehet ; VEVO RESZ bsf PIE1,RCIE ;Engedélyezzuk adaterkezeskor a megszakitast bcf PIR1,RCIF ; Torli a az adaterkezest jelzo bitet bcf RCSTA,SREN ; Egyszeri vetel engedelyzi, erkezett adat torli a bitet, ; engedelyezesre H-ra kell allitani bcf RCSTA,ADDEN ; A 9. bitet ne címadatjelzonek kezelje banksel WREG ; KEZDO ADATBEALLITASOK clrf _vett_ch1 clrf _vett_ch2 clrf _vett_ch3 clrf _vett_ch4 clrf _vett_ch5 goto Foprogram reset ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII Int_H: CODE 0x0008 ; goto $ ; !T! tesztreléskor kell, máskülönben nem kell reset ; ************************** Int_L: CODE 0x0018 movff WREG,W_TEMP ; ezek nem kellenek, mert nem fontosa movff STATUS,STATUS_TEMP movff BSR,BSR_TEMP ; goto $ ; banksel WREG ; Kódok ; Megszakitas (adaterkezes)vizsgalata es kiszolgalasa Int_kereses: ; adaterkezes megszakitas eseten btfss PIR1,RCIF ; Átugorja ha 1 reset ; Nem jott adatbejovetel, így tovabblep ; adat jott, lekezeli call Adatfogadas_feldolgozas ; lekezeli nop Int_ki: bcf PIR1,RCIF ; A vetel megszakitasbitet torli bcf PIR1,TXIF ; adás megszakításbitet trol movff W_TEMP,WREG movff STATUS_TEMP,STATUS movff BSR_TEMP,BSR retfie reset ;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII ;FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF Foprogram: call Baudrata_beallitas ; >>> ; <<<<<< Baudtata_beallitas bcf INTCON,RBIE ; "RBIE"=1, PORTB<4..7> port ne tudjon megszakítást indítani ; a bemeno jel valtozasakor ; bsf INTCON,RBIE ; Engedélyezi a B porton bsf PIE1,RCIE ; vevo magszakítást engedelyez (USART) bcf RCSTA,CREN; Hiba torlese, gondolom mert nem olvastuk ki a regiszter bsf RCSTA,CREN; Engedélyezzük a vetel adatregiszteret. bcf RCSTA,SREN ; Adatvételt tiltja bcf RCSTA,RX9; 8 bites adatvetel bcf BAUDCON,RXDTP ; Vetel ne forditott polaritas logikaju bcf BAUDCON,TXCKP ; Adas ne forditott polaritas logikaju bcf BAUDCON,WUE ; tiltja az USART-nak az adatkuldes figyelest, így megszakitas sem lehet ; WUE bitet törölni kell, mert máskülönben nem korrektek a vett adatok bsf RCSTA,CREN ; Folyamatos adatvetel engedelyezese goto $ ; ;FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ;------------------------------------------------ Baudrata_beallitas: bcf TXSTA,SYNC ; 0 = aszinkron uzemmod bsf TXSTA,BRGH ; 1 = magas baudsebesseg bcf BAUDCON,BRG16 ; 0 = 8 bites BRG megadás es beallitas bcf TXSTA,TX9 ; 8 bites adatküldés ; bsf RCSTA,ADDEN ;az adat címadatként használható movlw D'51'; { SPBRD regiszternek megadbi a kiszámított értéket movwf SPBRG ; a baudrata generálására 9600 badsebességre 4MHz osc.-cal} return ;----------------------------------------------------------- ;-------------------------------------------------------------------- ;ADATFOGADAS_LEKEZELES Adatfogadas_feldolgozas: ;RCSTA,SREN-t korábban H-ra kell állítani, ha befelyezodik az adatfogadás, ; ez a bit torlodik. Ezert tovabbi egyszeri fogadasra L-re kell allitani nop ; goto $ nop Vissza1: ; btfsc RCSTA,SREN ; Adatfogadas (egyszeri) veget figyeli ; goto Vissza1 ; figyelgeti az adatfogadas veget ; bsf RCSTA,SREN ; egyszeri adatfogadas engedelyezes es figyeles nop nop nop nop nop nop nop nop nop nop btfss PIR1,RCIF goto $-2 movff RCREG,_vett_ch1 bcf PIR1,RCIF btfss PIR1,RCIF goto $-2 movff RCREG,_vett_ch2 bcf PIR1,RCIF btfss PIR1,RCIF goto $-2 movff RCREG,_vett_ch3 bcf PIR1,RCIF btfss PIR1,RCIF goto $-2 movff RCREG,_vett_ch4 bcf PIR1,RCIF btfss PIR1,RCIF goto $-2 movff RCREG,_vett_ch5 bcf PIR1,RCIF ; goto $ ; -------------------------------- ; Küldés bsf TXSTA,TXEN ; Elkulbi az abatot, adatkuldes engedelyezve van (TXREG feltöltése elott vagy után aktiváljuk) bcf PIR1,TXIF ; utolag teszt / movlw a'O' movwf TXREG btfss TXSTA,TRMT goto $-2 bcf PIR1,TXIF movlw a'K' movwf TXREG btfss TXSTA,TRMT goto $-2 bcf PIR1,TXIF movlw a'E' movwf TXREG btfss TXSTA,TRMT goto $-2 bcf PIR1,TXIF movlw a':' movwf TXREG btfss TXSTA,TRMT goto $-2 bcf PIR1,TXIF movlw a' ' movwf TXREG btfss TXSTA,TRMT goto $-2 bcf PIR1,TXIF movff _vett_ch1,TXREG btfss TXSTA,TRMT goto $-2 bcf PIR1,TXIF movff _vett_ch2,TXREG btfss TXSTA,TRMT goto $-2 bcf PIR1,TXIF movff _vett_ch3,TXREG btfss TXSTA,TRMT goto $-2 bcf PIR1,TXIF movff _vett_ch4,TXREG btfss TXSTA,TRMT goto $-2 bcf PIR1,TXIF movff _vett_ch5,TXREG btfss TXSTA,TRMT goto $-2 bcf PIR1,TXIF movlw d'13' movwf TXREG btfss TXSTA,TRMT goto $-2 bcf PIR1,TXIF movlw d'10' movwf TXREG btfss TXSTA,TRMT goto $-2 bcf PIR1,TXIF return ;------------------------------------------------------------------