interrompt USART aider ...

P

piscaroy

Guest
Salut, hmmm dans mon projet j'ai besoin d'obtenir les données de port série COM et de stocker en EEPROM .. et penser ce que si le 1er im données est en cours de stocker des données mais une autre est d'envoyer via le port série les données seront-recevoir? et je fais un parcours en utilisant l'ordinateur pour envoyer par le biais de la photo .. tout premier runing de données que je clique envoyer des données 2ème et ma carte cible pendus ... im me demandais si les interruptions USART aideront ou de vote (mais je ne suis pas très sûr au sujet de ces 2 fonctions) ... ou any1 avez des exemples de codes d'interruptions USART en langage C pour PIC18F452 (compilateur C18 de préférence, mais sinon C ASM ou autres peuvent également) juste pour me laisser avoir une référence ...? pls aider meilleures salutations thankz ..
 
Salut, Le meilleur endroit pour obtenir quelques exemple de gestion série et EEPROM de gestion est le site de Microchip. Ils ont une étagère remplie de notes d'applications sur ce sujet: h ** p: / / www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2048 * = t
 
J'ai la même question se il ya plusieurs mois. Je dois recevoir des données GPS module dans USART0 chaque seconde. Et c'est le taux de transmission est 4800bps.But j'ai fini premier de recevoir des données. Je dois l'envoyer vers un autre port USART. Quand je l'envoyer, les données 2ST envoyer le formulaire de la module.So GPS Je vais manquer le deuxième data.But je l'espère, solution de la question. Ne manquez pas les données. J'ai donc utiliser deux MPU. Ils sont nommés et MPU1 MPU2.When l'MPU1 recevoir des données du module GPS via USART à 4800bps. L'utilisation MPU2 8-lignes de bus bus de données et de contrôle 3-lignes d'obtenir les données sous forme MPU1 fastly.So l'MPU1 que recevoir des données, et la seule MPU2 envoyer des données. ^ ^
 
Peut-être que vous êtes des inondations le tampon Rx, en raison de l'EEPROM accès sont plus lents que le taux UART, vous devez donc le code d'un FIFO-tampon pour le stockage temporaire des données reçues. Cordialement
 
: P Il, facile! Vous lisez les données de USART et l'enregistrer dans la mémoire RAM tampon (augmentation de l'indice d'écriture et de la comparer avec la longueur du tampon, si l'excès d'écriture devrait réinitialiser l'index). Après Escape from Interrupt Service Rountine (ISR), vous écrivez en données EEPROM qui est lues à partir du tampon de RAM, et l'indice augmentation de lire, de le comparer avec la longueur du tampon et de le réinitialiser s'il est plein. Deux processus est à peu près le même temps. En rapport de recherche internationale, Write RAM tampon est seulement l'écriture indice égal à l'indice de lecture. Si vice versa, il est plein de tampon et dépendent de votre douce. Dans le programme principal, si l'écriture n'est pas l'indice de l'indice même lecture -> ont (a) de nouvelles données qui est nécessaire pour écrire l'EEPROM. Après avoir écrit finir, n'oubliez pas augmentation de l'indice de lecture.
 
En outre, vous devez désactiver l'interruption UART avant d'écrire les données, et le réactiver après avoir augmenté l'indice de lecture, afin d'éviter les problèmes de partage des données.
 
PIC18F452 spécifications écrire des données dans l'EEPROM utilisée 4ms pour le cycle d'écriture. Si vous utilisez langauge C Je pense que vous devriez utiliser le temps de cycle écriture = 5ms. Donc vous pouvez écrire le flux de données 200 octets / seconde # Conception d'une bonne poignée de main pour la programmation.
 
En outre, vous devez désactiver l'interruption UART avant d'écrire les données, et le réactiver après avoir augmenté l'indice de lecture, afin d'éviter les problèmes de partage des données.
Non besoin. Désactiver UART Int où seulement écrire l'instruction. La plupart du temps d'attente n'est drapeau de signalisation pour finir et si ce drapeau bloc de ré-activer UART int iinstantaneously après la dernière écriture et avant mise en attente. Ce n'est pas la perte de données à partir UART. Code Ex pour PIC 18F8720: EEhighlow.two = addr; EEADRH = EEhighlow.one [1]; EEADR = EEhighlow.one [0]; EEDATA = valeur; EECON1bits.EEPGD = 0; / / Acess EEROM EECON1bits.CFGS = 0; / / Accès Flash & EEROM EECON1bits.WREN = 1; / / Write Enable [color = red] INTCONbits.GIE = ​​0; / / Désactivation des interruptions EECON2 = 0x55; EECON2 = 0xAA; EECON1bits.WR = 1; INTCONbits.GIE = ​​1; / / Interrupt Enable [/color] alors (PIR2bits.EEIF == 0) {/ / pas écrire la fin -> en attente des instructions plus ....;} PIR2bits.EEIF = 0; / / flag Effacer EECON1bits.WREN = 0; / / Ecrire Désactiver
 

Welcome to EDABoard.com

Sponsor

Back
Top