aasimzee
Junior Member level 1
Here is the code i am using to read string and display it on lcd but its not working, i recieve the data and lcd starts printing last character continiously. can u help ??
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 #include <stdio.h> #include <stdlib.h> #include "header.h" #define BAUDRATE 9600 void InitUART(void); void SendByteSerially(unsigned char); unsigned char ReceiveByteSerially(void); void SendStringSerially(const unsigned char*); void lcdcmd(unsigned char value); void lcddata(unsigned char value); void lcdready(void); #define ldata PORTB #define rs PORTCbits.RC0 #define rw PORTCbits.RC1 #define en PORTCbits.RC2 #define busy PORTBbits.RB7 volatile char val; int index; int i,j; char data[5]; int z; char key[] = "apple"; char uart_buff[21]; void main(void) { TRISB=0; TRISC=0; TRISA=1; unsigned char cmd[]={0x38,0x0E,0x01,0x06,0x80}; unsigned char z=0; for(z=0; z<25; z++) { __delay_ms(15); } for(z=0; z<6; z++) { lcdcmd(cmd[z]); lcdready(); } InitUART(); // Intialize UART GIE = 1; // Enable global interrupts PEIE = 1; // Enable Peripheral Interrupts while(1) { for(i=0;i<22;i++) { lcddata(uart_buff[i]); lcdready(); } } } void SendByteSerially(unsigned char Byte) // Writes a character to the serial port { while(!TXIF); // wait for previous transmission to finish TXREG = Byte; TXIF=0; } unsigned char ReceiveByteSerially(void) // Reads a character from the serial port { if(OERR) // If over run error, then reset the receiver { CREN = 0; CREN = 1; } while(!RCIF); // Wait for transmission to receive return RCREG; } void SendStringSerially(const unsigned char* st) { while(*st) SendByteSerially(*st++); } void InitUART(void) { TRISC6 = 0; // TX Pin TRISC7 = 1; // RX Pin SPBRG = ((_XTAL_FREQ/16)/BAUDRATE) - 1; BRGH = 1; // Fast baudrate SYNC = 0; // Asynchronous SPEN = 1; // Enable serial port pins CREN = 1; // Enable reception SREN = 0; // No effect TXIE = 0; // Disable tx interrupts RCIE = 1; // Enable rx interrupts TX9 = 0; // 8-bit transmission RX9 = 0; // 8-bit reception TXEN = 1; // Reset transmitter } void lcdcmd(unsigned char value) { ldata=value; rs=0; rw=0; en=1; __delay_ms(3); en=0; } void lcddata(unsigned char value) { ldata=value; rs=1; rw=0; en=1; __delay_ms(3); en=0; } void lcdready(void) { TRISB=0xFF; rs=0; rw=1; do { en=1; __delay_ms(3); en=0; }while(busy==1); TRISB=0; } void interrupt isr() { for(i=0;i<20;i++) { if (PIR1bits.RCIF) { uart_buff[i] = RCREG; } } uart_buff[i+1] ='\0'; }
Last edited by a moderator: