16f877 test de contacts puce
Takos
-
Nabla's Messages postés 20731 Statut Contributeur -
Nabla's Messages postés 20731 Statut Contributeur -
Tout d'abord, bonjour à tous,
Je suis complètement noob en programmation assembler et j'ai essayer ,au bout de quelques lecture de différents Tuto, de réaliser mon programme qui permettrai de tester par un affichage de led rouge/verte si les contacts sont bons :
Mon portB est utilisé en entrée, le portC en sortie.
Le bit 2 et 3 du portD sont utilisés pour faire un 9bit qui établira si la carte est bien alimentée partout en allumant les 2 leds ( rouges et vertes ).
Il y a une valeur '1' sur les ports RC0 a RC7 qui passent les differents contacts (Cn0 à Cn7) pour retourner sur les ports RB0 a RB7, si RB recoit bien le '1' la led verte s'allume pour indiquer que le contact est opérationnel, sinon une led rouge s'allumera.
Mon soucis est que lorsque pour RC0/RB0 on obtient l'allumage de led rouge/verte, comment faire pour le faire passer au contact suivent, c'est a dire RC1/RB1 ?
En espèrant avoir été assez clair, ce qui n'est pas vraiment évident ^^
Cordialement ,
Je suis complètement noob en programmation assembler et j'ai essayer ,au bout de quelques lecture de différents Tuto, de réaliser mon programme qui permettrai de tester par un affichage de led rouge/verte si les contacts sont bons :
list p=16F877
#include <p16F877.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_ENABLE_ON & _DEBUG_OFF
; Pas de code protege, pas de watch hdog timer, delai de demarrage, horloge HS.
ORG 0x000
GOTO main
ORG 0x004
RETFIE
main CLRF PORTA ; Initialise le port A
CLRF PORTB ; Initialise le port B
CLRF PORTC ; Initialise le port C
CLRF PORTD ; Initialise le port D
CLRF PORTE ; Initialise le port E
BSF STATUS, RP0 ; Bank 1 selectonnee
MOVLW B'111111' ; Port RA5-RA0 en entrée
MOVWF TRISA ;
MOVLW B'11111111' ; Port RB7-RB0 en entrée
MOVWF TRISB ;
MOVLW B'00000000' ; Port RC7-RC0 en sortie
MOVWF TRISC ;
MOVLW B'11111000' ; Port RD7-RD3 en entrée (RD4:entrée présence carte)/ Port RD2-RD0 en sortie (bit 0: led rouge/ bit1: led verte/ bit2: sortie présence carte)
MOVWF TRISD ;
MOVLW B'111' ; Port RE2-RE0 en entrée
MOVWF TRISE ;
BCF STATUS, RP0 ; Bank 0 selectonnee
bsf PORTD, 3 ; allumage des 2 leds pour montrer que le circuit est bien alimenté
bsf PORTD, 2 ;
bsf PORTD, 0 ; PortD RD0 a "1" => présence connecteur
ATTENTE btfss PORTD, 1 ;
goto ATTENTE ;
bcf PORTD, 3 ; leds rouge et verte eteintes
bcf PORTD, 2 ;
bsf PORTC, 0 ; PortC RC0 a "1"
btfss PORTB, 0 ;
goto led_rouge ;
bsf PORTC, 1 ; PortC RC1 a "1"
btfss PORTB, 1 ;
goto led_rouge ;
bsf PORTC, 2 ; PortC RC2 a "1"
btfss PORTB, 2 ;
goto led_rouge ;
bsf PORTC, 3 ; PortC RC3 a "1"
btfss PORTB, 3 ;
goto led_rouge ;
bsf PORTC, 4 ; PortC RC4 a "1"
btfss PORTB, 4 ;
goto led_rouge ;
bsf PORTC, 5 ; PortC RC5 a "1"
btfss PORTB, 5 ;
goto led_rouge ;
bsf PORTC, 6 ; PortC RC6 a "1"
btfss PORTB, 6 ;
goto led_rouge ;
bsf PORTC, 7 ; PortC RC7 a "1"
btfss PORTB, 7 ;
goto led_rouge ;
led_verte bsf PORTD, 3 ; led verte allumée
fin_verte goto fin_verte ; fin led verte
led_rouge bsf PORTD, 2 ; led rouge allumée
fin_rouge goto fin_rouge ; fin led rouge
bsf PORTD, 0 ; PortD RD0 a "1" => présence connecteur
ATTENTE_1 btfsc PORTD, 1 ;
goto ATTENTE_1 ;
bcf PORTD, 3 ; leds rouge et verte eteintes
bcf PORTD, 2 ;
END ; directive de fin de programme
Mon portB est utilisé en entrée, le portC en sortie.
Le bit 2 et 3 du portD sont utilisés pour faire un 9bit qui établira si la carte est bien alimentée partout en allumant les 2 leds ( rouges et vertes ).
Il y a une valeur '1' sur les ports RC0 a RC7 qui passent les differents contacts (Cn0 à Cn7) pour retourner sur les ports RB0 a RB7, si RB recoit bien le '1' la led verte s'allume pour indiquer que le contact est opérationnel, sinon une led rouge s'allumera.
Mon soucis est que lorsque pour RC0/RB0 on obtient l'allumage de led rouge/verte, comment faire pour le faire passer au contact suivent, c'est a dire RC1/RB1 ?
En espèrant avoir été assez clair, ce qui n'est pas vraiment évident ^^
Cordialement ,
A voir également:
- 16f877 test de contacts puce
- Steam deck oled test - Guide
- Test performance pc - Guide
- Test disque dur - Télécharger - Informations & Diagnostic
- Test composant pc - Guide
- Redmi note 14 4g test - Accueil - Téléphones
2 réponses
Salut.
Je n'ai que très peu de bases sur la programmation assembleur. Je ne m'autoriserai donc pas à lire le code ni à le commenter.
Cependant, je sais qu'une instruction s'applelle le décalage, elle est utilisée pour diviser ou multiplier par 2 (et balancer le reste).
en gros,
tu copies ton port à lire dans une variable
tu décales ta variable du numéro de bit à lire vers la droite (donc de 0 à 7)
tu fais un masque 0b0000.0001 sur cette variable décalée
ainsi, ton bit à tester se retrouvera en position 0, ce qui permet de faire ce traitement dans une boucle.
Je débute dans le monde des PIC meme si je connais bien la programmation. Personnelement, j'ai choisi d'apprendre en passant par le C car c'est un langage que je maitrise plutot bien, et surtout qui est portable (oui, j'ai pas envie de me retaper toute la programmation le jour ou je deciderai que je préfère ATMEL à Microchip).
En C, le décallage se fait avec l'opérateur << et >>.
MPLAB est livré avec un compilateur C gratuit, et si tu veux des noms, je crois qu'il y a HT-PICC, CC5X ... et surement d'autres....
Je n'ai que très peu de bases sur la programmation assembleur. Je ne m'autoriserai donc pas à lire le code ni à le commenter.
Cependant, je sais qu'une instruction s'applelle le décalage, elle est utilisée pour diviser ou multiplier par 2 (et balancer le reste).
en gros,
tu copies ton port à lire dans une variable
tu décales ta variable du numéro de bit à lire vers la droite (donc de 0 à 7)
tu fais un masque 0b0000.0001 sur cette variable décalée
ainsi, ton bit à tester se retrouvera en position 0, ce qui permet de faire ce traitement dans une boucle.
Je débute dans le monde des PIC meme si je connais bien la programmation. Personnelement, j'ai choisi d'apprendre en passant par le C car c'est un langage que je maitrise plutot bien, et surtout qui est portable (oui, j'ai pas envie de me retaper toute la programmation le jour ou je deciderai que je préfère ATMEL à Microchip).
En C, le décallage se fait avec l'opérateur << et >>.
MPLAB est livré avec un compilateur C gratuit, et si tu veux des noms, je crois qu'il y a HT-PICC, CC5X ... et surement d'autres....
Ok merci, je vais me pencher sur cette fonction de décalage .
Pour l'assembler bah, ca fait partie de mon projet, il faut que je me casse la tête sur ce type de programmation alors que je n'y connaissais rien avant quelques jours, j'aurai préférer programmer en C que j'ai utilisé toute l'année ^^
Merci pour votre réponse en tout cas ;)
Pour l'assembler bah, ca fait partie de mon projet, il faut que je me casse la tête sur ce type de programmation alors que je n'y connaissais rien avant quelques jours, j'aurai préférer programmer en C que j'ai utilisé toute l'année ^^
Merci pour votre réponse en tout cas ;)