;LZ4GV 2014- Firmware EQU .4 list p=12f1840 ; list directive to define processor #include ; processor specific variable definitions ;Set Configuration Register __CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF ; _FOSC_LP _WDTE_ON _PWRTE_OFF _MCLRE_ON _CP_ON _CPD_ON _BOREN_OFF _CLKOUTEN_ON _IESO_ON _FCMEN_ON ; _FOSC_XT _WDTE_NSLEEP _BOREN_NSLEEP ; _FOSC_HS _WDTE_SWDTEN _BOREN_SBODEN ; _FOSC_EXTRC ; _FOSC_ECL ; _FOSC_ECM ; _FOSC_ECH __CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_HI & _LVP_OFF ;_BORV_HI = 2.55 to 2.85V ; _WRT_BOOT _PLLEN_ON _STVREN_ON _BORV_LO _LVP_ON ;_BORV_LO = 1.80 to 2.05V ; _WRT_HALF ; _WRT_ALL OSCTUNE_MNL EQU .0 ;Central frequency min .32 - .63 0 .1 - .31 max #define PORTA0 PORTA,0 ;Pin 7 #define PORTA1 PORTA,1 ;Pin 6 #define PORTA2 PORTA,2 ;Pin 5 #define PORTA3 PORTA,3 ;Pin 4 In Only #define PORTA4 PORTA,4 ;Pin 3 #define PORTA5 PORTA,5 ;Pin 2 #define PORTA5IO TRISA,5 ;0x20 to 0x6F Bank 0 #define STATBIT 0x20,0 ; ;TMR0MEM EQU 0x6A ; ;TMR1LMEM EQU 0x6B ; ;TMR1HMEM EQU 0x6C ; ;FSRMEM EQU 0x6D ; ;PCLMEM EQU 0x6E ; ;0x70 to 0x7F Bank 0,1,2,3..... ACQT EQU 0x79 ;ADC Bank1 RADRESL EQU 0x7A ;ADC RADRESH EQU 0x7B ;ADC REEADR EQU 0x7C ;EEPROM REEDATA EQU 0x7D ;EEPROM OPTIONMEM EQU 0x7E ; INTCONMEM EQU 0x7F ; ;0x0A0 to 0x0EF Bank 1 ;0x120 to 0x16F Bank 2 #define WPAGE PCLATH,3 ;0- Work. Page0 1- Work. Page1 #define Bank0_1 BSR,0 ;0= Bank0 1= Bank1 INDF EQU INDF0 FSR EQU FSR0L ORG 0xF000 ;Initialize EEPROM locations 0xF000 - 0xF0FF DE 0x00,0x01,0x02,0x03 ORG 0x0000 GOTO START ;**************************************************************** ORG 0x0004 ;Interrupt vector location clrf BSR ;Bank0 clrf PCLATH ;0- Work. Page0 ;Page 83 btfsc INTCON,IOCIF ;PORTA/PORTB Change Interrupt Global Flag GOTO INT_PORTCHANGE ;--> btfsc PIR1,TMR1IF ;Overflow TMR1 GOTO INT_TMR1 ;--> GOTO INT_END ;--> ;------------------------------------------------------------------------------ ; USER INTERRUPT SERVICE ROUTINE GOES HERE ;------------------------------------------------------------------------------ INT_PORTCHANGE MOVLB .7 ;Bank7 CLRF IOCAF ;PORTA Flag Register Interrupt-On-Change MOVLB .0 ;Bank0 bcf INTCON,IOCIF ;PORTA Change Interrupt Global Flag GOTO INT_END ;--> INT_TMR1 bcf PIR1,TMR1IF ;TMR1 Overflow Interrupt Flag GOTO INT_END ;--> bcf INTCON,INTF ;INT External Interrupt Flag GOTO INT_END ;--> ; INT_END ;Automatically handles context restoration for W, STATUS, BSR, FSR, and PCLATH RETFIE ;Return From Interrupt / Enable Global Interrupts ;**************************************************************** BEGIN MOVLW 0x20 ;Start Address RAM. MOVWF FSR0L ; CLRF FSR0H CLRF FSR1L CLRF FSR1H CLRRAM ; CLRF INDF0 ; ; INDF1 ; MOVLW 0x7F ;End Address RAM. SUBWF FSR0L,W ;FSR0H INCF FSR0L,F ; BTFSS STATUS,C ;FSR = or > W C=1 GOTO CLRRAM ;FSR < W C=0 ;********** Начало *********** MAIN ;********************************************************************** ; MAIN PROGRAM ;********************************************************************** GOTO MAIN ;********** Край ************* ;********************************************************************** MOVLW .4 ; MOVWF TMR0 ; BCF INTCON,TMR0IF ;Overflow TMR0 MOVLW 0xDB ; MOVWF TMR1L ; MOVLW 0x0B ; MOVWF TMR1H ; BCF PIR1,TMR1IF ;Overflow TMR1 MOVLB .5 ;Bank5 MOVLW 0x80 ;Pulse Width Modulation MOVWF CCPR1L ;Bit 9 - 2 BCF CCP1CON,DC1B1 ;Bit 1 BCF CCP1CON,DC1B0 ;Bit 0 MOVLB .0 ;Bank5 ; MOVLW .100 ; ; SUBWF RADRESH,W ;ADRESH > W C=1 ; BTFSC STATUS,C ;ADRESH = W C=1 ; GOTO ;ADRESH < W C=0 ; GOTO ; ; movlw .50 ; sublw .20 ;W < .20 C=1 ; BTFSC STATUS,C ;W = .20 C=1 ; GOTO ;W > .20 C=0 ; GOTO ; MOVLB .1 ;Bank 1 MOVF OPTION_REG,W ;Запомня състоянието на OPTION_REG. MOVWF OPTIONMEM ;Променя TMR0 ANDLW B'11111000' ;Нулира само PS2 PS1 PS0 IORLW B'00000001' ;Променя Fosc/4/4 = 4uS MOVWF OPTION_REG ; MOVLB .0 ;Bank 0 MOVLB .1 ;Bank 1 MOVF OPTIONMEM,W ; MOVWF OPTION_REG ; MOVLB .0 ;Bank 0 ;CALL READE ;In:F(REEADR) Out:F(REEDAT),W ;CALL WRITE ;In:F(REEADR,REEDATA) movlw RA0_AN0 ; movlw RA1_AN1 movlw RA2_AN2 movlw RA4_AN3 CALL READ_ADC ;In: W(Analog Select) Out:F(RADRESH,RADRESL) ;MOVLW '$' ;CALL UAT ;Universal Asynchronous Transmiter In: W MOVLB .2 ;Bank2 BTFSS CM1CON0,C1OUT ; NOP MOVLB .0 ;Bank0 ;******* BCF INTCON,GIE ;Disable All INTs. BTFSC INTCON,GIE ;See AN576 GOTO $-2 ; BSF INTCON,GIE ;Enable All INTs. ;******* GOTO MAIN ;********************************************************************** ;********************************************************************** WRITE ;In:F(REEADR,REEDATA) MOVLB .3 ;Bank3 MOVF REEADR,W ; MOVWF EEADRL MOVF REEDATA,W MOVWF EEDATL BCF EECON1,CFGS BCF EECON1,EEPGD ;1= Program Memory 0= Accesses data memory EEPROM BCF INTCONMEM,GIE ; BTFSC INTCON,GIE ;Запазва състоянието. BSF INTCONMEM,GIE ; BCF INTCON,GIE ;Disable INTs. BTFSC INTCON,GIE ;See AN576 GOTO $-2 ; BSF EECON1,WREN ;1= Allows write cycles 0= MOVLW 0x55 ; MOVWF EECON2 ; MOVLW 0xAA ; MOVWF EECON2 ; BSF EECON1,WR ; BTFSC EECON1,WR ;1= Write Cycles 0= Write cycles to the EEPROM is complete GOTO $-1 ;-^ ;BTFSC EECON1,WRERR ;1= Write Terminated 0= Write Operation Completed ;NOP BCF EECON1,WREN ;disable write BTFSC INTCONMEM,GIE ; BSF INTCON,GIE ; MOVLB .0 ;Bank0 RETURN ; READE ;In:F(REEADR) Out:F(REEDAT),W MOVLB .3 ;Bank3 MOVF REEADR,W MOVWF EEADRL BCF EECON1,CFGS BCF EECON1,EEPGD ;1= Program Memory 0= Accesses data memory EEPROM BSF EECON1,RD ;1 - initiates an EEPOM read BTFSC EECON1,RD ;rd done? GOTO $-1 ;no then loop MOVF EEDATL,W MOVWF REEDATA MOVLB .0 ;Bank0 RETURN ; ; RA0_AN0 EQU B'00000000' ;Analog Channel Select bits <5:2> RA1_AN1 EQU B'00000100' RA2_AN2 EQU B'00001000' RA4_AN3 EQU B'00001100' ; EQU B'01110000' ;Temperature Indicator ; EQU B'01111000' ;DAC Output ; EQU B'01111100' ;FVR Module READ_ADC ;Analog-to-Digital Converter In: W(Analog Select) Out:F(RADRESH,RADRESL) MOVLB .1 ;Page 127 MOVWF ADCON0 ;Analog Channel Select bits <5:2> BSF ADCON0,ADON ;1= A/D Converter Module Enable 0= Disable ;MOVLW .20 ;Fosc=32MHz ;MOVLW .5 ;Fosc= 8MHz MOVLW .2 ;Fosc= 4MHz MOVWF ACQT ;Min Acquisition Time 5uS DECFSZ ACQT,F ;- GOTO $-1 ;-^ BSF ADCON0,ADGO ;Start Convertion BTFSC ADCON0,ADGO ; GOTO $-1 ;-^ BCF ADCON0,ADON ;0 = A/D converter is shut_off MOVF ADRESH,W MOVWF RADRESH MOVF ADRESL,W MOVWF RADRESL MOVLB .0 ;Bank0 RETURN ; ; SET_ADC ;Page 134 MOVLB .1 ;Bank1 BSF ADCON1,ADFM ;1= 0 0 0 0 0 0 X X / x x x x x x x x 0= X X X X X X X X / x x 0 0 0 0 0 0 ; 32MHz 16MHz 8MHz 4MHz Select A/D Conversion Clock. ;Frc Fosc/32 Fosc/16 Fosc/8 Fosc/4 BSF ADCON1,ADCS2 ;X 0 1 0 1 BCF ADCON1,ADCS1 ;1 1 0 0 0 BCF ADCON1,ADCS0 ;1 0 1 1 0 BCF ADCON1,ADPREF1 ;1= Vref FVR module 1= Vref pin 0=Vref to Vdd BCF ADCON1,ADPREF0 ;1= 0= 0= MOVLB .0 ;Bank0 RETURN ; SET_COMPM ;Page 153 MOVLB .2 ;Bank2 BCF CM1CON1,C1INTP ; BCF CM1CON1,C1INTN ; BCF CM1CON1,C1PCH1 ;1= C1VP connects to FVR Vref 0= C1VP connects to DAC Vref 0= C1VP connects to C1IN+ pin BCF CM1CON1,C1PCH0 ;0= 1= 0= BCF CM1CON1,C1NCH ;1 = C1VN connects to C1IN1- pin 0 = C1VN connects to C1IN0- pin BCF CM1CON0,C1SYNC ;1= Synchronous 0= Output to Timer1, I/O Pin Is Asinchronous BCF CM1CON0,C1HYS ;1= Hysteresis Enabled 0= Hysteresis Disabled BSF CM1CON0,C1SP ;1= Higher Speed, Normal 0= Low Speed Mode, Low-power Operates BCF CM1CON0,C1POL ;1= Output Inverted 0= Comparator Output Is Non Inverted BCF CM1CON0,C1OE ;1= 0= C1OUT Is Internal Only BSF CM1CON0,C1ON ;1= Comarator1 Enabled 0= CLRF SRCON0 ;Page 147 CLRF SRCON1 ; MOVLB .0 ;Bank0 RETURN ; SET_FVR ;Fixed Voltage Reference. Fixed Voltage Reference output cannot exceed VDD MOVLB .2 ;Page 123 ;BCF FVRCON,TSEN ;1 = Temperature indicator is enabled ;BCF FVRCON,TSRNG ;1 = Vdd > 3.6V (High Range) 0 = Vdd > 1.8V (Low Range) ;For Comparator and DAC BCF FVRCON,CDAFVR1 ;1= 4.096V 1= 2.048V 0= 1.024V 0= is OFF BCF FVRCON,CDAFVR0 ;1= 0= 1= 0= ;For ADC BCF FVRCON,ADFVR1 ;1= 4.096V 1= 2.048V 0= 1.024V 0= is OFF BCF FVRCON,ADFVR0 ;1= 0= 1= 0= BSF FVRCON,FVREN ;1= FVR Enable BTFSS FVRCON,FVRRDY ;1 = Fixed Voltage Reference otput is ready for use NOP MOVLB .0 ;Bank0 RETURN ; SET_UART ;Page 267 MOVLB .3 ;Bank3 ;MOVLW .103 ;19200 bps UART Fosc=8MHz MOVLW .51 ;19200 bps UART Fosc=4MHz MOVWF SPBRGL ; CLRF SPBRGH ; MOVLB .1 ;Bank1 BCF TRISA,0 ;TX (RA0) Serial Output BSF TRISA,1 ;RX (RA1) Serial Input MOVLB .3 ; ;BTFSC BAUDCON,ABDOVF ; ;NOP ;BTFSC BAUDCON,RCIDL ; ;NOP BCF BAUDCON,SCKP ;1= Transmit Inverted Data 0= Non-Inverted BSF BAUDCON,BRG16 ;1= 16-Bit Baud Rate Generator 0= 8-Bit BRG BCF BAUDCON,WUE ;Wake-up Enabled bit BCF BAUDCON,ABDEN ;1= Auto_Baud Detect Enabled 0= Desabled ;Trasnit Status & Control Register BCF TXSTA,TX9 ;1= 9-bit TX 0= 8-bit TX BCF TXSTA,SYNC ;1= Synchronous Mode 0= Asynchronous Mode ;BCF TXSTA,SENDB ;1= Send Sync Break on next transmission 0= Sync Break transmission completed BSF TXSTA,BRGH ;1= High Speed 0= Low Speed ;BTFSC TXSTA,TRMT ;1= Empty Transmit Shift Reg. 0= Full ;NOP ; ;BCF TXSTA,TX9D ; 9bit of Transmit Data. Can be address/data bit or a parity bit. BSF TXSTA,TXEN ;1= Enable TX 0= Disable TX ;Receive Status & Control Register BCF RCSTA,RX9 ;1= 9-bit RX 0= 8-bit RX BCF RCSTA,CREN ;1= Enables Receive 0= Disables BCF RCSTA,ADDEN ;1= Enable Address Detection 0= Disabled ;BTFSC RCSTA,FERR ;1= Framing Error 0= No Framing Error ;NOP ;BTFSC RCSTA,OERR ;1= Overrun Error 0= No Overrun Error ;NOP ;BTFSC RCSTA,RX9D ;9th bit of Receive Data ;NOP BSF RCSTA,SPEN ;1= Serial Port Enabbled 0= MOVLB .0 ;Bank0 RETURN ; UAT ;Universal Asynchronous Transmiter In: W BTFSS PIR1,TXIF GOTO $-1 MOVLB .3 ;Bank3 MOVWF TXREG MOVLB .0 BTFSS PIR1,TXIF ;1= Transmit Buffer is Empty GOTO $-1 ;XORWF CHSUM,F ;Пресмята контролната сума на изпратените данни. RETURN ; SET_PWM1 ;Pulse Width Modulation MOVLB .5 ;Page 207 MOVLW B'00001100' ;<3:2>=xxxx11xx => PWM mode IORLW B'00000000' ;<7:6>=00xxxxxx => Single output: P1A modulated, P1B assigned as port pins ;IORLW B'10000000' ;<7:6>=10xxxxxx => Half-Bridge output: P1A, P1B modulated with dead-band control IORLW B'00000000' ;<1:0>=xxxxxx00 => PWM mode; P1A active-high, P1B active-high ;IORLW B'00000001' ;<1:0>=xxxxxx01 => PWM mode; P1A active-high, P1B active-low ;IORLW B'00000010' ;<1:0>=xxxxxx10 => PWM mode; P1A active-low , P1B active-high ;IORLW B'00000011' ;<1:0>=xxxxxx11 => PWM mode; P1A active-low , P1B active-low MOVWF CCP1CON ; CLRF PSTR1CON ;Only Single Output CCP1CON='00xx11xx' Page 209 BSF PSTR1CON,STR1SYNC ;1 = Output steering update occurs on next PWM period BCF PSTR1CON,STR1B ;1= P1B pin has the PWM 0= P1B pin is assigned to port pin BSF PSTR1CON,STR1A ;1= P1A pin has the PWM 0= P1A pin is assigned to port pin ;MOVLW .3 ;Only Half-Bridge Mode ;MOVWF PWM1CON ;<6:0> Death Time X * Tosc * 4 BCF PWM1CON,P1RSEN ;0 = ECCPASE must be cleared in software to restart the PWM. ;1 = The ECCPASE bit clears automatically once the shutdown event goes away. MOVLB .5 ;Bank5 CLRF CCPR1L ;Bit 9 - 2 BCF CCP1CON,DC1B1 ;Bit 1 BCF CCP1CON,DC1B0 ;Bit 0 MOVLB .5 ;Disabl C1_low INT_low ...... BCF CCP1AS,CCP1AS2 ;0 0 1 BCF CCP1AS,CCP1AS1 ;0 0 0 BCF CCP1AS,CCP1AS0 ;0 1 0 BCF CCP1AS,PSS1AC1 ;0= P1A to '0' 0= P1A to '1' 1= P1A to tri-state BCF CCP1AS,PSS1AC0 ;0= 1 X BCF CCP1AS,PSS1BD1 ;0= P1B to '0' 0= P1B to '1' 1= P1B to tri-state BCF CCP1AS,PSS1BD0 ;0 1 X BCF CCP1AS,CCP1ASE ;0=CCP outputs are operating 1=CCP outputs are in shutdown state MOVLB .0 ;Bank0 MOVLW 0xFF ; MOVWF PR2 ;Page 196 ;1:1 1:2 ..... 1:16 BCF T2CON,T2OUTPS3 ;0 0 Page 177 BCF T2CON,T2OUTPS2 ;0 0 BCF T2CON,T2OUTPS1 ;0 0 BCF T2CON,T2OUTPS0 ;0 1 BCF T2CON,T2CKPS1 ;0= /1 0= /4 1= /16 1= /64 Timer prescaler BCF T2CON,T2CKPS0 ;0= 1= 0= 1= BSF T2CON,TMR2ON ;0= 1=Timer2 is On MOVLB .2 ;Bank2 Page112 BCF APFCON,P1BSEL ;0= P1B ->RA0 1= P1B ->RA4 BCF APFCON,CCP1SEL ;0= CCP1/P1A ->RA2 1= CCP1/P1A ->RA5 MOVLB .0 ;Bank0 CLRF TMR2 ; BCF PIR1,TMR2IF ; BTFSS PIR1,TMR2IF ;New PWM cycle? GOTO $-1 ; MOVLB .1 ;Bank1 BCF TRISA,2 ;CCP1/P1A -> RA2 Output! ;BCF TRISA,5 ;CCP1/P1A -> RA2 Output! ;BCF TRISA,0 ;P1B -> RA0 Output! ;BCF TRISA,4 ;P1B -> RA0 Output! MOVLB .0 ;Bank0 RETURN ; SET_TMR0 ;Page 161 MOVLB .1 ;Bank1 BCF OPTION_REG,TMR0CS ;1=T0CKI pin (RA4) 0=Intrnal Clock Source Fosc/4 BTFSC OPTION_REG,TMR0CS ; BCF OPTION_REG,TMR0SE ;1= High -> Low T0CKI 0= Low -> High T0CKI BCF OPTION_REG,PSA ;0 - Prescaler Is Assigned To The TMR0 Module BTFSC OPTION_REG,PSA ;1 = Prescaler is not assigned to the Timer0 module GOTO SET_TMR0_1 ;--> MOVF OPTION_REG,W ; ANDLW B'11111000' ;Нулира само PS2 PS1 PS0 ;IORLW B'00000000' ;Fosc/4/2 4MHz => 2uS ;IORLW B'00000001' ;Fosc/4/4 ;IORLW B'00000010' ;Fosc/4/8 ;IORLW B'00000011' ;Fosc/4/16 ;IORLW B'00000100' ;Fosc/4/32 ;IORLW B'00000101' ;Fosc/4/64 ;IORLW B'00000110' ;Fosc/4/128 IORLW B'00000111' ;Fosc/4/256 4MHz => 256uS MOVWF OPTION_REG ; SET_TMR0_1 MOVLB .0 ;Bank0 RETURN ; SET_TMR1 ;Page 163 ;Timer1 Module: Max period 8uS * 65536 = 524,288mS (Fosc=4MHz) BCF T1CON,TMR1CS1 ;1=Capacitive Sens OSC 1=External Clock T1CKI (RA5) 0=System Clock (Fosc) 0=Insrtuction Clock (Fosc/4) BCF T1CON,TMR1CS0 ;1= 0= 1= 0= BTFSC T1CON,TMR1CS1 BSF T1CON,NOT_T1SYNC;0= 1=Do not synchronize external clock input BSF T1CON,T1CKPS1 ;Timer prescaler 1= /8 1= /4 0= /2 0= /1 BSF T1CON,T1CKPS0 ;Timer prescaler 1 0 1 0 BCF T1CON,T1OSCEN ;1=Enable TMR1 Oscillator 0=Oscillator Circuit Disable BSF T1CON,TMR1ON ;1=Enables Timer1 0=Stop Timer1 ;Page 172 BCF T1GCON,TMR1GE ;1 = Timer1 counting is controlled by the Timer1 gate function ;0 = Timer1 counts regardless of Timer1 gate function ;BCF T1GCON,T1GPOL ;BCF T1GCON,T1GTM ;BCF T1GCON,T1GSPM ;BCF T1GCON,T1GGO ;BCF T1GCON,T1GSS1 ;BCF T1GCON,T1GSS1 RETURN ; SET_WDT ;Page 93 MOVLB .1 ;Bank1 MOVLW B'00010110' ;1:65536 1mS to 256S MOVWF WDTCON ; BCF WDTCON,SWDTEN ;1=WDT Is Turned ON If Configuration 2007h Enable 0=WDT Is Turned OFF MOVLB .0 ;Bank0 RETURN ; SET_INT_DISABLE ;Page 83 CLRF INTCON MOVLB .1 ;Bank1 CLRF PIE1 CLRF PIE2 MOVLB .0 ;Select Bank0. RETURN SET_INT_PORTCHANGE ;Page 119 MOVLB .7 ;Bank7 MOVLW B'00000000' ;X X IOCAP5 IOCAP4 IOCAP3 IOCAP2 IOCAP1 IOCAP0 MOVWF IOCAP ;1=Interrupt-on-change Positive Enabled 0=Interrupt-on-change Positive Disabled MOVLW B'00000000' ;X X IOCAN5 IOCAN4 IOCAN3 IOCAN2 IOCAN1 IOCAN0 MOVWF IOCAN ;1=Interrupt-on-change Negative Enabled 0=Interrupt-on-change Negative Disabled CLRF IOCAF ;PORTA Flag Register Bank7 MOVLW 0xFF XORWF IOCAF,W ANDWF IOCAF,F MOVLB .0 ;Bank0 bcf INTCON,IOCIF ;PORTA Change Interrupt Global Flag bsf INTCON,IOCIE ;1=PORTA Change Interrupt Enables 0=PORTA/PORTB Change Interrupt Disable RETURN SET_INT_EXTINT ;Page 83 MOVLB .1 ;Pin RA2 BSF OPTION_REG,INTEDG;1=Rising RA2/INT Interrupt 0=Falling RA2/INT Interrupt BCF INTCON,INTF ;RA2/INT Change Interrupt Flag BSF INTCON,INTE ;1=RA2/INT Change Interrupt Enables 0=RA2/INT Change Interrupt Disable MOVLB .0 ;Bank0 RETURN SET_INT_TMR1 MOVLB .1 ;Bank1 BSF PIE1,TMR1IE ;1=Enables TMR1 Overflow Interrupt 0=Disables TMR1 Overflow Interrupt MOVLB .0 ;Bank0 BCF PIR1,TMR1IF ;TMR1 Overflow Interrupt Flag BSF INTCON,PEIE ;1=Enables All Peripheral Interrupts 0=Disables All Peripheral Interrupts RETURN ; SET_OSC ;Page 61 MOVLB .1 ;Oscillator configuration. BCF OSCCON,SPLLEN ;1= 4x PLL Enable 0= Disable Fmax = 8MHz x4 = 32MHz LFINTOSC ;16MHz 8MHz 4MHz 2MHz 1MHz 500KHz 250KHz 125KHz 31,25KHz 31KHz BSF OSCCON,IRCF3 ;1 1 1 1 0 0 0 0 0 0 BSF OSCCON,IRCF2 ;1 1 1 1 0 1 1 1 0 0 BCF OSCCON,IRCF1 ;1 1 0 0 1 1 1 0 1 0 BSF OSCCON,IRCF0 ;1 0 1 0 1 1 0 1 0 0 BCF OSCCON,SCS1 ;1=Internal Oscillator Block 0= Clock Source Defined By h'2007' 0= Timer1 oscillator BCF OSCCON,SCS0 ;X= 0= 1= ; OSCSTAT, MOVLW OSCTUNE_MNL ;Central frequency MOVWF OSCTUNE ; MOVLB .0 ;Bank0 RETURN ; ; SET_IO ;Page 111 MOVLB .2 ;Настройка на портовете In, Out, Analog, Pull-up CLRF LATA ;Page 116 MOVLB .3 ;Bank3 1= Analog Input 0= Digital I/O MOVLW B'00000000' ;X X X RA4 X RA2 RA1 RA0 MOVWF ANSELA MOVLB .4 ;Bank4 1=Pull-up Enable 0=Pull-up Disabled MOVLW B'00000000' ;X X RA5 RA4 RA3 RA2 RA1 RA0 MOVWF WPUA MOVLB .1 ;Bank1 BSF OPTION_REG,NOT_WPUEN ;1=Pull-up Global Disabled 0=Pull-up Global Enable MOVLW B'00111111' ;1=Input 0=Output MOVWF TRISA ;X X RA5 RA4 RA3 RA2 RA1 RA0 MOVLB .0 ;Bank0 RETURN ;********************************************************************** ;*******Първоначална настройка на микроконтролера********************** START MOVLB .0 ;Bank0 BCF WPAGE ;0- Work. Page0 1- Work. Page1 CLRF PORTA CALL SET_INT_DISABLE ;Забранява всички прекъсвания. CALL SET_OSC ;Oscillator configuration !!! CALL SET_IO ;Настройка на портовете In, Out, Analog, Pull-up ;CALL SET_TMR0 ;Настройка на Timer0 ;CALL SET_TMR1 ;Настройка на Timer1 ;CALL SET_TMR2 ;??? Page 185 ;CALL SET_WDT ; ;CALL SET_INT_PORTCHANGE ;CALL SET_INT_EXTINT ;CALL SET_INT_TMR1 ;BSF INTCON,GIE ;1=Enables All Interrupts 0=Disables All Interrupts ;CALL SET_ADC ; ;CALL SET_COMPM ;Настройка на компаратoрите. ;CALL SET_FVR ; ;CALL SET_DAC ;??? Page 141 ;CALL SET_PWM1 ;Enable PWM - RA2 (RA0,RA4,RA5) ;CALL SET_UART ;Set RX/TX Baud Rates Asynchronous Modes GOTO BEGIN ;--^ ;********************************************************************** ORG 0x0800 ;Page1 ! ORG 0x0F00 END