Sziasztok !
Van egy PIC18F67J50 mikrokontroller és az lenne a feladata ,hogy egy transzparens WiFi-ről UART-on keresztül fogadna például 11 karaktert egy mobil telefonszámot lényegében.
Amit használok fejlesztő rendszert az MikroC Pro for PIC.
A fejlesztő rendszerben van egy függvény UART1 _Read_Text(telszam ,"OK",11); de nem műkődik.A baud rata 9600bps, 8bit,no parity ,1stop bit. A függvény argumentumai : telszam a tömb ,amiben tárolnám a telefonszámot. Az OK egy határoló delimiter eddig olvassa az UART1_Read_Text(a bajt folyamot, 11 pedig ,hogy 11 karaktert kell olvasni). Megszakítással meg lehet ezt oldani ,a kérdés ,hogyan? Hogyan tudok olvasni több bájtot UARTON keresztül? A program C nyelveben íródott A Proteus-al szimuláltam küldtem "06204001234OK" bájt sorozatot és nem működik.
Előre is köszönöm a segítséget mindenkinek !
Üdv : Lengyel József.
MEGOLDÁS:
A UART_Read_Text(pointer tömb, delimiter ,karakterek szama); függvényben a karakterek számát ' ' SPACE karaktert "írtam be." A lényege ,hogy a MIkroC pro for PIC-ben az UART_Read_Text(pointer tomb ,delimiter ,' ' ); esetemben ilyen alakú :
char *szerviz[16];
void main()
{
UART1_Init(9600);
do{
if(UART1_Data_ready() == 1)
{
UART1_Read_Text(szerviz ,"OK" , ' ' );// Az OK delimiterig olvas karaktereket a soros portról. Ez működik így most.
UART1_Write(0x0A);
UART1_Write(0x0D);
UART1_Write_Text(szerviz);
UART1_Write(0x0A);
UART1_Write(0x0D);
}
}while(1);
}
Mindenkinek köszönöm a segítséget ! :) Üdv : József Lengyel
Hello!
Ezt bontsad részfeladatokra, mert túl sok benne az ismeretlen.
Első lépésként ismerd meg az UART és az UART rutinok működését.
Ha elakadsz, akkor ennek kapcsán tegyél fel kérdést.
Ha ezzel megvagy, utána jöhet a többi.
Üdv
0
Szia !
Csatolok engedelmeddel egy részletet a MikroC pro for PIC helpből .
void UARTx_Read_Text(char *Output, char *Delimiter, char Attempts); ami érdekes ,hogy a karakterek száma előtt ott van a char változó tipus (?) hogy lehet char ?
Reads characters received via UART until the delimiter sequence is detected. The read sequence is stored in the parameter output; delimiter sequence is stored in the parameter delimiter.
This is a blocking call: the delimiter sequence is expected, otherwise the procedure exits (if the delimiter is not found).
Parameters :
És egy minta forráskód 4800 bps :
UART1_Init(4800);
// initialize UART1 module Delay_ms(100);
while (1) {
if (UART1_Data_Ready() == 1)
{ // if data is received UART1_Read_Text(output, "OK", 10); // reads text until 'OK' is found
UART1_Write_Text(output); // sends back text }
}
A lényeg ,hogy nem működik . A PIC konfigkja jó mert azt próbáltam karakter kiíratását soros monitorra az működik.
Üdv : József Lengyel
0
Szia József!
Assembler rutint be tudsz szúrni?
Üdv: Jácint
0
Szia Jaca !
Igen tudok beszúrni assembly blokkot. Arra jutottam idáig ,hogy a tömb amiben menti a telefonszámot pointer tömb char *szerviz[16]; .Így kellet megadnom a tömb típusát. Most működik a dolog. Amit még csináltam ,az hogy ahogy korábban írtam a függvény prototipusában a karakterek száma char típusú (?) nem tudom miért ez a típusa a krakterek számának ,(?) de azt úgy csináltam meg ,hogy ' ' SPACE karaktert adtam meg neki. És ami érdekes ,hogy most úgy működik ,ahogy kell.
Üdv : Józsi
0
Szia!
A tömb az mindig származtatott típus, nem alap adatípus. Ergo pointer mutat az első elemére.
Kicsit szemléletesebben:
Az, hogy a karakterek száma char típusként van átadva, az attól függ, hogy mi van a hívott függvényen belül. Nézd meg.
Üdv,
KN
0
Szia !
Köszönöm szépen a tömbös magyarázatot.Szemléletes ,nagyon jó. köszönöm !
Az UART_Read_Text (pointer tömb , delimiter , karakterek szama)
gyári függvény belsejét ,tartalmát meg fogom nézni ,hogy a karakterek száma miért char típusú ?
Az ember azt gondolná ,hogy ez unsigned short típusú kellene ,hogy legyen például,... , de nem. Megnézem ,hogy miért van ez így .
Még egyszer nagyon szépen köszönöm !
Üdv : József Lengyel
0
Sziasztok!
Ez a C azon tulajdonsága miatt van, hogy az adattípusok mérete mindig igazodik az adott hardverhez, így pl.: a short a mikroc-ben 8bit de a pc-n már 16 bit, A char pedig mindig minden rendszeren 8bit, így ha 8 bites számra van szüksége egy c programozó a char-t választja. A másik dolog hogy short int típust szinte soha nem választ az ember mert az int csak 3 betű és lustaság félegészség![smiley smiley](//cdn.ckeditor.com/4.5.4/full-all/plugins/smiley/images/regular_smile.png)
Üdv,
Oszi
0
Szia ,Osz11 !
Köszönöm szépen a magyarázatot ! :) Arra emlékeztem ,hogy az int tipus az implementáció függő de ez a char magyarázat ez nagyon jó amit megosztottál.Megint tanultam valamit.
Üdv : József Lengyel
0