Sida 1 av 1

MikroC

Postat: 17 maj 2007, 15:18:53
av xezer
Hej,
Nu har jag pysslat med assambler en hel och ville testa på ett nytt språk, mikroC.
Jag testade lcd-biblioteket och allt fungerar toppen, men toppen var inte mycket högre än så.

Vanliga enkla exempel som

Kod: Markera allt

do {
  if (Button(&PORTB, 0, 1, 1)) oldstate = 1;
  if (oldstate && Button(&PORTB, 0, 1, 0)) {
    PORTD = ~PORTD;
    oldstate = 0;
  }
} while(1);
Fungerar inte alls, ingen reaktion i picen. USARTen fungerar inte heller med exempelkoden.

Nu börjar jag fundera på om mikroC bara är till för labb-korten från Mikroelektronika ?
Det är en PIC18F452.

Postat: 17 maj 2007, 15:54:53
av Icecap
Och hur är TRISD satt? TRISB? Vad gör "Button(...)"?

Postat: 17 maj 2007, 16:00:13
av xezer
TRISB = 0xff;
TRISD = 0;

Det är inget fel i det vad jag kan se :?

Postat: 17 maj 2007, 16:09:46
av Icecap
Jag använder MikroC till en del, jag är inte obetingad nöjd men den gör oftast vad den ska och den är ju billig (gratis faktisk) så till det pris klagar jag inte.

Då jag inte har insyn i vad dessa färdiga rutiner gör använder jag dom inte alls, jag gör egna och det kanske är där du har lite strul?

Postat: 17 maj 2007, 16:15:56
av xezer
Oj, såg inte att du frågade efter Button(),
den läser av vilken "state" en knapp har, dvs om den får en spänning eller inte.

Jag tycker det borde gå göra
if(PORTB.RB0 == 1){...}

för att kolla om den får signal eller inte? Men det fungerar inte heller :/

Postat: 17 maj 2007, 16:25:47
av Icecap
Det finns ett problem med detta "if(PORTB.RB0 == 1)" och det är att den bara kollar bit'en, alltså ska du skriva "if(PORTB.F0)" för vad är RB0? Ska du ange bits på det vis är det "F0"-"F7" som gäller....

Postat: 17 maj 2007, 16:45:17
av xezer
Läste i manualen att man både kunde skriva F0-F7 och bitens namn, så båda fungerar.

PORTB.F0 blir konstigt nog alltid sant :?
Jag har ett motstånd mellan knappen och spänningen.

Den koden jag har nu:

Kod: Markera allt

  TRISB = 0xff;

do {
   if(PORTB.F0){
        Lcd_Chr(2,1, 'P');
      }else{
       Lcd_Chr(2,1, ' ');
       }
} while(1);

Lcd_Chr() skriver ut ett tecken på LCDn.