1: #include 2: #include 3: #include 4: #include "lcd.h" 5: #include "Delay.h" 6: // Delay.h is included inside lcd.c 7: 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: }