bengt-re: Inte världens bästa sätt, men ensålänge verkar det fungera
För att hitta statbiten väntar jag tills ingånegn blir låg, sen kollar jag med hjälp av en kort pause i en delayloop, sammt en counter (typ: counter = counter + 1) sen när jag hittar en som är tillräckligt lång konstaterar jag att det är startbiten
. Då väntar jag i 19ms och har då hoppat bort till en av bitarna som alltid är en 1'a (på de tre knappar jag vill läsa av), efter att den har blivit låg börjar jag räkna hur många nollor det kommer innan nästa etta (för att veta om det är en etta eller nolla så kollar jag först när den blir hög, sen väntar jag i 0,9ms och kollar sen om den är hög, är den fortfarande hög då så är det en etta, annars är det en nolla. Sen räknar jag antalet nollor med samma counter-princip och sparar i en variabel). Sen tar jag den variabeln minus 6 (decimalt), och om ZERO biten är satt då kan jag konstatera att det var on/off knappen som man tryckte på, och om det inte blir noll får jag fortsätta att kolla bitar på samma vis för att lista ut vilken knapp det var.
När jag har konstaterat att det var on/off knappen som man tryckte på så kollar den i en flagga om den är på eller av nu. Om den är på så stänger den av (noll'ar flaggan) och om den var av så sätter den på (sätter flaggan). Sen i main rutinen så sätter den en LED till samma värde som flaggan. Sen är taken att om den är avstängd (LED'n av och flaggan låg) så ska den inte reagera på någon annan kanpptryckning än on/off knappen.
För att nolla flaggan om den är hög, och sätta den om den var låg från början använde jag först detta kommandot med n fick konstiga fel (den gick bara att sätta på inte av

)
Kod: Markera allt
btfsc flagga
bcf flagga
btfss flagga
bsf flagga
Men som saggt så fungerade inte det, och efter ett tag kom jag framm till felet. Eftersom den först kollar den första sen efter att den har ändrat (om det ska ändras) så kollar den den andra så kommer den alltid köra den ansra (och sätta flaggan) oavsett vilket värde den hade från början.. Men detta löste jag genom att först spara det i en temporär flagga och sen flytta över det till den flaggan som det ska vara i.
Eftersom den skulle kunna fastna i en loop om det är fel signal, och inte komma ur den på annat sätt än att reseta PIC'en (den regerar ju inte på rätt kod då heller) så ska jag försöka lära mig använda WDT'ern också. Det verkar vara ganska lätt
Lite flummigt skrivet, hoppas ni förstår ändå!

Mvh