16F84 asm aide pour modifier une routine de RB7 à RB3 [Résolu]

Messages postés
14
Date d'inscription
mercredi 21 juillet 2010
Statut
Membre
Dernière intervention
11 décembre 2013
- - Dernière réponse : cs_jacques5
Messages postés
2
Date d'inscription
mardi 5 avril 2005
Statut
Membre
Dernière intervention
16 avril 2005
- 16 avril 2005 à 09:52
bonjour


pic 16F84A + 24C16


voila j'ai cette routine qui marche tres bien mais je veux la modifier pour passer sur le portb,03 (RB3) mais comme je debute et que j'ai pas tres bien compris tous les mecanismes de cette routine surtout les : XORWF PORTB , W
XORWF PORTB , f
est ce qu'il ne faut pas aussi modifier le " RLF EEDATA , f"


si vous pouviez me la modifier sur cet exemple avec un petit commentaire, ca serait sympa
ps: j'ai bien essayer des modifs mais ca a pas marcher, donc merci





---------------------------------------------------------------------
envoi en PORTB , 07
---------------------------------------------------------------------
Label_0015
MOVWF EEDATA ; sauve w dans EEDATA
COMF EEDATA , f ; complement file
MOVLW 0x80 ; page 1 , adressage indirect (variable 0x80)
MOVWF 0x1C ; parite 1C= data Crc
MOVLW 0x08 ; charge 08 (8 bits)
MOVWF 0x0C ; dans compteur (variable C)
BCF PORTB , 07 ; met à zero le bit 7 du port B = mise en sortie


BSF STATUS , RP0 ; bank 1 (BSF) MOVLW 0x4F ; 4F0100 1111 pin 7,5,4 à 0 sortie
; (pins 5 et 4 eeprom 24c16)
MOVWF TRISB ; data direction port B
BCF STATUS , RP0 ; bank 0 (BCF)


MOVLW 0xA8
CALL Label_0004 ; timer 0
---------------------------------------------------------------------------
; envoi une bit et boucle 8 fois (8 bits = 1 byte)
Label_0006
MOVF EEDATA , W ; eeprom data
ANDLW 0x80 ; page 1 , adressage indirect (variable 0x80)
XORWF 0x1C , f ; calcul la parite 1C= data Crc
XORWF PORTB , W ; change la ligne I/0 en fonction du bit 7 de EEdata
XORWF PORTB , f
MOVLW 0xA8
CALL Label_0005 ; add new valeur au timer
RLF EEDATA , f ; eeprom data
DECFSZ 0x0C , f ; decremente le compteur de bits
; (variable C), saut si = zero
GOTO Label_0006 ; boucle


MOVF 0x1C , W
XORWF PORTB , W
XORWF PORTB , f
MOVLW 0xA8
CALL Label_0005 ; add new valeur au timer


BSF STATUS , RP0 ; bank 1 (BSF) MOVLW 0xCF ; CF 11001111 remet pin 7 à 1 entree
MOVWF TRISB ; data direction port B
BCF STATUS , RP0 ; bank 0 (BCF)


MOVLW 0x02
ADDWF 0x0F , f
CALL Label_0007 ; decremente le timer
RETURN
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
2
Date d'inscription
mardi 5 avril 2005
Statut
Membre
Dernière intervention
16 avril 2005
3
Merci
Bonjour Pasrico.


Je ne comprends pas très bien ta question. Tu désires utiliser la broche B3 au lieu de B7?

Jacques

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_jacques5
Messages postés
14
Date d'inscription
mercredi 21 juillet 2010
Statut
Membre
Dernière intervention
11 décembre 2013
0
Merci
pour jacques 5
bonjour
oui c'est exactement ca, je desire transposer la routine qui est pour le B7 en routine pour le B3 ( car reelement par la suite dans mon programme je voudrais communiquer suivant besoin sur l'un ou l'autre port, call envoi_B7 ou call envoi_B3 , en gros).
j'ai fais des essais , mais je maitrise pas trop et donc ca marche pas.
merci de m'avoir repondu
lulu
Commenter la réponse de pasrico
Messages postés
2
Date d'inscription
mardi 5 avril 2005
Statut
Membre
Dernière intervention
16 avril 2005
0
Merci
Pour répondre concernant l'instruction XORWF c'est une instruction qui effectue un OU exclusif bit à bit entre un registre et le contenu de W. Pour rappel un OU exclusif voit la sortie à 1 si une des deux entrée est à 1 (l'autre à 0). Par contre la sortie sera à 0 si les deux entrées sont à 1 ou à 0. On peut avec cette intruction inverser un bit particulier d'un registre.
Existe aussi XORLW qui effectue la même opération entre un littéral et le registre W.

A B sortie
0 0 0
0 1 1
1 0 1
1 1 0

Bon je ne sais pas vraiment si c'est une solution mais à essayer ceci.

---------------------------------------------------------------------
envoi en PORTB , 07
---------------------------------------------------------------------
Label_0015
MOVWF EEDATA ; sauve w dans EEDATA
COMF EEDATA , f ; complement file
MOVLW 0x80 ; page 1 , adressage indirect (variable 0x80)
MOVWF 0x1C ; parite 1C= data Crc
MOVLW 0x08 ; charge 08 (8 bits)
MOVWF 0x0C ; dans compteur (variable C)
→ ; BCF PORTB , 07 ; met à zero le bit 7 du port B = mise en sortie
BCF PORTB , 03 ; METTRE A 0 LE BIT N° 3******************
BSF STATUS , RP0 ; bank 1 (BSF) MOVLW 0x4F ; 4F0100 1111 pin 7,5,4 à 0 sortie
; (pins 5 et 4 eeprom 24c16)
MOVWF TRISB ; data direction port B
BCF STATUS , RP0 ; bank 0 (BCF)


MOVLW 0xA8
CALL Label_0004 ; timer 0
---------------------------------------------------------------------------
; envoi une bit et boucle 8 fois (8 bits = 1 byte)
Label_0006
MOVF EEDATA , W ; eeprom data
→ ; ANDLW 0x80 ; page 1 , adressage indirect (variable 0x80); andlw0x08
ANDLW 0x08 ; ICI METTRE A 1 LE BIT 3 AU LIEU DU BIT 7****
XORWF 0x1C , f ; calcul la parite 1C= data Crc
XORWF PORTB , W ; change la ligne I/0 en fonction du bit 7 de EEdata
XORWF PORTB , f
MOVLW 0xA8
CALL Label_0005 ; add new valeur au timer
RLF EEDATA , f ; eeprom data
DECFSZ 0x0C , f ; decremente le compteur de bits
; (variable C), saut si = zero
GOTO Label_0006 ; boucle


MOVF 0x1C , W
XORWF PORTB , W
XORWF PORTB , f
MOVLW 0xA8
CALL Label_0005 ; add new valeur au timer


BSF STATUS , RP0 ; bank 1 (BSF) MOVLW 0xCF ; CF 11001111 remet pin 7 à 1 entree
MOVWF TRISB ; data direction port B
BCF STATUS , RP0 ; bank 0 (BCF)


MOVLW 0x02
ADDWF 0x0F , f
CALL Label_0007 ; decremente le timer
RETURN
Commenter la réponse de cs_jacques5