Hjälp med C18/Interrupts
Postat: 21 mars 2013, 09:56:08
Jag behöver lite ljus i detta. Problemet är jag försöker ändra TRISB registert under en interrupt funktion men det verka inte fungera. För kompilator säger att den här raden: "char temp_1 = PORTB & 0xF0;" har syntax error. Sen vill jag också ha en delay funktion innan jag läser av PORTB (det är en tangetbord uppgift jag jobbar med) för eventuella studsar. Jag har försökt att skriva TRISB ändringen i assembler men det ger samma error.
Detta error får jag:
Make: The target "C:\Users\iMighty\Documents\Mikrodata\inl51\inl51.o" is out of date.
Executing: "C:\Program Files (x86)\Microchip\mplabc18\v3.40\bin\mcc18.exe" -p=18F458 "inl51.c" -fo="inl51.o" -D__DEBUG -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
C:\Users\iMighty\Documents\Mikrodata\inl51\inl51.c:25:Error: syntax error
Halting build on first failure as requested.
Här är min kod
Tack för hjälpen!
Detta error får jag:
Make: The target "C:\Users\iMighty\Documents\Mikrodata\inl51\inl51.o" is out of date.
Executing: "C:\Program Files (x86)\Microchip\mplabc18\v3.40\bin\mcc18.exe" -p=18F458 "inl51.c" -fo="inl51.o" -D__DEBUG -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
C:\Users\iMighty\Documents\Mikrodata\inl51\inl51.c:25:Error: syntax error
Halting build on first failure as requested.
Här är min kod
Kod: Markera allt
#include <p18cxxx.h>
#include <delays.h>
#include <portb.h>
#pragma config OSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config DEBUG = ON
unsigned char sjuseg[] = {0b00111111,0b00000110,0b01011011,0b01001111,0b01100110 ,0b01101101,0b01111101,0b00000111,0b01111111,0b01101111};
unsigned char combo[] = {0b01111101,0b11101110,0b11101101,0b11101011,0b11011110,0b11011101,0b11011011,0b10111110,0b10111101,0b10111011};
void interrupt (void);
#pragma code HIGH_INTERRUPT_VECTOR = 0x8
void high_ISR (void){
_asm
goto interrupt
_endasm
}
#pragma code
#pragma interrupt interrupt
void interrupt (void){
Delay10TCYx(1); //DEN HÄR RADEN ÄR DUM VARFÖR FUNKAR DU INTE?!
char temp_1 = PORTB & 0xF0; //Maskar raden
TRISB = 0b00000111; //VARFÖR KAN JAG INTE ÄNDRA DIG UNDER INTERRUPT!
char temp_2 = PORTB & 0x0F; //Maskar kolumn
unsigned char temp = ~(temp_1 | temp_2); //Lägger ihop dem
unsigned char nummer = 0;
for(nummer = 0; nummer < 9; nummer++){ //Kolla vilket nummer det är
if(temp == combo[nummer]){
PORTC = sjuseg[nummer]; //Visa detta på sjuseg.
break;
}
else
PORTC = 0x00;
}
INTCONbits.RBIF = 0;
}
void EnableHighInterrupts (void)
{
RCONbits.IPEN = 1; /* enable interrupt priority levels */
INTCONbits.GIEH = 1; /* enable all high priority interrupts */
}
void main (void){
TRISA = 0x00;
TRISB = 0b11111111;
PORTA = 0b00001110;
PORTB = 0x00;
TRISC = 0x00;
PORTC = 0x00;
OpenPORTB(PORTB_CHANGE_INT_ON & PORTB_PULLUPS_ON);
EnableHighInterrupts();
while(1);;
}