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
Goto , call pile sur pic 16f
Bonsoir,
Bon avec tous ce que tu nous à donner on va pouvoir travailler, j'ai vu le schéma ça me suffit largement pour commencer.
Quand tu fais un call il faut impérativement un retour, par l'instruction return, mais ça je suppose que tu le sais.
Coté gestion affichage, c'est bien sur du multiplexage, je commence un bout de code, et je te le mets ici.
Et je fais le ménage dans tout ton code.
PS: il est possible que ton programme plante, par dépassement de ton tableau, on y reviendra.
A+
Bon avec tous ce que tu nous à donner on va pouvoir travailler, j'ai vu le schéma ça me suffit largement pour commencer.
Quand tu fais un call il faut impérativement un retour, par l'instruction return, mais ça je suppose que tu le sais.
Coté gestion affichage, c'est bien sur du multiplexage, je commence un bout de code, et je te le mets ici.
Et je fais le ménage dans tout ton code.
PS: il est possible que ton programme plante, par dépassement de ton tableau, on y reviendra.
A+
Goto , call pile sur pic 16f
Goto , call pile sur pic 16f
Goto , call pile sur pic 16f
Goto , call pile sur pic 16f
Goto , call pile sur pic 16f
Goto , call pile sur pic 16f
Bonjour Guigui02, et tout le forum,
écrit une table en eeprom, ça se fait quand on manque de place, mais là tu n'as pas besoin, donc on fait un tableau.
Bon j'ai fait le ménage, reste la gestion des boutons, l'affichage, le décodage, je vois le reste demain.
A+
écrit une table en eeprom, ça se fait quand on manque de place, mais là tu n'as pas besoin, donc on fait un tableau.
Bon j'ai fait le ménage, reste la gestion des boutons, l'affichage, le décodage, je vois le reste demain.
Code : Tout sélectionner
;*****************************************************************************
Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct"
LIST p=16F876 ; Définition de processeur
#include <p16F876.inc> ; fichier include
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
;*************************************** assignations *****************************************
#DEFINE segment PORTB ; segment : RA0 = A, RA1 = B, RA2 = C, RA3 = D, RA4 = E, RA5 = F, RA6 = G, RA7 = H
#DEFINE anode1 PORTA,0 ; anode afficheur1 premier à droite
#DEFINE anode2 PORTA,1 ; anode afficheur2 deuxième à droite
#DEFINE anode3 PORTA,2 ; anode afficheur3 deuxième à gauche
#DEFINE anode4 PORTA,3 ; anode afficheur4 premier à gauche
;**********************************************************************************************
;****************************** déclaration des variables *************************************
;**********************************************************************************************
CBLOCK H'20' ; bank0
loop1 :1
loop2 :1
loop3 :1
afficheur1 :1
afficheur2 :1
afficheur3 :1
afficheur4 :1
secondes : 1
minutes : 1
heures : 1
scdu : 1
scdd : 1
minu : 1
mind : 1
calcul : 1
flag1 : 1
adra : 1
ENDC
;**************************** adresse de depart après reset **********************************
ORG H'0'
goto debut
;******************************** lieu des interruptions **************************************
ORG H'4'
retfie
;**********************************************************************************************
debut
;***********************************************************************************************
BANKSEL SSPSTAT ; passer en bank 1
;************************ configuration du registre SSPSTAT en bank 1 **************************
movlw B'11000000' ; SMP = 1 : fréquence de l'horloge du bus I2C = 100 kHz
movwf SSPSTAT ; CKE = 0 : Disable SMBus specific inputs
;************************ configuration du registre SSPADD en bank 1 ***************************
movlw B'00110001'
movwf SSPADD ; (SSPADD) = (FOSC / (4*f SCL)) - 1 = B'00110001'
;************************ configuration du registre OPTION_REG en bank 1 ***********************
movlw B'10000000' ;
movwf OPTION_REG ; résistances hors service
;************************* configuration du registre ADCON1 en bank 1 ***************************
movlw B'00000110'
movwf ADCON1 ; PORTA en mode digital
;**************** configuration des registres TRISA & TRISB & TRISC en bank 1 ******************
movlw B'00000000' ;
movwf TRISA ; configure les pattes dans TRISA
; 2(RA0), 3(RA1), 4(RA2), 5(RA3), 6(RA4), 7(RA5), 9(OSC1), 10(OSC2)
movlw B'00000000' ;
movwf TRISB ; configure les pattes dans TRISB
; 21(RB0), 22(RB1), 23(RB2), 24(RB3), 25(RB4), 26(RB5), 27(RB6), 28(RB7)
movlw B'01111111' ; configure les pattes dans TRISC
movwf TRISC ; 11(RC0), 12(RC1), 13(RC2), 14(RC3), 15(RC4), 16(RC5), 17(RC6), 18(RC7)
;********************* configuration du registre INTCON en bank 0,1,2,3 ************************
clrf INTCON ; interruption hors service
;************************ configuration du registre SSPCON en bank 0 ***************************
BANKSEL SSPCON ; passer en bank0
;***********************************************************************************************
movlw B'00101000'
movwf SSPCON
;**************************** "pour ne pas avoir des surprisses" ******************************
clrf PORTA ; PORTA à 0
clrf PORTB ; PORTB à 0
clrf PORTC ; PORTC à 0
;***********************************************************************************************
; ROUTINE i2c *
;***********************************************************************************************
I2C_start
call I2C_idle ; on attend que le bus I2C soit libre
bsf STATUS,RP0 ; passage en banque 1
bcf STATUS ,RP1 ; passage en banque 1
bsf SSPCON2,SEN ; SEN = 1 (lancement d'une opération Start)
bcf STATUS,RP0 ; passage en banque 0
bcf STATUS,RP1 ; passage en banque 0
return
I2C_idle
bsf STATUS,RP0 ; passage en banque 1
bcf STATUS,RP1 ; passage en banque 1
I2C_idle0
btfsc SSPCON2,ACKEN
goto I2C_idle0 ; le bit ACKEN n'est pas nul
btfsc SSPCON2,RCEN
goto I2C_idle0 ; le bit RCEN n'est pas nul
btfsc SSPCON2,PEN
goto I2C_idle0 ; le bit PEN n'est pas nul
btfsc SSPCON2,RSEN
goto I2C_idle0 ; le bit RSEN n'est pas nul
btfsc SSPCON2,SEN
goto I2C_idle0 ; le bit SEN n'est pas nul
btfsc SSPSTAT,R_W
goto I2C_idle0 ; le bit R_W n'est pas nul
bcf STATUS,RP0 ; passage en banque 0
bcf STATUS,RP1 ; passage en banque 0
return
; WRITE (movlw xxxx ; I2C_write)
I2C_write
call I2C_idle ; on attend que le bus I2C soit prêt
movwf SSPBUF
return
; accusé de reception slave vers master
I2C_ack_slave_to_master
call I2C_idle ; on attend que le bus I2C soit prêt
bsf STATUS,RP0 ; passage en banque 1
bcf STATUS,RP1 ; passage en banque 1
I2C_ACK_slave_to_master0
btfsc SSPCON2 , ACKSTAT
goto I2C_ACK_slave_to_master0 ; on attend la réception du bit ACK
bcf STATUS,RP0 ; passage en banque 0
bcf STATUS,RP1 ; passage en banque 0
return
; repeated start
I2C_repeated_start
call I2C_idle ; on attend que le bus I2C soit prêt
bsf STATUS,RP0 ; passage en banque 1
bcf STATUS,RP1 ; passage en banque 1
bsf SSPCON2,RSEN ; RSEN = 1 (lancement d'une opération Repeated Start)
bcf STATUS,RP0 ; passage en banque 0
bcf STATUS,RP1 ; passage en banque 0
return
; lecture (call i2c_read ; movwf variable )
I2C_read
call I2C_idle ; on attend que le bus I2C soit prêt
bsf STATUS,RP0 ; passage en banque 1
bcf STATUS,RP1 ; passage en banque 1
bsf SSPCON2,RCEN ; on lance la réception
I2C_read0
btfsc SSPCON2 , RCEN
goto I2C_read0 ; on attend la fin de la réception
bcf STATUS,RP0 ; passage en banque 0
bcf STATUS,RP1 ; passage en banque 0
movf SSPBUF,W
return
; accusé de reception du maitre vers esclave
I2C_ack_master_to_slave
call I2C_idle ; on attend que le bus I2C soit prêt
bsf STATUS,RP0 ; passage en banque 1
bcf STATUS ,RP1 ; passage en banque 1
bcf SSPCON2,ACKDT ; ACKDT = 0
bsf SSPCON2,ACKEN ; ACKEN = 1 (lancement d'une opération Acknowledge)
bcf STATUS,RP0 ; passage en banque 0
bcf STATUS,RP1 ; passage en banque 0
return
; non accusé de reception
I2C_noack
call I2C_idle ; on attend que le bus I2C soit prêt
bsf STATUS,RP0 ; passage en banque 1
bcf STATUS ,RP1 ; passage en banque 1
bsf SSPCON2,ACKDT ; ACKDT = 1
bsf SSPCON2,ACKEN ; ACKEN = 1 (lancement d'une opération Not Acknowledge)
bcf STATUS,RP0 ; passage en banque 0
bcf STATUS,RP1 ; passage en banque 0
return
; pour stopper l'esclave
I2C_stop
call I2C_idle ; on attend que le bus I2C soit prêt
bsf STATUS,RP0 ; passage en banque 1
bcf STATUS,RP1 ; passage en banque 1
bsf SSPCON2,PEN ; PEN = 1 (lancement d'une opération Stop)
bcf STATUS,RP0 ; passage en banque 0
bcf STATUS,RP1 ; passage en banque 0
return
;***********************************************************************************************
;********************************* "tableau de conversion" ************************************
;***********************************************************************************************
ORG H'600'
tab_bcd
addwf PCL,F
retlw B'10011100'
retlw B'01001000' ;0
retlw B'11111001' ;1
retlw B'00101100' ;2
retlw B'00111000' ;3
retlw B'10011001' ;4
retlw B'00011010' ;5
retlw B'00001010' ;6
retlw B'11111000' ;7
retlw B'00001000' ;8
retlw B'00011000' ;9
End
A+
Modifié en dernier par Temps-x le ven. 18 mai 2018 13:15, modifié 1 fois.
Goto , call pile sur pic 16f
La vache tu ne dort jamais toi lol. Super effectivement ton debut de prog est deja bien plus épuré que le mien lol.
C’est vrai que j’ai jamais pris le temp de virer tous ce qui ne me servais pas en debut de prog j’ai juste repris le prog de base de boigonoff et je rajouter ou configurer ce que j’avais besoin .... les define pareil je ne m’en sevais pas trop et pourtant on gagne en lisibilité ... enfin bref merci pour le leçon temp-x
C’est vrai que j’ai jamais pris le temp de virer tous ce qui ne me servais pas en debut de prog j’ai juste repris le prog de base de boigonoff et je rajouter ou configurer ce que j’avais besoin .... les define pareil je ne m’en sevais pas trop et pourtant on gagne en lisibilité ... enfin bref merci pour le leçon temp-x
Goto , call pile sur pic 16f
Bonjour Guigui02, et tout le forum,
A si je dors, mais très tard, car la nuit sans aucun bruit je suis plus lucide que le jour pour la programmation, je suis un noctambule.
La directive #DEFINE est très utile quand tu veux changer de PORTX
Une autre directive qui est utile BANKSEL : non de ton registre ou variable, et tu te retrouves dans la banque approprier
du registre ou variable sur laquelle tu veux écrire.
Bon ça fait la même chose qu'une macro que tu aurais fait, mais certain n'aime pas trop ce genre de directive.
J'ai bien vu que tu as repris les exemples du cours de Monsieur Bigonoff, et c'est très bien, car ça prouve que tu as la
volonté d'apprendre.
Pour ma part, je suis toujours un débutant, mais qui a de l'expérience, et ça serait prétentieux de dire je sais.
C'est pas une leçon, c'est de l'organisation de programme, car je vois que tu maitrises le langage ASM mieux que moi.
Ce qui te manque c'est de structurer ton programme, un simple organigramme écrit suffit, pas besoin d'un schéma.
Enfin si tu veux remercier quelle qu'un, remercie Jérémy qui a eu l'idée de créer le forum pour réunir les passionnés,
et ceux qui ont des problèmes à écrire un code.
A+
Guigui02 a écrit :
Source du message La vache tu ne dort jamais
A si je dors, mais très tard, car la nuit sans aucun bruit je suis plus lucide que le jour pour la programmation, je suis un noctambule.
La directive #DEFINE est très utile quand tu veux changer de PORTX
Une autre directive qui est utile BANKSEL : non de ton registre ou variable, et tu te retrouves dans la banque approprier
du registre ou variable sur laquelle tu veux écrire.
Bon ça fait la même chose qu'une macro que tu aurais fait, mais certain n'aime pas trop ce genre de directive.
J'ai bien vu que tu as repris les exemples du cours de Monsieur Bigonoff, et c'est très bien, car ça prouve que tu as la
volonté d'apprendre.
Pour ma part, je suis toujours un débutant, mais qui a de l'expérience, et ça serait prétentieux de dire je sais.
Guigui02 a écrit :
Source du message bref merci pour la leçon temp-x
C'est pas une leçon, c'est de l'organisation de programme, car je vois que tu maitrises le langage ASM mieux que moi.
Ce qui te manque c'est de structurer ton programme, un simple organigramme écrit suffit, pas besoin d'un schéma.
Enfin si tu veux remercier quelle qu'un, remercie Jérémy qui a eu l'idée de créer le forum pour réunir les passionnés,
et ceux qui ont des problèmes à écrire un code.
A+
Goto , call pile sur pic 16f
Hehe merci a jeremy alors ;-) pour banksel effectivement je ne conaissais pas en plus jai etait pas mal embeté avec les bank donc ce banksel pourras me servir ... sinon oui la volonté dapprendre je lai cest le temp qui me manque je me remet dans lelectronique de temps en temps mais cest impressionant comment les journee passe vite quand on proggrame mais jadore. En fait quand je tai dit merci pour la lecon cest de voir comment tu arrive a organiser le proggrame jai vraiment beaucoup de mal avec sa ya qua voir mon atelier cest le bordel lol mais cest comme tout faut que je me force a y arriver ...
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 47 invités