spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Robotica di base > Elettronica

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #1  
Vecchio 05-10-2009, 18.27.20
Italia Italia non è collegato
Nuovo robottaro
 
Data registrazione: 11-09-2009
Residenza: Frosinone
Messaggi: 19
Potenza reputazione: 0
Italia E' per ora ancora un mistero
Predefinito Problemino con interrupt

Sto programmando una pic18F2431.
Semplicemente il programma dovrebbe rilevare il
cambio di stato sulla CAP1, CAP2 o CAP3 e cambiare lo stato della PORTB.
MA a qunto pare nulla accade.



#include <p18f2431.h>
#include <adc.h>
#include <stdlib.h>
#include <delays.h>
#include <pwm.h>
#include <timers.h>

#pragma config OSC = HSPLL
#pragma config WDTEN = OFF
#pragma config PWMPIN = OFF
#pragma config PWRTEN = OFF
#pragma config LVP = OFF
#pragma config BOREN = OFF
#pragma config MCLRE = ON

#pragma interrupt ISR
void ISR(void)
{
PORTB=0x01;
}
#pragma interruptlow ISRL
void ISRL(void)
{
PORTB=0x01;
}
#pragma code high_vector=0x08
void interrupt_alto(void)
{
_asm GOTO ISR _endasm
}
#pragma code

#pragma code low_vector=0x18
void interrupt_basso(void)
{
_asm GOTO ISRL _endasm
}
#pragma code
void inizPORTE();
void pwm(unsigned int frequenza,unsigned short long dc);

void main(void)
{
inizPORTE;
T5CON=0b00011001;
CAP1CON=0b01001000;
CAP2CON=0b01001000;
CAP3CON=0b01001000;
DFLTCON=0x00;
QEICON=0x00;
RCONbits.IPEN=1;
INTCONbits.PEIE=1;
INTCONbits.GIE=1;
PIE3bits.IC1IE=1;
PIE3bits.IC2QEIE=1;
PIE3bits.IC3DRIE=1;

while(1)
{

}
void inizPORTE()
{
TRISA=0xFF;
TRISB=0x00;
TRISC=0x00;
PORTB=0x00;
PORTC=0x00;
}
Rispondi citando
  #2  
Vecchio 07-10-2009, 09.31.44
Italia Italia non è collegato
Nuovo robottaro
 
Data registrazione: 11-09-2009
Residenza: Frosinone
Messaggi: 19
Potenza reputazione: 0
Italia E' per ora ancora un mistero
Predefinito

CIao a tutti,
h provato a fare un ulteriore test m senza ottenere un risultato.Ho rifatto
il circuto ma stavolta collegando il mio ingresso sulla PORTB e in particolare la RB4, ma ancora non riesco a far funzionere la la routine. Posto il codice

#include <p18f2431.h>
#include <adc.h>
#include <stdlib.h>
#include <delays.h>
#include <pwm.h>
#include <timers.h>
#include <portb.h>
#pragma config OSC = HSPLL
#pragma config WDTEN = OFF
#pragma config PWMPIN = OFF
#pragma config PWRTEN = OFF
#pragma config LVP = OFF
#pragma config BOREN = OFF
#pragma config MCLRE = ON

#pragma interrupt ISR
void ISR(void)
{
if (INTCONbits.RBIF == 1 )
{
PORTB=0x01;
//Delay10KTCYx(100);
}
}
#pragma code high_vector=0x08
void interrupt_alto(void)
{
_asm GOTO ISR _endasm
}
#pragma code

void inizPORTE();
void pwm(unsigned int frequenza,unsigned short long dc);
void main(void)
{
inizPORTE;
INTCONbits.RBIE=1;
INTCONbits.PEIE=1;
INTCONbits.GIE=1;

while(1)
{

}

void inizPORTE()
{
TRISA=0xFF;
TRISB=0b11110000;
TRISC=0x00;
PORTB=0x00;
PORTC=0x00;
}
Rispondi citando
  #3  
Vecchio 07-10-2009, 11.34.33
Italia Italia non è collegato
Nuovo robottaro
 
Data registrazione: 11-09-2009
Residenza: Frosinone
Messaggi: 19
Potenza reputazione: 0
Italia E' per ora ancora un mistero
Predefinito

Ragazzi vi posto il codice funzionante.Vi pongo pero un altro dilemma:
questa volta non ho usato il #pragma interruptlow {nomefunzione}
ma una semplice chiamata a funione e a quanto pare tutto funge.
Ho fatto ovviamente un'ulteriore prova con il #pragma interruoptlow
e ancora funziona.Quindi mi spiegate a cosa serve il #pragma interruptlow?

#include <p18f2431.h>
#include <adc.h>
#include <stdlib.h>
#include <delays.h>
#include <pwm.h>
#include <timers.h>
#include <portb.h>
#pragma config OSC = HSPLL
#pragma config WDTEN = OFF
#pragma config PWMPIN = OFF
#pragma config PWRTEN = OFF
#pragma config LVP = OFF
#pragma config BOREN = OFF
#pragma config MCLRE = ON
void prova(void);
#pragma interrupt ISR
void ISR(void)
{
PORTB=0b00001111;
return;
}
//#pragma interruptlow ISRL
// void ISRL(void)
// {
// PORTB=0b00000011;
// Delay10KTCYx(100);
// return;
// }
#pragma code high_vector=0x08
void high_vector(void)
{
_asm GOTO prova _endasm
}
#pragma code


void inizPORTE(void);

void main(void)
{
inizPORTE();
INTCONbits.RBIE=1;

INTCONbits.GIE=1;

while(1)
{

}

void inizPORTE()
{
TRISA=0xFF;
TRISB=0b11110000;
TRISC=0x00;
PORTB=0b00000011;
PORTC=0x00;
}

void prova(void)
{
PORTB=0b00000111;
}
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code è Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
problemino rccdcc Elettronica 6 29-10-2010 18.55.07
problemino con la rs232 luigi91 P. in Visual Basic 36 22-03-2010 21.22.10
ho un problemino con wxdevc++ angel10 P. in C, C++ 0 31-01-2008 17.34.59
Problemino ...... Charlie Elettronica 6 01-02-2006 21.49.34
problemino con una macro reda P. in C, C++ 2 26-05-2005 19.57.47


Tutti gli orari sono GMT. Adesso sono le: 21.25.06.


Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB