I have just switched to KEIL from SDCC (it just wouldn't do what I needed!). I have a startup loop that allows some sleep time while some outboard sensors warm up. While they are doing this, I'm in a loop, printing "."'s to the uart:
Byte i = 0; //loop counter printf("Calibrating Sensors"); for (i=0; i<10; i++){ toggle_led(1,250); // delay and flash LED printf("."); } printf("Loop Complete \r\n"); calibrate_sensors(); delay(3000); ...
No, the problem was with the UART ISR overwriting the accumulator, which is where th eloop counter is. Moving the UART's ISR to register bank 2 solved the problem HUH? there is no accumulator in the register banks. Erik
Yeah, my terminology is probably off, but i is pushed onto some register r(something or other), and then something else is put there in the uart_isr, overwriting the loop counter
a general statement on register banks: My method (that works) is main at RB0 low IP priority interrupts at RB1 high IP priority interrupts at RB2 on derivatives with more than 2 IP priorities (e.g. Philips Rx2), I only use one more which is the highest and uses RB3. also NO subroutine is used at more than one level. There is no reason, whatsoever, to use different RBs for interrupts at the same IP priority. Erik IP priority: priority as define by the IP (and extensions) SFR(s). NOT the priority of concurrent ints, that is irrelevant in this respect.