Problem med att simulera väldigt simpel kod
Postat: 29 november 2009, 21:22:42
Har ett litet problem med min kod nedan har minskat ner programmet så det enbart består av 4 "funktioner" main, interrupt,BinBcd, och init.
programmeringsspråk : Hi-tech C
program: Mplab
PIC: pic16f84a
Det enda som programmet ska utföra är att köra BinBcd funktion hela tiden och skicka ut resultatet på PORTB allt annat i programmet har jag tagit bort för att felsöka. Problemet är den att om jag simulerar programmet med Mpsim så fastnar programmet i BinBcd funktionen, men fattar inte varför bah! Men om jag nollar T0IE och simmulerar om programmet fungerar programmet perfekt, vilket jag tycker verkar konstigt. Så det borde ha något att göra med Interruptet att göra, men det enda som just nu görs i interruptet är ju att nolla interrupt flaggan.
Några tips eller mer info som ni kan behöva
Jag fattar inte vad felet kan vara!
/Slatte
programmeringsspråk : Hi-tech C
program: Mplab
PIC: pic16f84a
Det enda som programmet ska utföra är att köra BinBcd funktion hela tiden och skicka ut resultatet på PORTB allt annat i programmet har jag tagit bort för att felsöka. Problemet är den att om jag simulerar programmet med Mpsim så fastnar programmet i BinBcd funktionen, men fattar inte varför bah! Men om jag nollar T0IE och simmulerar om programmet fungerar programmet perfekt, vilket jag tycker verkar konstigt. Så det borde ha något att göra med Interruptet att göra, men det enda som just nu görs i interruptet är ju att nolla interrupt flaggan.
Några tips eller mer info som ni kan behöva

Jag fattar inte vad felet kan vara!
/Slatte
Kod: Markera allt
#include <pic.h>
#include <sys.h>
//Config bitar
__CONFIG(XT & WDTDIS & PWRTDIS);
#define PROGTID 50
// *** Port A ***
#define downBtn RA0
#define upBtn RA1
#define RA2 RA2
#define RA3 RA3
#define RA4
//Globala Variabler
char Temp = 1;
char PWM = 50;
//*********** initiera PIC ***********
void init(void) // Initiera 16F84A
{
//*** Timer 0
PSA = 0;
PS0 = 0;
PS1 = 0;
PS2 = 0;
T0CS = 0;
//*** Portar
PORTA = 0;
PORTB = 0;
RBPU = 1;
TRISA = 0b00000011; //
TRISB = 0b00000000; // Alla ut
//*** Interrupt
TMR0 = 240;
T0IF = 0; // nollar flaggan
T0IE = 1; // TMR0 genererar interrupt
GIE = 1; // Global Interrupt enable
}
//*********Binärt tal till BCD kod **********
char binBCD(char binartal){
char tiotal, ental;
tiotal = binartal / 10;
ental = binartal % 10;
tiotal = tiotal << 4;
return tiotal + ental;
}
void interrupt skriv_ut(void){
T0IF = 0;
}
void main (){
init();
while(1){
PORTB = binBCD(PWM);
idle(); //En helt tom funktion
}
}