[elektro] PIC18F14K50 External INT0,INT1 szívás
potyo
potyo.ada at gmail.com
Sat Apr 20 18:10:08 CEST 2013
Szerintem az ADCON1 regiszter helyett inkább az ANSEL és ANSELH
regisztereket kell törölni. Így most épp az RC0 és RC1 lábak is analóg
üzemben vannak, tehát digitálisan olvasva nullát mutatnak mindig, ezért az
interrupt generáló logika sem működik.
2013/4/20 Pávai Péter <pavaipeter at gmail.com>
> Üdv Mindenkinek,
>
> 4 órája szívok egy tárgybeli PIC tök alap Interrupt engedélyezésével.
> Valaki belefutott már?
> Timer1 IT-je szépen beeseik ahogy kell neki.
> A INT0 és INT1 az istenért sem akar menni. Én bénázok el valami?
>
> forrás:
> //Timer 1
> //Timer1 Registers Prescaler= 8 - TMR1 Preset = 3110 - Freq = 20.02 Hz -
> Period = 0.049941 seconds
> T1CON.T1CKPS1 = 1; // bits 5-4 Prescaler Rate Select bits
> T1CON.T1CKPS0 = 0; // bit 4
> T1CON.T1OSCEN = 1; // bit 3 Timer1 Oscillator Enable Control bit 1 = on
> T1CON.T1SYNC = 1; // bit 2 Timer1 External Clock Input Synchronization
> Control bit...1 = Do not synchronize external clock input
> T1CON.TMR1CS = 0; // bit 1 Timer1 Clock Source Select bit...0 = Internal
> clock (FOSC/4)
> T1CON.TMR1ON = 1; // bit 0 enables timer
> TMR1H = 0; // preset for timer1 MSB register
> TMR1L = 1; // preset for timer1 LSB register
> // Interrupt Registers
> INTCON = 0; // clear the interrpt control register
> INTCON.TMR0IE = 0; // bit5 TMR0 Overflow Interrupt Enable bit...0 =
> Disables the TMR0 interrupt
> PIR1.TMR1IF = 0; // clear timer1 interupt flag TMR1IF
> PIE1.TMR1IE = 1; // enable Timer1 interrupts
> INTCON.TMR0IF = 0; // bit2 clear timer 0 interrupt flag
> INTCON.INT0IE = 1; // External INT0 enable
> INTCON3.INT1IE = 1; // External INT1 enable
> INTCON2.INTEDG0 = 0; // Él detektálás 1 felfutó él 0 lefutó él
> INTCON2.INTEDG1 = 0; // Él detektálás 1 felfutó él 0 lefutó él
> INTCON3.INT1IF=0; //IF bit clear
> INTCON.INT0IF=0; //IF bit clear
> INTCON.GIE = 1; // bit7 global interrupt enable
> INTCON.PEIE = 1; // bit6 Peripheral Interrupt Enable bit...1 =
> Enables
>
>
> IT sevices
> void interrupt(){
> //Timer1 INT
> if (PIR1.TMR1IF == 1) // timer 1 interrupt flag
> {
> // Timer1 Interrupt - Freq = 20.02 Hz - Period = 0.049941 seconds
> LED1= ~LED1; // Toggle PORTB bit1 LED
> PIR1.TMR1IF = 0; // interrupt must be cleared by software
> PIE1.TMR1IE = 1; // reenable the interrupt
> TMR1H = 0; // preset for timer1 MSB register
> TMR1L = 1; // preset for timer1 LSB register
> }
> //INT1 INT
> if (INTCON3.INT1IF == 1) // timer 1 interrupt flag
> {
> LED2= ~LED2; // Toggle LED
> INTCON3.INT1IF=0;
> }
>
> if (INTCON.INT0IF == 1) // timer 1 interrupt flag
> {
> LED3= ~LED3; // Toggle LED
> INTCON.INT0IF=0;
> }
>
> }
>
> Port config:
> ADCON1=0x0f;
> TRISA=0b00000000;
> TRISB=0b11111111;
> TRISC=0b00000011;
> LATA=0;
> LATB=0;
> LATC=0;
>
>
> Valaki lát benne hibát vagy tényleg ennyire béna vagyok?
>
> Peppe
>
> Köszi
> -----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list