??? 05/08/08 03:36 Read: times |
#154559 - the final result: Responding to: ???'s previous message |
Will do a final test in hardware tomorrow since it is 11:30PM.....LOL
Keil simulation shows that its 100% functional, basically I have an address, and two data bytes for command control. It is then framed and sent via RS232 to the slave device. Very interesting problem, and I really enjoyed working through it.....(everyday stuff) I was thinking of submitting the lookup function to the code library since it seems there is nothing out there than can take a byte, break it in half, convert it to ASCII and send it serially without using SPRINTF() functions. Would it be worth it? Either way I'm happy and here are the final results, once again, thank you to everyone.....:)....: void RS232_Write(unsigned char reg, unsigned char dat0, unsigned char dat1) { unsigned char REG_H, REG_L, DAT1_H, DAT1_L, DAT2_H, DAT2_L, CHECKSUM_H, CHECKSUM_L, CHECKSUM_T, HexValue ; REG_H = (reg & 0xF0); // Mask the Upper Nibble HexValue = REG_H; HexValue = Hex2Ascii(HexValue); REG_H = HexValue; REG_L = (reg & 0x0F ); // Mask the Lower Nibble HexValue = REG_L; HexValue = Hex2Ascii(HexValue); REG_L = HexValue; DAT1_H = (dat0 & 0xF0 ); // Mask the Upper Nibble HexValue = DAT1_H; HexValue = Hex2Ascii(HexValue); DAT1_H = HexValue; DAT1_L = (dat0 & 0x0F ); // Mask the Lower Nibble HexValue = DAT1_L; HexValue = Hex2Ascii(HexValue); DAT1_L = HexValue; DAT2_H = (dat1 & 0xF0 ); // Mask the Upper Nibble HexValue = DAT2_H; HexValue = Hex2Ascii(HexValue); DAT2_H = HexValue; DAT2_L = (dat1 & 0x0F ); // Mask the Lower Nibble HexValue = DAT2_L; HexValue = Hex2Ascii(HexValue); DAT2_L = HexValue; CHECKSUM_T = (cam_header + cam_ID_H + cam_ID_L + REG_H + REG_L + DAT1_H + DAT1_L + DAT2_H + DAT2_L); CHECKSUM_H = (CHECKSUM_T & 0xF0 ); HexValue = CHECKSUM_H; HexValue = Hex2Ascii(HexValue); CHECKSUM_H = HexValue; CHECKSUM_L = (CHECKSUM_T & 0x0F ); HexValue = CHECKSUM_L; HexValue = Hex2Ascii(HexValue); CHECKSUM_L = HexValue; //*********************************************************************** uart_init(); uart_transmit(cam_header); // Header uart_transmit(cam_ID_H); // ID H uart_transmit(cam_ID_L); // ID L uart_transmit(REG_H); // Register H uart_transmit(REG_L); // Register L uart_transmit(DAT1_H); // Data 1 H uart_transmit(DAT1_L); // Data 1 L uart_transmit(DAT2_H); // Data 2 H uart_transmit(DAT2_L); // Data 2 L uart_transmit(CHECKSUM_H); // Send calculated checksum 1 uart_transmit(CHECKSUM_L); // Send calculated checksum 2 //*********************************************************************** } unsigned char Hex2Ascii(unsigned char HexValue) { switch (HexValue) { case 0x00: return (HexValue + 0x30); break; // ASCII 0 0x30 case 0x01: return (HexValue + 0x30); break; // ASCII 1 0x31 case 0x02: return (HexValue + 0x30); break; // ASCII 2 0x32 case 0x03: return (HexValue + 0x30); break; // ASCII 3 0x33 case 0x04: return (HexValue + 0x30); break; // ASCII 4 0x34 case 0x05: return (HexValue + 0x30); break; // ASCII 5 0x35 case 0x06: return (HexValue + 0x30); break; // ASCII 6 0x36 case 0x07: return (HexValue + 0x30); break; // ASCII 7 0x37 case 0x08: return (HexValue + 0x30); break; // ASCII 8 0x38 case 0x09: return (HexValue + 0x30); break; // ASCII 9 0x39 case 0x0A: return (HexValue + 0x37); break; // ASCII A 0x41 case 0x0B: return (HexValue + 0x37); break; // ASCII B 0x42 case 0x0C: return (HexValue + 0x37); break; // ASCII C 0x43 case 0x0D: return (HexValue + 0x37); break; // ASCII D 0x44 case 0x0E: return (HexValue + 0x37); break; // ASCII E 0x45 case 0x0F: return (HexValue + 0x37); break; // ASCII F 0x46 //********************************************* case 0x10: return (HexValue + 0x21); break; // ASCII 1 0x31 case 0x20: return (HexValue + 0x12); break; // ASCII 2 0x32 case 0x30: return (HexValue + 0x03); break; // ASCII 3 0x33 case 0x40: return (HexValue - 0x0C); break; // ASCII 4 0x34 case 0x50: return (HexValue - 0x1B); break; // ASCII 5 0x35 case 0x60: return (HexValue - 0x2A); break; // ASCII 6 0x36 case 0x70: return (HexValue - 0x39); break; // ASCII 7 0x37 case 0x80: return (HexValue - 0x48); break; // ASCII 8 0x38 case 0x90: return (HexValue - 0x57); break; // ASCII 9 0x39 case 0xA0: return (HexValue - 0x5F); break; // ASCII A 0x41 case 0xB0: return (HexValue - 0x6E); break; // ASCII B 0x42 case 0xC0: return (HexValue - 0x7D); break; // ASCII C 0x43 case 0xD0: return (HexValue - 0x8C); break; // ASCII D 0x44 case 0xE0: return (HexValue - 0x9B); break; // ASCII E 0x45 case 0xF0: return (HexValue - 0xAA); break; // ASCII F 0x46 default: break; } } |