contest Δημοσ. 8 Φεβρουαρίου 2010 Δημοσ. 8 Φεβρουαρίου 2010 Γεια σας παιδια, Η μνημη του PC αποτελειται απο καταχωρητές σωστά? 8bit τους? 1 byte? Μηπως γνωρίζει κανεις αν μπορούμε να αποθηκευσουμε μια μεταβλητη (int x;) που δημιουργούμε σε συγκεκριμενη θεση μνημης του PC????? ή μεσω βέλους * ή διευθυνσης & να ελεξουμε καποιον καταχωρητή? ποιές εντολες χρησιμοποιούνται για τον τετοιου ιδους στον C++ Builder????
djpaul1963 Δημοσ. 8 Φεβρουαρίου 2010 Δημοσ. 8 Φεβρουαρίου 2010 Με συγχωρείς αλλά δεν βγαίνει κανένα νόημα από το μήνυμα σου. Είναι γεμάτο από συντακτικά, ορθογραφικά και νοηματικά λάθη. Οι καταχωρητές είναι θέσεις μνήμης μεν, αλλά όχι στην RAM. Βρίσκονται μέσα στην CPU και χρηιμεύουν κυρίως για πράξεις και λιγότερο για προσωρινή αποθήκευση. Το εύρος τους δεν είναι 8 bit (εκτός κι αν αναφέρεσαι στον 8086/8088 ή σε οποιονδήποτε άλλο 8bit επεξεργαστή). Οι σύγχρονοι επεξεργαστές έχουν έυρος 32 και 64 bit (οι περισσότεροι πλέον 64). Αν απάντησα σε άσχετα πράγματα από αυτά που χρειαζόσουν, γίνει λίγο πιο κατανοητός και συνεχίζουμε.
contest Δημοσ. 8 Φεβρουαρίου 2010 Μέλος Δημοσ. 8 Φεβρουαρίου 2010 ............. Καθε μεταβλητη οποιουδηποτε προγραμματος γραμμένο στη γλώσσα προγραμματισμου C++ καταλαμβάνει καποιον χωρο στην μνήμη του PC. Θα ηθελα να ρωτησω , αν μπορω να αποθηκευσω μια μεταβλητη σε μια θεση μνημης που θέλω εγω (π.χ. την μεταβλητη χ τυπου int στην θεση μνημης 0χ0378)???
Evgenios1 Δημοσ. 8 Φεβρουαρίου 2010 Δημοσ. 8 Φεβρουαρίου 2010 Απλα >int *a = (int*)0x00000000; Υγ: Ειναι εικονικη διευθυνση μνημης.
Directx Δημοσ. 8 Φεβρουαρίου 2010 Δημοσ. 8 Φεβρουαρίου 2010 Γεια σας παιδια, Η μνημη του PC αποτελειται απο καταχωρητές σωστά? 8bit τους? 1 byte? Μηπως γνωρίζει κανεις αν μπορούμε να αποθηκευσουμε μια μεταβλητη (int x;) που δημιουργούμε σε συγκεκριμενη θεση μνημης του PC????? ή μεσω βέλους * ή διευθυνσης & να ελεξουμε καποιον καταχωρητή? ποιές εντολες χρησιμοποιούνται για τον τετοιου ιδους στον C++ Builder???? Παλαιότερα μπορούσες να ζητήσεις από τον Compiler την αποθήκευση μιας τιμής σε κάποιον (δεν όριζες σε ποίον..) καταχωρητή δηλώνοντας την ως register. Για παράδειγμα: > register int nValue = 1; Σήμερα όμως αυτή η δήλωση δεν είναι δεσμευτική για τον Compiler ο οποίος μπορεί να την αγνοήσει στην προσπάθεια του να βελτιστοποιήσει όσο το δυνατόν περισσότερο τον παραγόμενο κώδικα. Αν θες οπωσδήποτε ανάθεση σε CPU register τότε θα πρέπει να πας σε Assembly (ο C++ Builder 6.0 έρχεται με ενσωματωμένο 32bit assembler). Για παράδειγμα δες το: > int MyValue = 0; _asm mov EAX, 1 _asm mov MyValue, EAX ShowMessage(MyValue); Αλλά καθώς δεν νομίζω ότι θες να μπεις σε «βαθιά» νερά δεν πρόκειται να επεκταθώ - το παράδειγμα είναι απλά για να δεις πως μπορεί να γίνει κάτι τέτοιο σε C++ Builder (_asm και _asm{ } φυσικά) υπάρχουν αρκετά πράματα που θα πρέπει να λάβεις υπόψη σου πριν καταφύγεις σε αυτό!! Καλύτερα λοιπόν, επικεντρώσου στην μελέτη της C/C++ και της VCL προς το παρόν και άσε τους registers και την CPU για αργότερα. Καλή τύχη!
contest Δημοσ. 8 Φεβρουαρίου 2010 Μέλος Δημοσ. 8 Φεβρουαρίου 2010 ευχαριστω πολυ για της απαντησεις..... υπαρχει δηλαδη στον C++ Builder assembler???? δεν το αναφερει στο πληρες ενχειριδιο C++ Builder 6.... με ενδιαφερει γιατι ξερω να προγραμματιζω σε γλώσσα assembly.... Ο απότερος στόχος μου ειναι να μπορέσω να ελέγχω αυτοματισμους μεσω PC και προγράμματος γραμμένο σε C++.....Μεσω σειριακής θύρας ,στα windowsXp που εχω, δεν γίνεται απ' οτι μου εχετε πει, μεσω παράλληλης ? η εστω μεσω θύρας usb????? 1)θελω να στέλνω απλα παλμους 0 και 1 σηματα και 2) να διαβάζω τις προτάσεις του gps (αυτο μπορει να γινει και μεσω προγραμματος το οποιο θα αποθηκεύει τις προτασεις σε αρχειο μορφής txt?
bxenos Δημοσ. 8 Φεβρουαρίου 2010 Δημοσ. 8 Φεβρουαρίου 2010 Ο απότερος στόχος μου ειναι να μπορέσω να ελέγχω αυτοματισμους μεσω PC και προγράμματος γραμμένο σε C++ ολα καλά μέχρι εδώ... .....Μεσω σειριακής θύρας ,στα windowsXp που εχω, δεν γίνεται απ' οτι μου εχετε πει, σχεδόν όλοι με σειριακή δουλεύουν. Αλλά θα χρειαστείς και έναν μικροελενκτή (μικροεπεξεργαστή) των 2ευρω που θα του γράψεις και εκείνου ένα προγραμματάκι (σε C) και θα λαμβάνει τις εντολές μέσω σειριακής και θα τις εκτελεί.Αντίστοιχα θα μπορεί να σου στέλνει στοιχεία στο pc (π.χ. μετρήσεις που θα κάνει). To pc μπορείς να το σβήσεις όταν τελειώσεις και ο μικροελενκτής θα θυμάτε τι του ειχες βάλει να κάνει και ας μην απαντά το pc. μεσω παράλληλης ? γίνεται αλλα είναι για απλοϊκές - φοιτητικές - πρόχειρες λύσεις. Εδω δεν χρειάζεσαι μικροελενκτή, αλλά δεν μπορείς να σβήσεις το pc. η εστω μεσω θύρας usb????? είναι αρκετά πιο πολύπλοκο και θέλει μεγαλύτερο μικροελενκτη. Δεν το συνιστώ για ξεκίνημα. Κάποια στιγμη εκεί θα καταλήξεις... 1)θελω να στέλνω απλα παλμους 0 και 1 σηματα και με σειριακή και με παράλληλη και με usb γίνεται αυτό και 2) να διαβάζω τις προτάσεις του gps (αυτο μπορει να γινει και μεσω προγραμματος το οποιο θα αποθηκεύει τις προτασεις σε αρχειο μορφής txt? τα gps συνήθως συνδέονται σε usb (και έχουν εικονική ψευδοσειριακή) ή σε rs232 και τα δουλευεις απο το pc σαν οποιαδήποτε σειριακή (rs232) συσκευη υγ. ποτε δεν κατάλαβα εφόσον η σειριακή είχε τόσο μεγάλη αποδοχή απο τον κόσμο, γιατί τις καταργούμε για να βάλουμε usb και να τα δουλευουμε σαν εικονικά σειριακά. Η να βάζαν περισσότερα σειριακά στα pc συσκευες (π.χ gps) ή να βάζαν ένα τυποποιημένο πρωτόκολλο επικοινωνίας που να μην βασίζεται στην ψευδο-σειριακή αλλά απ'ευθείας στη usb.
contest Δημοσ. 8 Φεβρουαρίου 2010 Μέλος Δημοσ. 8 Φεβρουαρίου 2010 με μικροελεγκτη δεν γινεται γιατι δεν εχει αρκετη μνήμη....... μπορεις να μου πεις τις εντολές που θα χρησιμοποιήσω σε γλώσσα C++ Builder για την αποστολή των δεδομένων και την είδοδο τους στο πρόγραμμα απο την παράλληλη θύρα του PC???????????
contest Δημοσ. 8 Φεβρουαρίου 2010 Μέλος Δημοσ. 8 Φεβρουαρίου 2010 επισυναπτω και δυο εικονες μηπως σας βοηθήσουν....
bxenos Δημοσ. 9 Φεβρουαρίου 2010 Δημοσ. 9 Φεβρουαρίου 2010 Απ'ευθείας με εντολές I/O σε παράλληλη στα Win32/64 (μετά τα win98/me δηλαδή) δεν επιτρέπετε. Τις κάνει redirect το λειτουργικό σε Spooler. Αρα δεν μπορείς με εύκολο τρόπο να χρησιμοποιήσεις τα CONTROL,DATA . Θα πρέπει να πάρεις δικαιώματα system (system privilledge) για να το κάνεις αυτό. (εκτός αν βρείς έτοιμη βιβλιοθήκη που έχει κάνει άλλος το dirty job). Βέβαια υπάρχει η εύκολη λύση, να στήσεις έναν TextOnly εκτυπωτή και να τυπώνεις χαρακτήρες σ'αυτόν (ανοίγεις το lpt1 σαν αρχείο), οπότε τυπώνεις έναν χαρακτήρα (π.χ. 0x03) και ενεργοποιούνται οι ακίδες data0 και data1. (εγω θα χρησιμοποιούσα την ακίδα data7 σαν σήμα ENABLE για ένα latch 74hc373, ώστε αν στείλουν τα windows αλλαγές γραμμών καί άλλα δικά τους, να μην φτάσουν στα led/rele ή ότι άλλο βάλεις) με μικροελεγκτη δεν γινεται γιατι δεν εχει αρκετη μνήμη....... ποιό δεν γίνεται με μικροελενκτή; Δεν χρειάζεται μνήμη πάνω απο 1Kb ROM/ 256 bytes RAM γι'αυτη τη δουλειά!
contest Δημοσ. 9 Φεβρουαρίου 2010 Μέλος Δημοσ. 9 Φεβρουαρίου 2010 1)πως θα γινει να ειναι αποθηκευμένο το πρόγραμμα στο PC και να δινει εντολες ελέγχου των πορτών του μικροελεγκτή??? 2) δεν χρειάζεται firmware? (ειναι κατι σαν driners? ,δεν το ξερω καλα αυτο) προγραμματιζω μικροελεγκτές PIC και κανω debug τα προγράμματα που γράφω σε assembly μεσω του ολοκληρωμένου περιβάλοντος MPLAB IDE και του bootloader (το firmware) και programmer-debuger ICD2 clone , θα με βοηθησει αυτο πουθενα στην ολη φάση? εχει και C compiler το MPLAB IDE... Βέβαια υπάρχει η εύκολη λύση, να στήσεις έναν TextOnly εκτυπωτή και να τυπώνεις χαρακτήρες σ'αυτόν (ανοίγεις το lpt1 σαν αρχείο), οπότε τυπώνεις έναν χαρακτήρα (π.χ. 0x03) και ενεργοποιούνται οι ακίδες data0 και data1. ωραια, αυτο που ειχα σκεφτει....να δουλεψω με αρχεια μπορεις να κανεις ενα προχειρο-μικρο παράδειγμα? fstream , getch() και τα σχετικα? και πως θα επιλέγω τις εξόδους που θα πάνε τα δεδομένα? επίσης, χρειάζομαι και εξόδους απο αυτην την θύρα?
bxenos Δημοσ. 9 Φεβρουαρίου 2010 Δημοσ. 9 Φεβρουαρίου 2010 1)πως θα γινει να ειναι αποθηκευμένο το πρόγραμμα στο PC και να δινει εντολες ελέγχου των πορτών του μικροελεγκτή??? Θα στέλνει το 0x01 στην σειριακή και το pic με το ελάχιστο firmware που χρειάζεται θα διαβάζει αυτό το byte και θα το βάζει στην πόρτα που θα έχεις επιλέξει (π.χ. porta).Μια πιο πλήρης λύση είναι το pc να στέλνει το "A01" στην σειριακή και το PIC να βάζει το 0χ01 στην PORTA. Αν το pc στείλει "B14", το PIC να βάζει 0χ14 στην PORTB. 2) δεν χρειάζεται firmware? (ειναι κατι σαν driners? ,δεν το ξερω καλα αυτο) μπορείς να χρησιμοποιήσεις το παράδειγμα προγράμματος σε C της microchip απο το δωρεάν πρόγραμμα της Maestro, το οποίο υπάρχει σε C και εσύ θα πρέπει να βάλεις τους ελέγχους (με switch/case) για τα εισερχόμενα "Axx","Bxx" απο την σειριακή και την απόδοση τους στις αντίστοιχες πόρτες του pic.Φυσικά εφόσον μιλάμε για C και δωρεαν παραδείγματα απο microchip, μιλάμε για σειρά pic18f. προγραμματιζω μικροελεγκτές PIC και κανω debug τα προγράμματα που γράφω σε assembly μεσω του ολοκληρωμένου περιβάλοντος MPLAB IDE και του bootloader (το firmware) και programmer-debuger ICD2 clone , θα με βοηθησει αυτο πουθενα στην ολη φάση? εχει και C compiler το MPLAB IDE... Ο C compiler της microchip είναι για pic18f.Οι pic16f δεν ειχαν C αλλά ένα διαστροφικό μπάχαλο. ωραια, αυτο που ειχα σκεφτει....να δουλεψω με αρχεια μπορεις να κανεις ενα προχειρο-μικρο παράδειγμα? fstream , getch() και τα σχετικα? και πως θα επιλέγω τις εξόδους που θα πάνε τα δεδομένα? επίσης, χρειάζομαι και εξόδους απο αυτην την θύρα? > unsigned char readcom(void);//η συνάρτηση που το παράδειγμα έχει για να //επιστρέφει χαρακτηρες απο τη σειριακή θύρα void main(void){ //στο Init θα έχεις κάνει τις πόρτες εξόδους TRISA = 0; TRISB = 0; //init rs232 εδω θα καλέσεις τη συνάρτηση του παραδειγματος για να ενεργοποιηθει η σειριακη while(1){ switch(readcom()){ case 'A': PORTA = getcmd(); break; case 'B': PORTB = getcmd(); break; } } } unsigned char translateHex(unsigned char x){ if(x>='a' && x<='f') return x - 'a' + 10; if(x>='A' && x<='F') return x - 'A' + 10; if(x>='0' && x<='9') return x - '0'; return 0xff;//error } unsigned char getcmd(void){ //delay a little bit so a char from rs232 arrives //eg for 2400 baud, minimun wait should be 1/240sec for each character delay1ms(); return (translateHex(readcom())<<4) | translateHex(readcom()); }
contest Δημοσ. 9 Φεβρουαρίου 2010 Μέλος Δημοσ. 9 Φεβρουαρίου 2010 1) απλα ενα string και θα το μεταφραζει το firmware του PIC??? Μια πιο πλήρης λύση είναι το pc να στέλνει το "A01" στην σειριακή και το PIC να βάζει το 0χ01 στην PORTA. Αν το pc στείλει "B14", το PIC να βάζει 0χ14 στην PORTB. 2) Το Init τι είναι??? οκ τις κανω εξόδους...ετσι κανουμε πρόγραμμα σε C++ για τον έλεγχο PIC και ετσι γίνεται η διαμόρφωση καθε πορτας του ? void main(void){ //στο Init θα έχεις κάνει τις πόρτες εξόδους TRISA = 0; TRISB = 0; 3) μπορύμε να βάλουμε και συνάρτηση σαν όρισμα στην switch??? και εχει ορισμα char την PORTA,PORTB??? while(1){ switch(readcom()){ 4) α)αυτο το κομματι κωδικα ελεγχει αν εγιναν εισοδοι οι πορτες "while(1)" και αν ειναι εισοδοι να δεχεται χαρακτηρα και να δημιουργεί χρονοκαθυστέρηση? β) αν εχουμε εισοδο δεδομένων 4800 Bound Rate πρεπει να κανουμε ρουτινα χρονοκαθυστέρησης 1/4800 = 22msec τουλαχιστον? γ) εξηγησε λιγο σε παρακαλω το " PORTA = getcmd(); " τι ειναι η PORTB,PORTA ??? while(1){ switch(readcom()){ case 'A': PORTA = getcmd(); break; case 'B': PORTB = getcmd(); break; } } } 5) αν μπορεις εξηγησε λιγο την παρακατω συναρτηση... unsigned char translateHex(unsigned char x){ if(x>='a' && x<='f') return x - 'a' + 10; if(x>='A' && x<='F') return x - 'A' + 10; if(x>='0' && x<='9') return x - '0'; return 0xff;//error } 6) παρακατω ειναι η ρουτινα χρονοκαθυστερησης που πρεπει να κανω? delay1ms(); 7) εδω τι παιζει αρχηγέ??? return (translateHex(readcom())<<4) | translateHex(readcom());
bxenos Δημοσ. 9 Φεβρουαρίου 2010 Δημοσ. 9 Φεβρουαρίου 2010 1) απλα ενα string και θα το μεταφραζει το firmware του PIC??? Φυσικά, είναι δυο αυτόνομες συσκευες που πρέπει να συνεργαστούν, αρα θέλεις μια hardware συνδεση μεταξύ τους (π.χ. rs232) και ένα "πρωτόκολλο" επικοινωνίας μεταξύ τους. Γιατί όχι ένα απλό string? Το PC θα το στέλνει και ο μικροελενκτής θα το λαμβάνει και θα το εκτελεί. 2) Το Init τι είναι??? οκ τις κανω εξόδους...ετσι κανουμε πρόγραμμα σε C++ για τον έλεγχο PIC και ετσι γίνεται η διαμόρφωση καθε πορτας του ? init ή initialization, είναι η ορολογια που χρησιμοποιούμε σε οποιοδήποτε πρόγραμμα για την απόδοση αρχικών ρυθμίσεων/καταστάσεων. Στον pic έχουμε πρόγραμμα σε C και θα προσπαθήσω να το ονομάζω firmware γιατί βλέπω σε μπερδεύει - είναι στην πραγματικότητα ένα πρόγραμμα c++ στο pc και ένα firmware σε C στον pic). Στον PIC, στο αρχικό στάδιο που κάνουμε init, το αν οι ακίδες τις πόρτας PORTA θέλουμε να είναι έξοδοι, δηλαδή να τις κάνουμε 0 ή 1 μέσα απο το firmware, πρέπει τα bit της μεταβλητής TRISA του PIC να είναι 0. Κάνοντας και τα 8 bit 0 στην TRISA, λέμε στον μικροελενκτή ότι θέλουμε και οι 8 ακίδες της PORTA να είναι έξοδοι. 3)μπορύμε να βάλουμε και συνάρτηση σαν όρισμα στην switch??? και εχει ορισμα char την PORTA,PORTB??? Στην C/C++ η switch θέλει μια τιμή ακέραια για να κάνει τις επιλογές της, η C/C++ δεν ζητά η τιμή αυτή να είναι μεταβλητή αλλα οποιαδήποτε παράσταση που επιστρέφει ακέραιο (π.χ. switch(3*45*rand())), switch(getchar()), κτλ) 4) α)αυτο το κομματι κωδικα ελεγχει αν εγιναν εισοδοι οι πορτες "while(1)" και αν ειναι εισοδοι να δεχεται χαρακτηρα και να δημιουργεί χρονοκαθυστέρηση? β) αν εχουμε εισοδο δεδομένων 4800 Bound Rate πρεπει να κανουμε ρουτινα χρονοκαθυστέρησης 1/4800 = 22msec τουλαχιστον? το while(1) είναι ατέρμονο loop (εκτελείται συνεχώς). Μόλις λάβουμε ένα χαρακτηρα π.χ. 'A' ή 'B' απο τη σειριακή, το firmware του PIC είναι πολύ πιο γρήγορο απο την ταχύτητα της σειριακής, αρα αν πάμε να διαβάσουμε τους επόμενους δυο δεκαεξαδικούς αριθμους, αυτοί δεν έχουν προλλάβει να έρθουν (θα χρειαστούν περίπου μισό milisec για να έρθουν, αρα κάνουμε ένα "τσιγαράκι" (αναμονή 1 msec για σιγουριά) μέχρι να έρθουν και μετα διαβάζουμε τη buffer της σειριακής για ότι ήρθε. γ) εξηγησε λιγο σε παρακαλω το " PORTA = getcmd(); " τι ειναι η PORTB,PORTA ??? η getcmd() είναι συνάρτηση που διαβάζει 2 δεκαεξαδικά ψηφεία απο τη σειριακή, π.χ. αν ήρθαν στη σειριακή τα "3A" θα επιστρέψει 0x3A. To PORTA = 0χ3Α, θα ενεργοποιήσει τις ακίδες της PORTA ως εξής: 0011 1010. Και οι ακίδες που θα πάρουν 1 θα πάρουν 5Volt ενω οι άλλες 0Volt. 5) αν μπορεις εξηγησε λιγο την παρακατω συναρτηση... μετάτρεψε έναν χαρακτήρα απο την ascii τιμή του "0123456789abcdefABCDEF" στην αριθμητική τιμή του (δηλαδή ο χαρακτήρας 'Α' έχει τιμή 65 όταν εκφράζει ένα γράμμα της αλφαβήτας, αλλά όταν εκφράζει δεκαεξαδικό νουμερο είναι το 10. Αυτο κάνει η συνάρτηση αυτη. 6)παρακατω ειναι η ρουτινα χρονοκαθυστερησης που πρεπει να κανω? Ναι. Στον PIC, υπάρχουν κάποιες έτοιμες στο "delay.h". Κατέβασε το mcc18 απο τη microchip και στηστο. Στο φάκελο c:\mcc18\h θα βρείς όλα τα include αρχεία για τη C στον PIC. 7)εδω τι παιζει αρχηγέ??? ο Αριθμός 0x3A για παράδειγμα είναι δυο χαρακτήρες δεκαεξαδικοι, το '3' και το 'A'. Το πρώτο ψηφειο πιάνει 4 bit (απο το 4ο εως και το 7ο) και το δευτερο 4bit (απο το μηδενικό έως και το 3ο). Αυτό κάνει η εντολή αυτή: βάζει τα πρωτα 4 bit στις 4 πάνω θέσεις ενος byte και τα επόμενα 4 bit στις τελευταίες 4 θεσεις του ίδιου byte. ---------- Προσθήκη στις 17:21 ---------- Προηγούμενο μήνυμα στις 17:16 ---------- αντε λίγα περισσότερα στο >return (translateHex(readcom())<<4) | translateHex(readcom()); Το readcom() επιστρέφει τον ascii χαρακτηρα που διαβάστηκε απο τη σειριακή θύρα (κάποιο απο τα 0123456789ABCDEFabcdef δηλαδή). To translateHex(readcom()) μετατρέπει αυτό το ascii σε νούμερο (απο 0 έως και 15). Το (translateHex(readcom())<<4) βάζει τα 4bit του αριθμού (0 εως 15) 4 βιτ πιο πάνω, κάνοντας θέση για άλλα 4 bit. Δηλαδη αν ήρθε ο χαρακτήρας '3', το (translateHex(readcom())<<4) θα έχει αποτέλεσμα 0x30. To 0x30 | 0x0A έχει αποτέλεσμα 0χ3Α. υγ. Κάνε περισσότερα παραδείγματα C/C++ να την κατανοήσεις και μετά βλέπεις το κομάτι της επικοινωνίας. Αν δεν μάθεις να δουλευεις τα εργαλία που έχεις στα χέρια δεν μπορείς να φτιάξεις αυτοκίνητο.
contest Δημοσ. 9 Φεβρουαρίου 2010 Μέλος Δημοσ. 9 Φεβρουαρίου 2010 1) το firmware θα το γράψω σε assembly που ξέρω..... 2) Αν εχω PIC με ταλαντωτή 4MHz -συχνότητα χρονισμου θα εχω 1μsec κύκλο μηχανής άρα ρουτινα χρονοκαθυστέρησης 1000 loop για να παράγει το 1ms που απαιτείται για να λάβει τον 2ψήφιο δεκαεξαδικο χαρακτήρα? 3) α) εχω κανει εναν PIC να διαβάζει τις προτασεις ASCLL "$..." ενος gps πως θα μπορέσω με μια συνάρτηση να διαβάζω τις προτάσεις "ASCLL χαρακτηρες" και να τις αποθηκεύω στην μνήμη του PC??? β) και ποια συνάρτηση υπάρχει σαν την getcmd() (π.χ. putcmd) η οποία κανει την αντίθετη λειτουργια, δηλαδη να στέλνει 2 δεκαεξαδικά ψηφία στον PIC και το firmware του να ενεργοποιει την αντιστοιχη πορτα αναλλόγος?? π.χ char x=ASCLL1; char y=ASCLL2; if (x) putcmd(h'05')=PORTB; if (y) putcmd(h'0A')=PORTB; . . . . . 4) μπορεις να κανεις ενα παράδειγμα με την readcom() που θα διαβάζει ενα χαρακτήρα (π.χ. το $) και πως θα τον αποθηκευει σε μεταβλητη του software ? Υ.γ. δεν μπορω να βρω βιβλια που να εχουν αυτες τις συναρτησεις...
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.