Gå til innhold

Hva er galt med denne koden? (PIC Mikrokontroller)


Anbefalte innlegg

Hei!

 

Jeg har problemer med at det ikke skjer noe når jeg trykker RB0 eller RB1! Hvorfor vil ikke betingelsen oppfylles?

 

#include "Display_utils.h"

unsigned short i;
unsigned int button;

void main() {
 //INTCON = 0;                    // Disable GIE, PEIE,INTE,RBIE,T0IE
 PORTA  = 0;
 TRISA  = 0;
// PORTB  = 0xFF;
 TRISB  = 0xFF;
 PORTD  = 0;
 TRISD  = 0;
 PORTB=0x00;
 do {
 if(PORTB.RB0==1) {
   for (i = 0; i <= 9u; i++) {
     PORTA = 0;
     Delay_ms(120);             	// Turn off all 7seg displays
     PORTD = mask(i);       	// bring appropriate value to PORTD
     PORTA = 0b00000001;
     Delay_ms(120);
     PORTD = mask(i);
     PORTA = 0b00000010;
     Delay_ms(120);
     PORTD = mask(i);
     PORTA = 0b00000100;
     Delay_ms(120);
     PORTD = mask(i);
     PORTA = 0b00001000;
     Delay_ms(120);
     PORTD = mask(i);
     PORTA = 0b00010000;
     Delay_ms(120);
     PORTD = mask(i);
     PORTA = 0b00001000;
     Delay_ms(120);
     PORTD = mask(i);
     PORTA = 0b00000100;
     Delay_ms(120);
     PORTD = mask(i);
     PORTA = 0b00000010;
     Delay_ms(120);
     PORTD = mask(i);
     PORTA = 0b00000001;
     Delay_ms(120);
     PORTD = mask(i);
     PORTA = 0b00000000;
     }
   }

 else if(PORTB.RB1==1) {
	PORTD = mask(10);
	PORTA = 0b00001000;
	PORTD = mask(11);
	PORTA = 0b00000100;
	PORTD = mask(12);
	PORTA = 0b00000010;
     }
	} while(1);
   }

 

 

Display_utils.h

 

//-------------- Returns mask for common cathode 7-seg. display
unsigned short mask(unsigned short num) {
 switch (num) {
   case 0 : return 0x3F;
   case 1 : return 0x06;
   case 2 : return 0x5B;
   case 3 : return 0x4F;
   case 4 : return 0x66;
   case 5 : return 0x6D;
   case 6 : return 0x7D;
   case 7 : return 0x07;
   case 8 : return 0x7F;
   case 9 : return 0x6F;
   case 10 : return 0x77; //A
   case 11 : return 0x7F; //B
   case 12 : return 0x39; //C
   case 13 : return 0x3F; //D
   case 14 : return 0x79; //E
   case 15 : return 0x71; //F
   case 16 : return 0x7D; //G
   case 17 : return 0x76; //H
   case 18 : return 0x06; //I
   case 19 : return 0x1E; //J
   //case X : return ????; //K
   case 20 : return 0x38; //L
   //case X : return ????; //M
   //case X : return ????; //N
   case 21 : return 0x3F; //O
   case 22 : return 0x73; //P
   //case X : return ????; //Q
   //case X : return ????; //R
   case 23 : return 0x6D; //S
   //case X : return ????; //T
   case 24 : return 0x3E; //U
 } //case end
}//~

 

Endret av Gavekort
Lenke til kommentar
  • 3 uker senere...
Videoannonse
Annonse

er det

 

if(PORTB.RB0==1)

...

else if(PORTB.RB1==1)

 

som ikke trigger?

 

isåfall, vil jeg foreslå å gjøre noe enklere i if'n.. som å toggle et lys eller noe.

 

sjekk også at du har initialisert PORTB riktig, PIC mikrokontrollen er ganske nazi på småfeil. Eller rettere sagt compileren.

Husker seff ikke hva verdiene skal settes til i huet, men det finnes på referanseskjemaet som fulgte med kontrolleren.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...