|
|
|
|
|
|
FORUM: Pic Micro
Tutto quanto riguarda questi microprocessori... progetti, suggerimenti, aiuti, discussioni...ecc |
|
|
Autore |
Messaggio |
opzioni |
Atex
postato il: 15.01.2022, alle ore 14:10 |
trasmissione seriale UART
Buongiorno a tutti, premetto che non sono esperto di programmazione dei PIC e infatti ho un problema su cui mi sto rompendo la testa senza arrivare a nulla. In pratica riesco bene a inviare un solo carattere al PIC tramite il terminale mikroC Pro, e lo vedo perchè invio il carattere al display LCD collegato al PIC. Di seguito ho messo il codice completo che ho scritto per inviare 5 caratteri al display, che però non funziona (sul display non arriva niente).
Se qualcuno può aiutarmi a capire dove sbaglio:
#define primo 0
#define num_caratteri 5
sbit LCD_RS at RD2_bit; // connessione LCD_PIC
sbit LCD_EN at RD3_bit; // connessione LCD_PIC
sbit LCD_D4 at RD4_bit; // connessione LCD_PIC
sbit LCD_D5 at RD5_bit; // connessione LCD_PIC
sbit LCD_D6 at RD6_bit; // connessione LCD_PIC
sbit LCD_D7 at RD7_bit; // connessione LCD_PIC
sbit LCD_RS_Direction at TRISD2_bit; // configurazione dei pin
sbit LCD_EN_Direction at TRISD3_bit; // configurazione dei pin
sbit LCD_D4_Direction at TRISD4_bit; // configurazione dei pin
sbit LCD_D5_Direction at TRISD5_bit; // configurazione dei pin
sbit LCD_D6_Direction at TRISD6_bit; // configurazione dei pin
sbit LCD_D7_Direction at TRISD7_bit; // configurazione dei pin
char buf[5], my_buf[5], i;
void main() {
Lcd_Init(); // inizializzazione LCD
Lcd_Cmd(_LCD_CLEAR); // pulizia schermo
Lcd_Cmd(_LCD_CURSOR_OFF); // cursore invisibile
TRISC = 0xBF; // pin RC6 = 0 TX, pin RC7 = 1 RX, gli altri pin = 1 per sicurezza
TRISD = 0x00; // PORTD output, RD0 e RD1 collegati a massa
UART1_Init(9600); // inizializzazione comunicazione seriale asincrona a 9600 bit /sec
Delay_ms(100);
i = 0;
while(1) {
if(UART1_Data_Ready()) {
buf[i] = UART1_Read();
i++;
}
}
memcpy(my_buf, buf + primo, num_caratteri);
my_buf[num_caratteri] = '\0';
Lcd_Out(1, 3, my_buf);
}
|
|
double_wrap
postato il: 15.01.2022, alle ore 14:29 |
forse sbaglio io, ma sembra che dal ciclo WHILE(1) non si esca mai e che non si raggiunga mai l'istruzione LcD_Out
while(1) {
if(UART1_Data_Ready()) {
buf[i] = UART1_Read();
i++;
}
}
"se peso cado, ma se cado non peso"
adamatj.altervista.org |
|
Atex
postato il: 15.01.2022, alle ore 14:53 |
si è vero, quindi dovrebbe essere così, è corretto ?
while(1) {
if(UART1_Data_Ready()) {
buf[i] = UART1_Read();
i++;
}
memcpy(my_buf, buf + primo, num_caratteri);
my_buf[num_caratteri] = ' ';
Lcd_Out(1, 3, my_buf);
}
} |
| |