In SX Microcontrollers, SX/B Compiler and SX-Key Tool, loojade wrote: Actually I'm not sure to understud... But I change a lot the program. JonnyMac spoken about lot of code in interrupt so I change the code. Now I use the asichro interrupt to fix the counter and the main program to INC the counter: [code] ... ISR_Start: WKPND_B = winner ' get winner byte_interrupt = winner Ch1: ' check channel IF byte_interrupt <> %00000001 THEN Ch2 ' if not, try next last_fr_l = counter_fr_l 'quando l'ingresso cambia di stato salvo il valore del contatore e azzero il contatore last_fr_h = counter_fr_h counter_fr_l = 0 counter_fr_h = 0 GOTO ISR_Exit Ch2: IF byte_interrupt <> %00000010 THEN Ch3 ' if not, try next last_rr_l = counter_rr_l 'quando l'ingresso cambia di stato salvo il valore del contatore e azzero il contatore last_rr_h = counter_rr_h counter_rr_l = 0 counter_rr_h = 0 GOTO ISR_Exit Ch3: IF byte_interrupt <> %00000100 THEN ISR_Exit IF controllo = 1 THEN IF cicli < taglio THEN IF cicli = 0 THEN t_control = 1 ELSE t_control = 0 ENDIF INC cicli IF cicli = taglio THEN cicli = 0 ENDIF ENDIF ENDIF GOTO ISR_Exit ISR_Exit: WKEN_B = %11111000 ' prepare for new ISR RETURNINT ... [/code] [code] ... Start: WKPND_B = %00000000 ' clear pending WKED_B = %11111111 ' falling edge detect WKEN_B = %11111000 ' use bits 0..2 for inputs TRIS_B = %00011111 ' imposto gli ingressi e le uscite della porta B TRIS_C = %00000000 ' imposto gli ingressi e le uscite della porta C INPUT SDA ' float I2C bus pins INPUT SCL counter_fr_l = 255 counter_fr_h = 255 counter_rr_l = 255 counter_rr_h = 255 last_fr_l = 255 last_fr_h = 255 last_rr_l = 255 last_rr_h = 255 controllo = 0 byte_interrupt = 0 addr = 0 byte1 = 0 Main: IF button_1 = 1 THEN 'il pulsante di scelta è premuto IF addr > nr_parametri THEN 'se l'indirizz supera il numero dei parametri allora lo azzero addr = 0 ENDIF MEM_OUT addr, inVal 'send to 24LC16 addr = addr + 2 'incremento di 2 l'indirizzo di riferimento alla eeprom di 2 (= 2 byte) inVal = MEM_IN addr 'leggo il valore del parametro memorizzato nella eeprom DISPLAY 'visualizzo il parametro a display PAUSE 300 ENDIF IF button_2 = 1 THEN INC inVal DISPLAY PAUSE 300 ENDIF PAUSEUS 20 IF counter_fr_l < 255 THEN INC counter_fr_l ELSE counter_fr_l = 0 IF counter_fr_h < 255 THEN INC counter_fr_h ENDIF ENDIF IF counter_rr_l < 255 THEN INC counter_rr_l ELSE counter_rr_l = 0 IF counter_rr_h < 255 THEN INC counter_rr_h ENDIF ENDIF INC byte1 IF byte1 < 250 THEN GOTO Main CHECK_SPINNING byte1 = 0 GOTO Main ... [/code] Like this It work well (on simulator). ---------- End of Message ---------- You can view the post on-line at: http://forums.parallax.com/forums/default.aspx?f=7&p=1&m=251649#m253408 Need assistance? Send an email to the Forum Administrator at forumadmin@parallax.com The Parallax Forums are powered by dotNetBB Forums, copyright 2002-2008 (http://www.dotNetBB.com)