--- trunk/Embedded/main.lst 2007/11/28 17:00:45 82 +++ trunk/Embedded/main.lst 2007/12/03 14:24:50 137 @@ -1,56 +1,163 @@ 1: #include 2: #include 3: #include - 4: - 5: #include "lcd.h" - 6: + 4: #include "lcd.h" + 5: #include "Delay.h" + 6: // Delay.h is included inside lcd.c 7: - 8: void rs232_init(void) - 9: { - 10: SPEN = 0; // Serial Port Enable Bit... 0 = disabled - 11: TRISC6 = 0; - 12: TRISC7 = 1; - 13: SYNC = 0; // SYNC switches between async(0) and sync(1) mode. - 14: SPBRG = 25; - 15: TXSTA = 0x24; - 16: RCSTA = 0x90; - 17: SPEN = 1; - 18: } - 19: - 20: void interrupt_init(void) - 21: { - 22: // Assumes that all interrupts default is 0 - 23: PEIE = 1; - 24: GIE = 1; - 25: RCIE = 1; - 26: } - 27: - 28: void pic18_io_init(void) - 29: { - 30: TRISA0 = 1; - 31: TRISB1 = 1; - 32: TRISB2 = 1; - 33: TRISB3 = 1; - 34: TRISB4 = 1; - 35: } - 36: - 37: void interrupt_recieve_handler(void) - 38: { - 39: // Handle recieve inputs... - 40: } - 41: - 42: void interrupt interrupt_handler(void) - 43: { - 44: if(RCIF == 1) - 45: { - 46: interrupt_recieve_handler(); - 47: RCIF = 0; - 48: } - 49: } - 50: - 51: - 52: void main() - 53: { - 54: rs232_init(); - 55: pic18_io_init(); - 56: } + 8: #define LCD_LENGTH 16 + 9: #define LCD_ROWS 2 + 10: + 11: + 12: unsigned char global_Pot_Hi, global_Pot_Lo; + 13: unsigned char global_LCD_Buffer[LCD_ROWS][LCD_LENGTH]; + 14: unsigned char global_serial_data; + 15: unsigned char global_serial_recieve_buffer[LCD_LENGTH]; + 16: bit global_recieve_done = 0; + 17: int global_serial_byte_counter = 0; + 18: + 19: void serial_recieved(void); + 20: + 21: // Nicked from H7 + 22: void ad_init(void) + 23: { + 24: // AD Conversion clock + 25: ADCS0 = 0; + 26: ADCS1 = 0; + 27: ADCS2 = 0; + 28: + 29: //Select AN0/RA0 for AD source + 30: // In this (000) setup, it's only RA0/AN0 that does ad convertion. + 31: CHS0=0; + 32: CHS1=0; + 33: CHS2=0; + 34: + 35: //Only AN0 is selected for AD and with Vdd/Vss as limits + 36: PCFG0=0; + 37: PCFG1=1; + 38: PCFG2=1; + 39: PCFG3=1; + 40: + 41: //Result is left justified + 42: ADFM=0; + 43: + 44: //Fire up for A/D converter module + 45: ADON=1; + 46: } + 47: + 48: void rs232_init(void) + 49: { + 50: SPEN = 0; // Serial Port Enable Bit... 0 = disabled + 51: TRISC6 = 0; + 52: TRISC7 = 1; + 53: + 54: SPBRG = 207; // 1200 baud rate... 25 = 9600 + 55: // x = (Fosc / (16*[baud rate]) )-1 + 56: TXSTA = 0x24; // Enables BRGH and TXEN inthe TXSTA register + 57: RCSTA = 0x90; // 0x90 enables SPEN and CREN in the RCSTA register + 58: } + 59: + 60: void interrupt_init(void) + 61: { + 62: // Assumes that all interrupts default is 0 + 63: PEIE = 1; + 64: GIE = 1; + 65: RCIE = 1; // Recieve interrupt enable. + 66: IPEN = 0; // Nfo interrupt priority + 67: TXIE = 0; // Serial interrupt enabled + 68: } + 69: + 70: void pic18_io_init(void) + 71: { + 72: TRISA0 = 1; // analog input + 73: TRISB1 = 1; // TRISB1-4 Digital input + 74: TRISB2 = 1; + 75: TRISB3 = 1; + 76: TRISB4 = 1; + 77: } + 78: + 79: + 80: + 81: void interrupt interrupt_handler(void) + 82: { + 83: // Finds out what interrupt have been trigged, and starts the respective function. + 84: if(RCIF == 1) // Serial recieve interrupt + 85: { + 86: serial_recieved(); + 87: RCIF = 0; + 88: } + 89: } + 90: + 91: + 92: + 93: void serial_send(void) + 94: { + 95: int i; + 96: char tosend[3]; + 97: char data; + 98: sprintf(tosend,"%s", "at\r"); + 99: for(i = 0; i < 3; i++) + 100: { + 101: data = tosend[i]; + 102: TXREG = data; + 103: while(TRMT==0) + 104: DelayMs(1000); + 105: } + 106: } + 107: + 108: void serial_recieved(void) + 109: { + 110: char data, saved_data[LCD_LENGTH]; + 111: + 112: data = RCREG; + 113: + 114: global_serial_recieve_buffer[global_serial_byte_counter] = data; + 115: if(data == '\r') + 116: { + 117: global_recieve_done = 1; + 118: global_serial_byte_counter = 0; + 119: } + 120: else + 121: { + 122: global_serial_byte_counter++; + 123: } + 124: + 125: } + 126: + 127: void main() + 128: { + 129: ///////////////////////////////////////////// + 130: // Running Init's + 131: + 132: // Running init for various components. + 133: //AD_init(); + 134: ad_init(); + 135: rs232_init(); + 136: pic18_io_init(); + 137: lcd_init(0); + 138: interrupt_init(); + 139: + 140: ///////////////////////////////////////////// + 141: // Main loop + 142: + 143: while(1) + 144: { + 145: DelayMs(3000); + 146: serial_send(); + 147: // Checking if A/D convertion is done, and save the data in global_Pot_?? + 148: if(GODONE==0) + 149: { + 150: global_Pot_Hi = ADRESH; + 151: global_Pot_Lo = ADRESL; + 152: GODONE = 1; + 153: } + 154: + 155: if( global_recieve_done == 1 ) + 156: { + 157: lcd_clear(); + 158: lcd_goto(0x00); + 159: lcd_puts(global_serial_recieve_buffer); + 160: } + 161: //update_lcd(); + 162: } + 163: }