--- trunk/PIC/main.c 2007/01/30 22:49:03 22 +++ trunk/PIC/main.c 2007/01/31 12:40:37 27 @@ -4,6 +4,7 @@ //Includes #include #include +#include #include "delay.h" #include "i2c.h" @@ -67,10 +68,9 @@ bit global_comm_error; unsigned char global_comm_slipstate; -unsigned char global_comm_currentrate; +unsigned char global_comm_baudrate; -unsigned char global_lcd_buffer[20]; -unsigned char global_lcd_index; +unsigned char global_lcd_buffer[2][BUFFERLEN]; bit global_led_0; @@ -90,6 +90,9 @@ { unsigned char data = RCREG; + if (global_comm_length == BUFFERLEN) //avoid buffer overrun + global_comm_slipstate == SlipError; + switch (global_comm_slipstate) { case SlipNormal: @@ -145,7 +148,6 @@ //timer overflow ca hvert sekund void timer1_interrupt(void) { - RB2 = !RB2; TMR1H = 0xEF; TMR1L = 0xFF; } @@ -173,6 +175,7 @@ /////////////////////////////////////////////////////////////////// // Slip funktioner + void slip_reset(void) { global_comm_error = 0; @@ -220,13 +223,13 @@ break; case TSwitch2: if (cmd == CmdRead) - global_comm_buffer[1] = RA4; + global_comm_buffer[1] = !RA4; else global_comm_error = 1; break; case TSwitch3: if (cmd == CmdRead) - global_comm_buffer[1] = RB0; + global_comm_buffer[1] = !RB0; else global_comm_error = 1; break; @@ -253,7 +256,10 @@ { //we can only handle 1200,2400,9600,19200 if (data == 0 || data == 1 || data == 3 || data == 4) + { global_reset_baudrate = 1; + global_comm_baudrate = data; + } else global_comm_error = 1; } @@ -312,7 +318,7 @@ } /////////////////////////////////////////////////////////////////// -// Gennerelle funktioner +// init funktioner void interrupt_init(void) { @@ -433,6 +439,10 @@ TMR1ON = 1; } +/////////////////////////////////////////////////////////////////// +// Gennerelle funktioner + + char ReadTemp(void) { char temp; @@ -445,6 +455,60 @@ } + +void update_lcd(void) +{ + static char current_row = 0; + static char current_char = 0; + + if ( current_char >= BUFFERLEN || global_lcd_buffer[current_row][current_char] == 0 ) + { + current_row++; + current_char = 0; + lcd_goto(0x40); + } + + if (current_row >= 2) + { + sprintf(global_lcd_buffer[1], "T=%02d, P=%04d", global_temp, (global_potmeter_hi<<8) | global_potmeter_lo); + lcd_goto(0x00); + current_row = 0; + } + + lcd_putch(global_lcd_buffer[current_row][current_char]); + current_char++; +} + +void reset_baudrate(void) +{ + SPEN = 0; //disable serial port + + //set baudrate generator, i henhold til side 171 af PIC18F452 dokumentationen + switch (global_comm_baudrate) + { + case Baud1200: + SPBRG = 207; + strcpy(global_lcd_buffer[0],"Baud=1200 "); + break; + case Baud2400: + SPBRG = 103; + strcpy(global_lcd_buffer[0],"Baud=2400 "); + break; + case Baud9600: + SPBRG = 25; + strcpy(global_lcd_buffer[0],"Baud=9600 "); + break; + case Baud19200: + SPBRG = 12; + strcpy(global_lcd_buffer[0],"Baud=19200"); + break; + default: + strcpy(global_lcd_buffer[0],"Baud=9600 "); + SPBRG = 25; // this should not be possible, but default to 9600 anyway + } + SPEN = 1; // enable the serial port again +} + /////////////////////////////////////////////////////////////////// //Main @@ -461,12 +525,13 @@ slip_reset(); //take SLIP FSM into normal state - global_comm_currentrate = Baud9600; //default baudrate = 9600 + global_comm_baudrate = Baud9600; //default baudrate = 9600 (allready set in serial_init) global_reset_baudrate = 0; // initialisation completed and we are ready to recieve commands - enable serial reception CREN = 1; + strcpy(global_lcd_buffer[0], "Baud=9600 "); while (1) { if (global_comm_ready == 1) @@ -478,10 +543,12 @@ if ( global_reset_baudrate == 1) { + reset_baudrate(); + global_reset_baudrate = 0; } RB1 = global_led_0; - // RB2 = global_led_1; + RB2 = global_led_1; RB3 = global_led_2; global_temp = ReadTemp(); @@ -494,6 +561,8 @@ global_potmeter_lo = ADRESL; GODONE = 1; //start ny konverering } + + update_lcd(); } }