Fórum témák

» Több friss téma
Fórum » CCS PIC Compiler
 
Témaindító: lagyna, idő: Ápr 3, 2006
Lapozás: OK   117 / 117
(#) Lamprologus hozzászólása Jan 10, 2019 /
 
Hogyan tudnám az fprintf-sort úgy "paraméterezni", hogy másik UART protra küldje ki az adatokat.
Magyarul van két nextion kijelző egy PIC-en és néha az egyikre néha a másikra kéne küldeni az adatokat, attól függően melyikről érkezett be adat.

  1. #pin_select U1TX=PIN_D1
  2. #pin_select U1RX=PIN_D2
  3. #use rs232(UART1, baud=115200, RECEIVE_BUFFER=0, TRANSMIT_BUFFER=0, stream=UART_NEXTION)
  4. ...
  5. fprintf(UART_NEXTION,"t10.txt=\"%s\"%c%c%c",Uzem[Erzekelo_hiba],0xFF, 0xFF, 0xFF);
(#) Hp41C válasza Lamprologus hozzászólására (») Jan 10, 2019 /
 
(#) Lucifer válasza Lamprologus hozzászólására (») Jan 10, 2019 /
 
Az fprintf első paramétere a stream (esetedben UART_NEXTION). Ha ide a másik UART streamet adod át akkor oda fog printelni.
(#) Lamprologus válasza Lucifer hozzászólására (») Jan 10, 2019 /
 
Próbáltam, de a UART_NEXTION helyén változót nem fogad el, csak olyan értéket fogad el amit az #use rs232-nél adok meg.
(#) Lamprologus válasza Hp41C hozzászólására (») Jan 10, 2019 /
 
  1. #USE RS232 (BAUD = 9600, XMIT = PIN_B0, RCV = PIN_B1)
  2.  
  3. void put_to_a(char c) {
  4.    put(c);
  5. }
  6.  
  7. char get_from_a(void) {
  8.    return(getc());
  9. }
  10.  
  11. #USE RS232 (BAUD = 9600, XMIT = PIN_B2, RCV = PIN_B3)
  12.  
  13. void put_to_b(char b) {
  14.    putc(c);
  15. }
  16.  
  17. void main(void) {
  18.    char c;
  19.    
  20.    put_to_a("Online\n\r");
  21.    put_to_b("Online\n\r");
  22.    
  23.    while(TRUE) {
  24.       c = get_from_a();
  25.      
  26.       put_to_b(c);
  27.       put_to_a(c);
  28.    }
  29. }


Ha jól értelmezem akkor az első #use rs232 ... sor utáni függvények a B0, B1 lábakat használják, a második #use rs232 ... után a B2, B3-at, függetlenül attól honnan vannak meghívva?
A főciklusba, ha beteszek egy putc(c)-t az hova küldi az adatot? Az utolsó #use rs232-t veszi figyelembe?
Bááár ... nem tudom ez megoldás-e az én problémámra.
A hozzászólás módosítva: Jan 10, 2019
(#) Hp41C válasza Lamprologus hozzászólására (») Jan 10, 2019 /
 
Sajnos csak a kérdést olvastad el, a megoldást nem. Pedig ott van alatta...
  1. #USE RS232 (BAUD = 9600, XMIT = PIN_B0, RCV = PIN_B1, STREAM = COM_A)
  2. #USE RS232 (BAUD = 9600, XMIT = PIN_B2, RCV = PIN_B3, STREAM = COM_B)
  3.  
  4. void main(void) {
  5.    char c;
  6.    
  7.    fprintf(COM_A, "Online\n\r");
  8.    fprintf(COM_B, "Online\n\r");
  9.    
  10.    while(TRUE) {
  11.       c = fgetc(COM_A);
  12.      
  13.       fputc(c, COM_A);
  14.       fputc(c, COM_B);
  15.    }
  16. }
(#) Lamprologus válasza Hp41C hozzászólására (») Jan 10, 2019 /
 
Bocsi, lehet én fogalmaztam pontatlanul, vagy valamit nem veszek észre a válaszodban!

Van egy PIC-en két Nextion kijelző. A feladat az lenne, ha az A kijelzőn nyomok egy gombot akkor oda küldje vissza az adatokat, ha a B-n akkor oda. 10-20 adat lenne ablakonként, 15-20 ablak, és nem akarom kétszer leírni szinte ugyan azt a programba, azért lenne jó ha egy paraméter ( Pl a stream, csak az sajna nem működik nekem) átírásával a másik porta küldené ki.
(#) Hp41C válasza Lamprologus hozzászólására (») Jan 10, 2019 /
 
Ha nem lehet a stream nevét átadni paraméterként a fprintf -nek, akkor csak azt tudom elképzelni, hogy a jelenlegi fprintf helyett egy saját függvényt használni, ami változó(k) értéke alapján azt a fprintf -(eke)t hajtja végre, amelyik azt az uart -o(ka)t használja, amelyikre aktuálisan a Nextion(ok) kapcsolódik (kapcsolódnak).
Következő: »»   117 / 117
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu