Made a lot of interrupt-usage variabled volatile.
[kokare.git] / kokare.c
index 8a42f6b..f63c642 100644 (file)
--- a/kokare.c
+++ b/kokare.c
@@ -2,14 +2,14 @@
 #include <avr/interrupt.h>
 #include <inttypes.h>
 
-#define SEGA 128
-#define SEGB 64
-#define SEGC 4
-#define SEGD 16
-#define SEGE 32
-#define SEGF 2
-#define SEGG 1
-#define SEGP 8
+#define SEGA 4
+#define SEGB 2
+#define SEGC 1
+#define SEGD 32
+#define SEGE 64
+#define SEGF 16
+#define SEGG 8
+#define SEGP 128
 
 uint8_t font[16] = {
     SEGA | SEGB | SEGC | SEGD | SEGE | SEGF,
@@ -34,24 +34,24 @@ uint8_t dsp[2] = {0, 0};
 char leda = 0;
 char ledc = 0;
 /* Timer */
-char of = 0;
-int oticks = 0;
+volatile char of = 0;
+volatile int oticks = 0;
 unsigned long mnow;
 /* Pulse counter */
-char pstate = 0;
+volatile char pstate = 0;
 char pval = 0;
 /* Switch */
-char sstate = 0;
+volatile char sstate = 0;
 int stime = 0;
 /* Temp sensor */
-char tstate = 0;
-char tlock = 0;
+volatile char tstate = 0;
+volatile char tlock = 0;
 unsigned long tstart;
 unsigned long ttime;
 unsigned long ttimea = 10000;
 char tavgok = 0;
 /* Zero-cross detector*/
-char zok = 0;
+volatile char zok = 0;
 unsigned long ztime;
 /* Triac */
 char trstate = 0;
@@ -291,7 +291,7 @@ int main(void)
            display(ttimea / 1000);
        }
 #endif
-#if 1
+#if 0
        /*
         * ZVD debug
         */
@@ -320,6 +320,10 @@ int main(void)
            tron = !tron;
            sstate = 0;
        }
+       if(tron)
+           dsp[1] |= SEGP;
+       else
+           dsp[1] &= ~SEGP;
 #endif
 #if 0
        /*
@@ -341,6 +345,8 @@ int main(void)
        } else {
            display(cur);
        }
+       if(PINB & 4)
+           dsp[1] |= SEGP;
 #endif
     }
 }
@@ -374,22 +380,22 @@ ISR(SIG_OVERFLOW1)
 
 ISR(SIG_PIN_CHANGE0)
 {
-    if((sstate == 0) & ((PINB & 1) == 0)) {
+    if((sstate == 0) && !(PINB & 4)) {
        stime = oticks;
        sstate = 1;
     }
-    if((sstate == 1) & ((PINB & 1) == 1)) {
+    if((sstate == 1) && (PINB & 4)) {
        stime = oticks - stime;
        sstate = 2;
     }
     if(pstate == 0) {
        if((PINB & 2) == 0) {
            pstate = 1;
-       } else if((PINB & 4) == 0) {
+       } else if((PINB & 1) == 0) {
            pstate = 2;
        }
     } else if(pstate == 1) {
-       if((PINB & 4) == 0) {
+       if((PINB & 1) == 0) {
            pval++;
            pstate = 3;
        } else {
@@ -403,7 +409,7 @@ ISR(SIG_PIN_CHANGE0)
            pstate = 0;
        }
     } else {
-       if((PINB & 2) && (PINB & 4))
+       if((PINB & 2) && (PINB & 1))
            pstate = 0;
     }
 }