Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Petit problème sur les PIC16F883
Pierre57
Membre
Membre
Messages : 14
Enregistré en : septembre 2024

#1 Message par Pierre57 » dim. 15 sept. 2024 23:47

Bonjour à tous.
Je me suis intéresser aux PIC il y a environ 20 ans a l’époque j’ utiliser des 16F84 je me suis remis aux pic un peut par force pour un amis qui a une scierie.
Je suis entrain d’écrire un code pour des 16F883 et 16F887 qui comporteras 8 X pic travaillant ensemble. Le programme est a moitié écris pour l’instant.
Mon problème est : la partie écrite fonctionne en oscillateur interne, mais impossible de le faire fonctionner avec un quartz.
En attendant Merci.
Pierre.

Petit problème sur les PIC16F883
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#2 Message par Jérémy » lun. 16 sept. 2024 08:23

SAlut Pierre ,

En quel langage programmes -tu tes PICS ?

Il faut regarder la DS à la page oscillateur il y a des paramétres à regler. Un schéma aussi peut aider ! et surtout du code !

@+
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Petit problème sur les PIC16F883
Pierre57
Membre
Membre
Messages : 14
Enregistré en : septembre 2024

#3 Message par Pierre57 » lun. 16 sept. 2024 12:15

Bonjour Jérémy
Vu mon age je travaille en assembleur, pour le protocole j’en ai crée un spécial car la transmission doit se faire en continue pour éviter de perdre de l’information sur le capteur.
Le capteur est un E38S6G5 qui doit travailler a 200 Hz 1T=200 impulsions le protocole donc 4Xbits transmit en // sur un port et donc 4 reçut sur l’autre port. Je met en forme le prochain message pour plus d’explication.
En attendant Merci.
Pierre.

Petit problème sur les PIC16F883
Pierre57
Membre
Membre
Messages : 14
Enregistré en : septembre 2024

#4 Message par Pierre57 » lun. 16 sept. 2024 20:02

Bonjour Jérémy et à tous

list p=16f883,f=inhx8m

Code : Tout sélectionner

#include p16F883.inc                ; fichier include

__CONFIG    _CONFIG1_INTRC_OSC_NOCLKOUT _WDTE_OFF _PWRTE_OFF _MCLRE_OFF _CP_OFF _CPD_OFF _BOREN_ON _LVP_OFF _DEBUG_OFF 

__CONFIG    _CONFIG2
_BOR4V_BOR40V _WRT_OFF

;__CONFIG    _CONFIG1_FOSC_HS _WDT_OFF _PWRTE_OFF _MCLRE_OFF _CP_OFF _CPD_OFF _BOREN_ON _LVP_OFF _FCMEN_OFF _DEBUG_OFF

  
aff1         EQU 0x20                 
adresse de reception Afficheur 1
aff2         EQU 0x21                 
adresse de reception Afficheur 2
aff3         EQU 0x22                 
adresse de reception Afficheur 3
aff4        EQU 0x23                 
adresse de reception Afficheur 4
affx        EQU 0x24                
adresse de transit aff1/aff2/aff3/aff4
temp    EQU    0x25                
Pour boucle de temporisation
;-----------------------------------------------------------------------------------------------------
            
org    0000
            
debut        clrf    aff1            
à 0
            clrf    aff2            
à 0
            clrf    aff3            
à 0
            clrf    aff4            
à 0
            clrf    affx            
à 0

            clrf    PORTA
            clrf    PORTB
            clrf    PORTC
            clrf    PORTE
            bsf        STATUS
,RP0        Passer en banque1

;            movlw    B'00001111'        Fréquence maximale HS
;            movwf    OSCTUNE            Oscillateur externe 20 Mhz

            movlw    
B'01111000'        01111000 oscillateur 8 Mhz <= Celui choisis
            movwf    OSCCON        
01101000 oscillateur 4 Mhz
                                    
01011000 oscillateur 2 Mhz
                                    
01001000 oscillateur 1 Mhz
                                    
00111000 oscillateur 500 Khz
                                    
00101000 oscillateur 250 Khz
                                    
00011000 oscillateur 125 Khz
                                    
00001000 oscillateur 31 Khz            
            movlw    
B'10111111'            
            
movwf    TRISA            Mise en entrée 0,1,2,3,4,(7 Osc du PORTA en sortie 6)
            
movlw    B'00000000'    
            
movwf    TRISB            Mise en sortie des bits 0,1,2,3,4,5,6,7 PORTB 
            movlw    
B'00000001'    
            
movwf    TRISC            Mise en sortie bits 1,2,3,4,5,6,7 PORTC et en entrée le bit 0
            movlw    
B'11111111'        Mis en entrée bit 3 PORTE
            movwf    TRISE
            bcf        STATUS
,RP0        Passer en banque0

Voici les lignes de début de programme.
En attendant Merci.
Pierre.

Petit problème sur les PIC16F883
satinas
Expert
Expert
Messages : 1487
Enregistré en : novembre 2015

#5 Message par satinas » mar. 17 sept. 2024 06:24

Bonjour Pierre,

Pour utiliser un quartz comme horloge il faut :
- mettre à 0 le bit SCS dans OSCCON pour utiliser l'oscillateur défini dans CONFIG1.
- sélectionner le type d'oscillateur dans CONFIG1, c'est là qu'on peut déclarer un oscillateur externe.

Pour un quartz, c'est _LP_OSC si 32kHz, _XT_OSC jusqu'à 4 MHz, _HS_OSC au delà. La liste des paramètres de configuration de CONFIG1 et CONFIG2 figure à la fin du fichier "p16F883.inc" dans le dossier "MPASM Suite".

Le bit SCS étant à 0 au reset, le pic devrait démarrer sans avoir à toucher au registre OSCCON, il faut juste sélectionner l'oscillateur dans CONFIG1.

Petit problème sur les PIC16F883
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#6 Message par Jérémy » mar. 17 sept. 2024 08:07

 ! Message de modération :
Bonjour à tous,

j'ai déplacé ton sujet pour le mettre dans la bonne catégorie.
Merci de mettre ton code entre les balises "codes" pour faciliter la lecture des visiteurs.

Bonne journée
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Petit problème sur les PIC16F883
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 2846
Âge : 99
Enregistré en : décembre 2017
Localisation : Banlieue sud de Klyntar
Contact :

#7 Message par F6FCO » mar. 17 sept. 2024 11:03

Bonjour,
Satinas à déjà répondu.
"_CONFIG1, _INTRC_OSC_NOCLKOUT" te fait osciller en interne, pour savoir quel instruction _config employer pour osciller en externe tu peux aller visiter ton fichier PIC16F883.inc
Une porte nand prend 2 bits en entrée... :eek:

Petit problème sur les PIC16F883
Pierre57
Membre
Membre
Messages : 14
Enregistré en : septembre 2024

#8 Message par Pierre57 » mar. 17 sept. 2024 19:32

Bonjour à tous.
J’ai bien regardé toutes les suggestions je ne sais pas d’où vient mon problème j’ai compulsé toute la notice des PIC en question ainsi que les annexes AN826, AN849, AN943, AN949 et je suis toujours dans le flous.
Le montage est classique : 1xQuartz 20 Mhz et 2 condensateurs 20 Pf sur les entrées RA6 et RA7.
C’est la première fois que j’utilise ces PICs. Avec les 16F84 je n’ai jamais eut de problème.
J’ai réessayer avec les info que vous m’avez donné : avec un quartz 4Mhz ça fonctionne avec un 12Mhz aussi mais le signal est plus faible et avec un 20Mhz le signal est très faible mais de temps en temps il ne démarre pas.
En attendant Merci.
Pierre.

Petit problème sur les PIC16F883
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2886
Enregistré en : juillet 2016
Localisation : Terre

#9 Message par Temps-x » mer. 18 sept. 2024 03:16

Bonjour,

Un schema, et un code complet, que je puisse faire un essai


Si j'ai bien compris tu veux tourner avec un quartz de 4 Mhz sur ton Pic16F883 ?

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Petit problème sur les PIC16F883
Pierre57
Membre
Membre
Messages : 14
Enregistré en : septembre 2024

#10 Message par Pierre57 » mer. 18 sept. 2024 08:58

Bonjour à tous
Voici le .asm
Je veux travailler en 20Mhz (si non j’aurai utilisé l’horloge interne) surtout pour l’acquisition c'est un des huit programmes qui me pose problème.
Quand j’aurai résolut mon problème pour celui-là je l’aurais résolut pour les autres.

Code : Tout sélectionner

; Scierie        Lecture du capteur optique et sortie mem(X) et aff(X)
;
 Scierie1    Affichage 7 segments hauteur restante Cathode commune
; Scierie2        Entrée clavier numérique et fonction
; Scierie3        Gestion épaisseur lame.
;
 Scierie4        Gestion montée, descente. Relais montée descente calcul coupe.
;
 Scierie5        Gestion épaisseur de coupe sortie brute coupe + lame.
;
 ScierieX        Affichage 7 segments Commun Cathode commune 1/2/3/4 Digits
; ScierieY        Affichage 7 segments Commun Anode commune 1/2/3/4 Digits
;
;
 le 31 Août 2024    Version : 1.01
; Scierie1 v01 développement
; PIC16F883 Osc : 20Mhz            PIC16F887 Osc : 20Mhz    
; Flash : 4096                    Flash : 8192
; SRAM : 256 bytes                SRAM : 368 bytes
; EEPROM : 256 bytes            EEPROM : 256 bytes
; I/: 24                        I/: 35
; 
; Registre à usage général de (20)h à (7F)h Bank0
; Registre à usage général de (A0)h à (EF)h Bank1        (F0)h à (FF)h accès depuis (70)(7F)h Bank0
; Registre à usage général de (120)h à (16f)h Bank2        (170)h à (17F)h accès depuis (70)(7F)h Bank0
; Registre à usage général de (1A0)h à (1EF)h Bank3     (1F0)h à (1FF)h accès depuis (70)(7F)h Bank0
;
;
;
 H'19' = D'25' = B'00011001'
;
;-----------------------------------------------------------------------------------------------------
;
Capteur 200 impultions par tour un tour 8 mm 0,04 mm par impultion.
;
;
PORTA -----------------------------------------------------------------------------------------------
;
;
Broche côté droit
;    Blanc1    2    RA0 : entr2 poid faible entrée identification venant de sort2 : Scierie.asm
;    Jaune1    3    RA1 : entr2 poid Fort entrée identification venant de sort2 : Scierie.asm
;            aff1 = 00
;            aff2 = 01
;            aff3 = 10
;            aff4 = 11
;
;
    Orange1    4    RA2 : bit 0 réception des 4 X 4 bits venant du système de comptage
;    Vert1    5    RA3 : bit 1
;    Bleu1    6    RA4 : bit 2
;    Violet1    7    RA5 : bit 3
;
;
Broche côté droit
;    10    RA6 : OSC2
;    9    RA7 : OSC1
;
;
     PORTA    B'11111111'        Mise en entrée 0,1,2,3,4,(6,7)Osc du PORTA
;
;
Sortie Afficheur PORTB PORTC ------------------------------------------------------------------------
;
            
; 4 X Afficheurs 7 segments ; 
;
;
    0 = H'3F' 1 = H'06' 2 = H'5B' 3 = H'4F' 4 = H'66' 5 = H'6D' 6 = H'7D' 7 = H'07'
;    8 = H'7F' 9 = H'6F' A = H'77' B = H'7C' C = H'39' D = H'5E' E = H'79' F = H'71' 
;Broche côté gauche
;    21    RB0 :    A        |Afficheur 7 segments
;    22    RB1 :    B        |
;
    23    RB2 :    C        |
;
    24    RB3 :    D        |
;
    25    RB4 :    E        |
;
    26    RB5 :    F        |
;
    27    RB6 :    G        |
;
    28    RB7 :    Dp        |
;
;
    PORTB    B'00000000'        Mise en sortie des bits 0,1,2,3,4,5,6,7 PORTB 
;
;
PORTC -----------------------------------------------------------------------------------------------
;
Broche côté gauche
;    15    RC4 : Cathode 1    sortie
;    16    RC5 : Cathode 2
;    17    RC6 : Cathode 3
;    18    RC7 : Cathode 4
;
;
Broche côté droit
;    Marron1    11    RC0 : Entrée E2 venant de S2 : Scierie.asm
;    Gris1    12    RC1 : Sortie S2 allant vers E2 : Scierie.asm
;            13    RC2 : 
;            14    RC3 : 
;
;
    PORTC    B'00000001'        Mise en sortie bits 1,2,3,4,5,6,7 PORTC et en entrée le bit 0
;
;
PORTE -----------------------------------------------------------------------------------------------
;
Broche côté droit
;    1    RE3 : Entrée du bit Enter non valide = 0  valide = 1
;
;
    PORTE    B'11111111'        ; Mis en entrée bit 3 PORTE utilisé pour Enter
;
;-----------------------------------------------------------------------------------------------------
;
Broche 8 / 19 / 20
;    Noir        8    VSS
;    Noir        19    VSS
;    Rouge        20    VDD
;
;-----------------------------------------------------------------------------------------------------

;
            1    RE3                28    RB7    Dp
;    Blanc1    2    RA0                27    RB6 G
;    Jaune1    3    RA1                26    RB5 F
;    Orange1    4    RA2                25    RB4 E
;    Vert1    5    RA3                24    RB3 D
;    Bleu1    6    RA4                23    RB2    C
;    Violet1    7    RA5                22    RB1    B
;            8    VSS                21    RB0    A
;            9    RA7/OSC1        20    VDD
;            10    RA6/OSC2        19    VSS
;    Marron1    11    RC0                18    RC7 C4
;    Gris1    12    RC1                17    RC6 C3
;            13    RC2                16    RC5 C2
;            14    RC3                15    RC4 C1
;
;-----------------------------------------------------------------------------------------------------

;
    Errorlevel-205    ; Directive trouvée dans la colonne 1. (__CONFIG)
;
    Errorlevel-302    ; Le registre de l'opérande n'est pas en banque 0. Êtes-vous sur que la banque et correcte

        list p
=16f883,f=inhx8m

#include p16F883.inc                ; fichier include

__CONFIG    _CONFIG1, _FOSC_HS & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _LVP_OFF & _FCMEN_OFF & _DEBUG_OFF

;__CONFIG    _CONFIG1, _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _LVP_OFF & _FCMEN_OFF & _DEBUG_OFF 

__CONFIG    _CONFIG2
, _BOR4V_BOR40V & _WRT_OFF

  
aff1         EQU 0x20                 
; adresse de reception Afficheur 1
aff2         EQU 0x21                 
; adresse de reception Afficheur 2
aff3         EQU 0x22                 
; adresse de reception Afficheur 3
aff4        EQU 0x23                 
; adresse de reception Afficheur 4
affx        EQU 0x24                
; adresse de transit aff1/aff2/aff3/aff4
temp        EQU    0x25                
; Pour boucle de temporisation
;-----------------------------------------------------------------------------------------------------
            org    0000
            
debut        clrf    aff1            
; à 0
            clrf    aff2            
; à 0
            clrf    aff3            
; à 0
            clrf    aff4            
; à 0
            clrf    affx            
; à 0

            clrf    PORTA
            clrf    PORTB
            clrf    PORTC
            clrf    PORTE
            bsf        STATUS
,RP0        ; Passer en banque1

;            movlw    B'00001111'        ; Fréquence maximale HS
;            movwf    OSCTUNE            ; Oscillateur externe 20 Mhz
;            bcf        OSCCON,0        ; Mise à 0 du bit SCS
;            bsf        OSCCON,3        ; Mise à 1 du bit OSTS
;            movlw    B'01111001'        ; 01111001 oscillateur 8 Mhz <= Celui choisis
;            movwf    OSCCON            ; 01101001 oscillateur 4 Mhz
                                    
; 01011001 oscillateur 2 Mhz
                                    
; 01001001 oscillateur 1 Mhz
                                    
; 00111001 oscillateur 500 Khz
                                    
; 00101001 oscillateur 250 Khz
                                    
; 00011001 oscillateur 125 Khz
                                    
; 00001001 oscillateur 31 Khz            
            movlw    B
'11111111'            
            movwf    TRISA            
; Mise en entrée 0,1,2,3,4,(6,7 Osc du PORTA)
            movlw    B'00000000'    
            movwf    TRISB            
; Mise en sortie des bits 0,1,2,3,4,5,6,7 PORTB 
            movlw    B
'00000001'    
            movwf    TRISC            
; Mise en sortie bits 1,2,3,4,5,6,7 PORTC et en entrée le bit 0
            movlw    B
'11111111'        ; Mis en entrée bit 3 PORTE
            movwf    TRISE
            bcf        STATUS
,RP0        ; Passer en banque0
            movlw    H
'79'            ; On met la valeur 7 segments du chiffre E dans W
            movwf    aff1            
; W => aff1 : valeur 7 segments du chiffre E dans aff1
            movlw    H
'4F'            ; On met la valeur 7 segments du chiffre 3 dans W
            movwf    aff2            
; W => aff2 : valeur 7 segments du chiffre 3 dans aff2
            movlw    H
'7F'            ; On met la valeur 7 segments du chiffre 8 dans W
            movwf    aff3            
; W => aff3 : valeur 7 segments du chiffre 8 dans aff3
            movlw    H
'79'            ; On met la valeur 7 segments du chiffre E dans W
            movwf    aff4            
; W => aff4 : valeur 7 segments du chiffre E dans aff4
;-----------------------------------------------------------------------------------------------------
debut1
            call    sortaff
            btfss    PORTC
,0            ; Entrée E2 venant de S2 : Scierie.asm
            goto    debut1            
; si E2 PORTC,= 0 (aller à écriture afficheurs)
            nop                        ; si E2 PORTC,= 1
            btfss    PORTA
,0            ; poid faible identification venant de sort2 Scierie.asm
            goto    bitaf0            
; si PORTA,= 0
            goto    bitaf1            
; si PORTA,= 1
;-----------------------------------------------------------------------------------------------------
bitaf0
            btfss    PORTA
,1            ; poid fort identification venant de sort2 Scierie.asm
            goto    bitaf00            
; si PORTA,= 0
            goto    bitaf10            
; si PORTA,= 1
;-----------------------------------------------------------------------------------------------------
bitaf1
            btfss    PORTA
,1            ; poid fort identification venant de sort2 Scierie.asm
            goto    bitaf01            
; si PORTA,= 0
            goto    bitaf11            
; si PORTA,= 1
;-----------------------------------------------------------------------------------------------------
bitaf00                                ; lecture des bits de aff1
            call    entaffx
            movwf    aff1            
; W => aff1 : valeur 7 segments du chiffre dans aff1
            bsf        PORTC
,1            ; aff1 lu sortie S2 allant vers E2 : Scierie.asm
            call    sortaff
            goto    debut1            
;-----------------------------------------------------------------------------------------------------
bitaf01                                ; lecture des bits de aff2
            call    entaffx
            movwf    aff2            
; W => aff2 : valeur 7 segments du chiffre dans aff2
            bsf        PORTC
,1            ; aff2 lu sortie S2 allant vers E2 : Scierie.asm
            call    sortaff            
            goto    debut1            
;-----------------------------------------------------------------------------------------------------
bitaf10                                ; lecture des bits de aff3
            call    entaffx
            movwf    aff3            
; W => aff3 : valeur 7 segments du chiffre dans aff3
            bsf        PORTC
,1            ; aff3 lu sortie S2 allant vers E2 : Scierie.asm
            call    sortaff
            goto    debut1
;-----------------------------------------------------------------------------------------------------
bitaf11                                ; lecture des bits de aff4
            call    entaffx
            movwf    aff4            
; W => aff4 : valeur 7 segments du chiffre dans aff4
            bsf        PORTC
,1            ; aff4 lu sortie S2 allant vers E2 : Scierie.asm
            call    sortaff
            goto    debut1
;-----------------------------------------------------------------------------------------------------
entaffx                                ; réception des bits aff1 aff2 aff3 aff4
            btfsc    PORTA
,2
            bsf        affx
,0            ; si PORTA,= 1
            btfss    PORTA
,2            ; si PORTA,= 0
            bcf        affx
,0            ; si PORTA,= 0
            btfsc    PORTA
,3            ; si PORTA,= 1
            bsf        affx
,1            ; si PORTA,= 1
            btfss    PORTA
,3            ; si PORTA,= 0
            bcf        affx
,1            ; si PORTA,= 0
            btfsc    PORTA
,4            ; si PORTA,= 1
            bsf        affx
,2            ; si PORTA,= 1
            btfss    PORTA
,4            ; si PORTA,= 0
            bcf        affx
,2            ; si PORTA,= 0
            btfsc    PORTA
,5            ; si PORTA,= 1
            bsf        affx
,3            ; si PORTA,= 1
            btfss    PORTA
,5            ; si PORTA,= 0
            bcf        affx
,3            ; si PORTA,= 0
            nop                        
; si PORTA,= 1
            movlw    H
'0'            ; On met le nombre 0 dans W pour le comparer à affx
            subwf    affx
,0
            btfss    STATUS
,Z        ;
            goto    d01                ; Z = 0 rés. opé. # 0 on va au chiffre suivant
            movlw    H'3F'            ; Z = 1 rés. opé. = 0 valeur 7 segments du chiffre 0 dans W
            return
            
d01            movlw    H
'1'            ; On met le nombre 1 dans W pour le comparer à affx
            subwf    affx
,0
            btfss    STATUS
,Z        ;
            goto    d02                ; Z = 0 rés. opé. # 0 on va au chiffre suivant    
            movlw    H'06'            ; Z = 1 rés. opé. = 0 valeur 7 segments du chiffre 1 dans W
            return
d02            
            movlw    H
'2'            ; On met le nombre 2 dans W pour le comparer à affx
            subwf    affx
,0
            btfss    STATUS
,Z        ;
            goto    d03                ; Z = 0 rés. opé. # 0 on va au chiffre suivant    
            movlw    H'5B'            ; Z = 1 rés. opé. = 0 valeur 7 segments du chiffre 2 dans W
            return
d03            
            movlw    H
'3'            ; On met le nombre 3 dans W pour le comparer à affx
            subwf    affx
,0
            btfss    STATUS
,Z        ;
            goto    d04                ; Z = 0 rés. opé. # 0 on va au chiffre suivant    
            movlw    H'4F'            ; Z = 1 rés. opé. = 0 valeur 7 segments du chiffre 3 dans W
            return
d04            
            movlw    H
'4'            ; On met le nombre 4 dans W pour le comparer à affx
            subwf    affx
,0
            btfss    STATUS
,Z        ;
            goto    d05                ; Z = 0 rés. opé. # 0 on va au chiffre suivant    
            movlw    H'66'            ; Z = 1 rés. opé. = 0 valeur 7 segments du chiffre 4 dans W
            return
d05            
            movlw    H
'5'            ; On met le nombre 5 dans W pour le comparer à affx
            subwf    affx
,0
            btfss    STATUS
,Z        ;
            goto    d06                ; Z = 0 rés. opé. # 0 on va au chiffre suivant    
            movlw    H'6D'            ; Z = 1 rés. opé. = 0 valeur 7 segments du chiffre 5 dans W
            return
d06            
            movlw    H
'6'            ; On met le nombre 6 dans W pour le comparer à affx
            subwf    affx
,0
            btfss    STATUS
,Z        ;
            goto    d07                ; Z = 0 rés. opé. # 0 on va au chiffre suivant    
            movlw    H'7D'            ; Z = 1 rés. opé. = 0 valeur 7 segments du chiffre 6 dans W
            return
d07            
            movlw    H
'7'            ; On met le nombre 7 dans W pour le comparer à affx
            subwf    affx
,0
            btfss    STATUS
,Z        ;
            goto    d08                ; Z = 0 rés. opé. # 0 on va au chiffre suivant    
            movlw    H'07'            ; Z = 1 rés. opé. = 0 valeur 7 segments du chiffre 7 dans W
            return
d08    
            movlw    H
'8'            ; On met le nombre 8 dans W pour le comparer à affx
            subwf    affx
,0
            btfss    STATUS
,Z        ;
            goto    d09                ; Z = 0 rés. opé. # 0 on va au chiffre suivant    
            movlw    H'7F'            ; Z = 1 rés. opé. = 0 valeur 7 segments du chiffre 8 dans W
            return
            
d09            movlw    H
'9'            ; On met le nombre 9 dans W pour le comparer à affx
            subwf    affx
,0
            btfss    STATUS
,Z        ;
            goto    d0A                ; Z = 0 rés. opé. # 0 on va au chiffre suivant    
            movlw    H'6F'            ; Z = 1 rés. opé. = 0 valeur 7 segments du chiffre 9 dans W
            return
            
d0A            movlw    H
'A'            ; On met la lettre A dans W pour le comparer à affx
            subwf    affx
,0
            btfss    STATUS
,Z        ;
            goto    d0B                ; Z = 0 rés. opé. # 0 on va au chiffre suivant    
            movlw    H'77'            ; Z = 1 rés. opé. = 0 valeur 7 segments de la lettre A dans W
            return        

d0B            movlw    H
'B'            ; On met la lettre B dans W pour le comparer à affx
            subwf    affx
,0
            btfss    STATUS
,Z        ;
            goto    d0C                ; Z = 0 rés. opé. # 0 on va au chiffre suivant    
            movlw    H'7C'            ; Z = 1 rés. opé. = 0 valeur 7 segments de la lettre b dans W
            return

d0C            movlw    H
'C'            ; On met la lettre C dans W pour le comparer à affx
            subwf    affx
,0
            btfss    STATUS
,Z        ;
            goto    d0D                ; Z = 0 rés. opé. # 0 on va au chiffre suivant    
            movlw    H'39'            ; Z = 1 rés. opé. = 0 valeur 7 segments de la lettre C dans W
            return

d0D            movlw    H
'D'            ; On met la lettre D dans W pour le comparer à affx
            subwf    affx
,0
            btfss    STATUS
,Z        ;
            goto    d0E                ; Z = 0 rés. opé. # 0 on va au chiffre suivant    
            movlw    H'5E'            ; Z = 1 rés. opé. = 0 valeur 7 segments de la lettre d dans W
            return
            
d0E            movlw    H
'E'            ; On met la lettre E dans W pour le comparer à affx
            subwf    affx
,0
            btfss    STATUS
,Z        ;
            goto    d0F                ; Z = 0 rés. opé. # 0 on va au chiffre suivant    
            movlw    H'79'            ; Z = 1 rés. opé. = 0 valeur 7 segments de la lettre E dans W
            return
            
d0F            movlw    H
'71'            ; On met la valeur 7 segments de la lettre F dans W
            return    
        
;-----------------------------------------------------------------------------------------------------
sortaff                                ; sortie sur les afficheurs 7 segments

            clrf    PORTB            
; Affichage des bits de aff1                    
            bcf        PORTC
,5            ; cathode 2
            bcf        PORTC
,6            ; cathode 3
            bcf        PORTC
,7            ; cathode 4
            bsf        PORTC
,4            ; cathode 1
            movf    aff1
,0            ; On met la valeur de aff1 dans W valeur 7 segments du chiffre
;            bsf        W,7                ; Point décimal si nécessaire            
            movwf    PORTB            
; On envoi la valeur de W sur le PORTB
            call    tempo            
; Faire une temporisation de 100µs
            
            clrf    PORTB            
; Affichage des bits de aff2                    
            bcf        PORTC
,4            ; cathode 1
            bcf        PORTC
,6            ; cathode 3
            bcf        PORTC
,7            ; cathode 4
            bsf        PORTC
,5            ; cathode 2
            movf    aff2
,0            ; On met la valeur de aff2 dans W valeur 7 segments du chiffre
;            bsf        W,7                ; Point décimal si nécessaire            
            movwf    PORTB            
; On envoi la valeur de W sur le PORTB
            call    tempo            
; Faire une temporisation de 100µs            
            
            clrf    PORTB            
; Affichage des bits de aff3                    
            bcf        PORTC
,4            ; cathode 1
            bcf        PORTC
,5            ; cathode 2
            bcf        PORTC
,7            ; cathode 4
            bsf        PORTC
,6            ; cathode 3
            movf    aff3
,0            ; On met la valeur de aff3 dans W valeur 7 segments du chiffre
;            bsf        W,7                ; Point décimal si nécessaire            
            movwf    PORTB            
; On envoi la valeur de W sur le PORTB
            call    tempo            
; Faire une temporisation de 100µs            

            clrf    PORTB            
; Affichage des bits de aff4                    
            bcf        PORTC
,4            ; cathode 1
            bcf        PORTC
,5            ; cathode 2
            bcf        PORTC
,6            ; cathode 3
            bsf        PORTC
,7            ; cathode 4
            movf    aff4
,0            ; On met la valeur de aff4 dans W valeur 7 segments du chiffre
;            bsf        W,7                ; Point décimal si nécessaire
            movwf    PORTB            
; On envoi la valeur de W sur le PORTB
            call    tempo            
; Faire une temporisation de 100µs
            
            bcf        PORTC
,1            ; affX non lu sortie S2 allant vers E2 : Scierie.asm            
            return                        
;-----------------------------------------------------------------------------------------------------
;
 Zone temporisation
;-----------------------------------------------------------------------------------------------------
tempo                                ;    temporisation de 100µs quartz 20Mhz/= 0,2µs
            movlw     D
'250'            ;    temporisation de 500µs quartz 4Mhz/= 1µs
            movwf    temp
boucle                                
;    boucle temporisation de 50µs
            decfsz    temp
,1
            goto    boucle
            
            movlw     D
'250'
            movwf    temp
boucle1                                
;    boucle1 temporisation de 50µs
            decfsz    temp
,1
            goto    boucle1
            
            return
;-----------------------------------------------------------------------------------------------------

    end


Merci à tous pour votre patience. Merci !

Pierre


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités