A a t'il un moyen de reseter le pic 16f84 avec des instructions assembleur ? et comment vider la pile des adresses de sous-programmes ?
Merci...
-----
08/07/2004, 20h10
#2
invitef26bdcba
Date d'inscription
janvier 1970
Messages
1 204
Re : reset soft du 16f84
Salut,
Une solution toute simple :
Goto adr0 où adr0 est le vecteur de reset.
Quand tu veux faire le reset, tu fais simplement la ligne ci-dessus.
Plus parlant :
ORG 0
adr0 goto init ; aller à l'initialisation du programme
ORG 5
init XXXXXXX; début programme
David.
08/07/2004, 20h21
#3
maho
Date d'inscription
juillet 2004
Localisation
Les Breuleux
Âge
51
Messages
181
Re : reset soft du 16f84
Haaa d'acoorrrd... donc le fait que pcl=0x00 ça reset le PIC... donc ça vide la pile d'adresse de s-programmes ?
08/07/2004, 21h03
#4
invitef26bdcba
Date d'inscription
janvier 1970
Messages
1 204
Re : reset soft du 16f84
Je ne suis pas certain que la pile soit vidée avec cette manière de procéder. Cependant tu connais le nombre de sous programmes utilisé et il est facile d'ajouter par sécurité le nombre de return correspondant au nombre de sous-programmes pour vider "manuellement" la pile, avant d'aller au vecteur de reset.(dans le pire des cas tu perds le temps de huit insrtuctions)
David.
Aujourd'hui
A voir en vidéo sur Futura
08/07/2004, 21h32
#5
inviteb6d767d2
Date d'inscription
janvier 1970
Messages
957
Re : reset soft du 16f84
Salut
------
Un 'goto 0x00" n'est pas du tout un reset du pic.
Faire des "return" en cascade est impossible, car au premier return rencontré, on quitte l'endroit où on était (par définition), et donc on ne sait pas exécuter le "return" suivant.
De plus, il n'y a pas que la pile. Tous les autres registres sont concernés par un reset.
Il existe des méthodes barbares pour resetter un 16F84, en manipulant le prédiviseur du watchdog, et donc en fait en exploitant un bug connu.
Mais ce n'est pas élégant du tout, et rien ne dit que ce sera reproductible sur les révisions futures (probablement que oui, mais pas certain).
Sinon, une méthode simple, peu rapide, mais qui fonctionne, c'est d'activer le watchdog et de faire une boucle sans fin genre
loop
goto loop
Ainsi, tu provoques le débordement du watchdog et tu resettes le pic.
Attention cependant que le reset par watchdog n'est pas équivalant au reset par MCLR pour tous les registres.
Il y a encore une autre méthode "barbare", mais qui fonctionne.
Tu sacrifies une pin, que tu relies à MCLR.
Tu relies MCLR à Vdd via une résistance de pullup.
Il te suffit de faire passer ta pin en sortie et d'envoyer un niveau 0 pour faire un reset.
Note que les 18F disposent d'une instruction "reset", mais pas les 16F.
La meilleure méthode est encore de structurer correctement son programme pour éviter de devoir faire un reset.