; RC4 vystup UART ; tento program nic nevysila, i kdyz je udelan z uart02.asm ; tento program slouzi na demonstraci prijimani znaku #include p16f1708.inc code __CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _BOREN_OFF & _IESO_OFF & _FCMEN_OFF & _CLKOUTEN_OFF ; & _CLKOUTEN_OFF timhle se da vypnout vnitrni oscilator na pinu RA4 - pin 3 __CONFIG _CONFIG2, _WRT_OFF & _LVP_OFF & _PPS1WAY_ON & _ZCDDIS_ON & _PLLEN_OFF & _STVREN_ON & _LPBOR_OFF & _BORV_HI & _LPBOR_OFF PISMENKO: equ 0x20 PRIJATE: equ 0x21 org 0 goto start org 4 banksel PIR1 btfsc PIR2, TMR6IF goto ODTMR6 btfsc PIR2, TMR4IF goto ODTMR4 btfsc PIR1, TMR2IF goto ODTMR2 btfsc PIR1, RCIF goto ODUARTURX ; btfsc PIR1, TXIF ; goto ODUARTUTX ; preruseni od vysilani mame zakazano goto $ start: ; oscilator 0 1101 x 1x nechci PLL, 4MHz oscil., x, vnitrni oscilator ; 0110 1x1x 0x6a banksel INTCON clrf INTCON banksel ADCON0 movlw 0x6c ; 0110 1100 11011 = Reserved. No channel connected. movwf ADCON0 ; vypinam prevodnik banksel OSCCON movlw 0x6a ; 0110 1010 - 1101 pro delicku - 4MHz movwf OSCCON ; movlw 2E ; 1F je maximalni frekvence ; 2e je -18 , tedy o 1.6 procenta pomaleji movlw 0 ; stredni frekvence movwf OSCTUNE banksel TRISA movlw 0xff movwf TRISA movwf TRISB movwf TRISC bcf TRISC,4 ; tady bude vystup UATRu banksel ANSELA clrf ANSELA clrf ANSELB clrf ANSELC ; vsechny piny jsou digitalni banksel PIE1 clrf PIE1 banksel PIE2 clrf PIE2 clrf PIE3 ; stejna banka ; UNLOCK PPS bcf INTCON,GIE ; uspend interrupts BANKSEL PPSLOCK ; set bank ; required sequence, next 5 instructions movlw 0x55 movwf PPSLOCK movlw 0xAA movwf PPSLOCK ; Set PPSLOCKED bit to disable writes or ; Clear PPSLOCKED bit to enable writes bcf PPSLOCK,PPSLOCKED ; RC4 bude vystup UARTu banksel RC4PPS movlw 0x14 ; 10100 = Rxy source is TX/CK(1) movwf RC4PPS ; stejna stranka jako RC3PPS ;RC5 bude vstup UARTu banksel RXPPS movlw 0x15 movwf RXPPS BANKSEL PPSLOCK ; set bank ; required sequence, next 5 instructions movlw 0x55 movwf PPSLOCK movlw 0xAA movwf PPSLOCK ; Set PPSLOCKED bit to disable writes or ; Clear PPSLOCKED bit to enable writes bsf PPSLOCK,PPSLOCKED ; LOCK PPS banksel TX1STA ; vsechny ridici registry UARTu jsou ve stejne bance movlw 0x24 ; TX1STA: x010 0100 High speed BRGH = 1 movwf TX1STA movlw 0x08 ; BAUD1CON: 0000 1000 data nejsou inverovana 16bit BRG movwf BAUD1CON ; BAud RATE je FOSC/[4 (n+1)] vychazi 416 tedy 0x1A0 movlw 0x10 ; RC1STA: 1001 0000 Enable receiver movwf RC1STA movlw 0x01 movwf SP1BRGH movlw 0xa0 movwf SP1BRGL bsf RC1STA,7 ; a tady to cele finalne zapinam ; nastavuji TMR6 ; ma to tri TMR2, jmenuji se 2 4 6 ; ???? ALE PWM umi jenom TMR2 nee, kterykoli TMR umi PWM !!!! ; POSTSCALLER 1:16 PRESCALLER 64 PR6 243 delime 249856 ; 1MHZ : 249856 = 4Hz ; x 1111 1 11 = x111 1111 = 0x7f ; postscaller ON/OFF prescaller ; TMR6 vola preruseni 4x za 1 sec banksel PR6 ; to je banka 8 movlw .243 movwf PR6 movlw 0x7f ; 0x7f movwf T6CON ; zase vsechno stejna banka 8 banksel PIE2 ; jina banka - 1 bsf PIE2, TMR6IE ; poustim interrupt od TMR6 banksel PISMENKO movlw 'A' movwf PISMENKO banksel PIE1 bsf PIE1,RCIE ; povoluji preruseni od prijimace UARTu banksel 0 bsf INTCON, PEIE bsf INTCON,GIE cyklus: nop nop nop nop goto cyklus ODTMR2: bcf PIR1, TMR2IF retfie ODTMR4: bcf PIR2, TMR4IF retfie ODTMR6: ; sem skaceme 4x za 1 sec bcf PIR2, TMR6IF retfie ODUARTUTX: banksel PISMENKO movf PISMENKO,0 incf PISMENKO banksel TX1REG movwf TX1REG banksel PISMENKO movlw 'Z' + 1 subwf PISMENKO, 0 ; bunka PISMENKO se nemeni !!!!!!! btfss STATUS,Z retfie movlw 'A' movwf PISMENKO banksel PIE1 bcf PIE1,TXIE retfie ODUARTURX: banksel RC1REG movf RC1REG,0 banksel PRIJATE movwf PRIJATE ; tohle je jen jednoduchy priklad na zpracovani prisedsiho znaku ; tady dal pokracuje zpracovani prijateho cisla retfie end