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 ---
- 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 ---
Modérateur : mazertoc
Petit problème sur les PIC16F883
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.
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
Petit problème sur les PIC16F883
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.
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
Bonjour Jérémy et à tous
list p=16f883,f=inhx8m
Voici les lignes de début de programme.
En attendant Merci.
Pierre.
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,5 (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
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.
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
Petit problème sur les PIC16F883
Petit problème sur les PIC16F883
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.
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
Petit problème sur les PIC16F883
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.
Merci à tous pour votre patience.
Pierre
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/O : 24 I/O : 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)h (7F)h Bank0
; Registre à usage général de (120)h à (16f)h Bank2 (170)h à (17F)h accès depuis (70)h (7F)h Bank0
; Registre à usage général de (1A0)h à (1EF)h Bank3 (1F0)h à (1FF)h accès depuis (70)h (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,5 (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,5 (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 = 0 (aller à écriture afficheurs)
nop ; si E2 PORTC,0 = 1
btfss PORTA,0 ; poid faible identification venant de sort2 Scierie.asm
goto bitaf0 ; si PORTA,0 = 0
goto bitaf1 ; si PORTA,0 = 1
;-----------------------------------------------------------------------------------------------------
bitaf0
btfss PORTA,1 ; poid fort identification venant de sort2 Scierie.asm
goto bitaf00 ; si PORTA,1 = 0
goto bitaf10 ; si PORTA,1 = 1
;-----------------------------------------------------------------------------------------------------
bitaf1
btfss PORTA,1 ; poid fort identification venant de sort2 Scierie.asm
goto bitaf01 ; si PORTA,1 = 0
goto bitaf11 ; si PORTA,1 = 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,2 = 1
btfss PORTA,2 ; si PORTA,2 = 0
bcf affx,0 ; si PORTA,2 = 0
btfsc PORTA,3 ; si PORTA,2 = 1
bsf affx,1 ; si PORTA,3 = 1
btfss PORTA,3 ; si PORTA,3 = 0
bcf affx,1 ; si PORTA,3 = 0
btfsc PORTA,4 ; si PORTA,3 = 1
bsf affx,2 ; si PORTA,4 = 1
btfss PORTA,4 ; si PORTA,4 = 0
bcf affx,2 ; si PORTA,4 = 0
btfsc PORTA,5 ; si PORTA,4 = 1
bsf affx,3 ; si PORTA,5 = 1
btfss PORTA,5 ; si PORTA,5 = 0
bcf affx,3 ; si PORTA,5 = 0
nop ; si PORTA,5 = 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/4 = 0,2µs
movlw D'250' ; temporisation de 500µs quartz 4Mhz/4 = 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.
Pierre
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités



