Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

programmation pic16f84



  1. #1
    vanhelsing69

    programmation pic16f84


    ------

    Bonjour,
    j'utilise le logiciel MPLAB v7.30 (programmation en assembleur), j'aimerai programmer le pic16f84. Je souhaiterai avoir le programme détaillé pour le dcf77 afin de pouvoir afficher l'heure et les minutes sur un afficheur LCD.
    Merci pour le temps que vous me consacrerez.

    -----

  2. Publicité
  3. #2
    Gérard

    Re : programmation pic16f84

    Citation Envoyé par vanhelsing69 Voir le message
    Bonjour,
    j'utilise le logiciel MPLAB v7.30 (programmation en assembleur), j'aimerai programmer le pic16f84. Je souhaiterai avoir le programme détaillé pour le dcf77 afin de pouvoir afficher l'heure et les minutes sur un afficheur LCD.
    Merci pour le temps que vous me consacrerez.
    Il suffit de l'écrire le prog et tu l'auras.

  4. #3
    vanhelsing69

    Re : programmation pic16f84

    bonjour,
    oui c'est facile à dire mais quand on ne connait rien du language afficheur, c'est beaucoup plus difficile, mais j'ai réussi à le trouver.

  5. #4
    vanhelsing69

    Re : programmation pic16f84

    Citation Envoyé par vanhelsing69 Voir le message
    bonjour,
    oui c'est facile à dire mais quand on ne connait rien du language afficheur, c'est beaucoup plus difficile, mais j'ai réussi à le trouver.


    je réctifie se que j'ai écri précédemment, je veux dire language assembleur et pas afficheur

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    Gérard

    Re : programmation pic16f84

    Pour les PIC, une seule adresse : Bigonoff
    http://www.abcelectronique.com/bigonoff/

  9. #6
    vanhelsing69

    Re : programmation pic16f84

    voila le programme avec le pic16f84.
    mais j'ai quelques erreurs, si vous pouviez m'aider, les erreurs se trouve a priorit au niveau "des étiquettes"

    merci pour le temps que vous me consacrerez




    LIST p=16f84
    #include<p16f84.inc>
    ;***************************** ****************************** *****
    ; declaration de variable *
    ;***************************** ****************************** *****
    int_suivante equ H'0c'
    INT_RB0 equ H'0d'
    cmpt_TIMER_0 equ H'0e'
    int_end equ H'0f'
    compteur_dcf77_59bits equ H'10'
    bit_synchro_dcf77_ok equ H'11'
    synchro_ok equ H'13'
    compteur_dcf77 equ H'14'
    VERIF_PULSE_1_Seconde equ H'15'
    HEURES_DCF equ H'16'
    MINUTES_DCF equ H'17'
    RESET_DU_COMPTEUR equ H'18'
    BITS_20_TEST equ H'19'
    Envoie_mise_heure equ H'1a'
    BITS_28_TEST equ H'1b'
    DELAY_150ms equ H'1c'
    BITS_35_TEST equ H'1d'
    TEST_PARITE equ H'1e'
    FLAG_PARITE equ H'1f'
    BITS_0_19 equ H'20'
    BITS_36_59 equ H'21'
    capture_bit_dcf77 equ H'22'
    BITS_21_27 equ H'23'
    DCF_HEURES equ H'24'
    DCF_MINUTES equ H'25'
    zero_DCF_minute equ H'26'
    un_DCF_minute equ H'27'
    zero_DCF_heure equ H'28'
    un_DCF_heure equ H'29'
    parite_paire equ H'2a'
    parite_impaire equ H'2b'
    FLAG_DCF equ H'2c'



    ;***************************** ****************************** ****
    ; demarrage sur reset

    ;***************************** ****************************** ****

    org 0h


    ;***************************** ***************************
    ; interrup RB0
    ;*************
    INT_RB0
    bcf STATUS , RP0 ; sélectionner banque0
    bcf STATUS , RP1

    btfsc INTCON,INTE ; bit4 tester si interrupt RB0 autorisée
    btfss INTCON,INTF ; oui, tester si interrupt RB0 en cours
    ; signale une transition sur la pin RB0 dans le sens déterminé par
    ; INTEDG du registre OPTION (b6)

    goto int_suivante ; non sauter

    call INT_RB0 ; oui, traiter interrupt RB0
    clrf cmpt_TIMER_0 ;clrf nb d'interruptions effectuées
    clrf TMR0 ;reset du timer0
    bcf INTCON,INTF ; effacer flag interupt RB0

    goto int_end ;fin interruption


    INT_RBO
    ;interruption rb0 portB RECEPTION DCF 77


    bcf STATUS,RP0
    bcf STATUS,RP1 ;en bank 0

    bsf INTCON,T0IE ;autorise le timer 0 des la 1ere interruption rb0

    btfss bit_synchro_dcf77_ok,0 ;la synchro a été détectée ou pas ?.....
    goto $+2 ; non pas encore
    goto compteur_dcf77_59bits ; oui alors prgm normal

    ; DETECTION du START-BIT
    ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
    ;detection_startbit
    movfw cmpt_TIMER_0 ;charge nb interruptions tmr0
    addlw -d'115' ; ;detection_start_bit-d'117'
    ;TMR0 cmpt doit etre au minimum à cette valeur pour le start-bit
    btfsc STATUS,C
    goto synchro_ok
    clrf cmpt_TIMER_0 ;clrf nb d'interruptions effectuées
    clrf TMR0 ;reset du timer0
    return

    synchro_ok ;on a détecté le bit de synchro, init du compteur

    clrf compteur_dcf77 ; init à 0

    bsf bit_synchro_dcf77_ok,0 ;c'est le bit de synchro, je signale sa prise en compte par ce flag
    bcf STATUS,RP0 ;en bank 0
    return

    compteur_dcf77_59bits
    ;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    bcf STATUS,RP0
    bsf PORTA,5 ;synchro ok led ON
    incf compteur_dcf77,f ; init à 0

    VERIF_PULSE_2_Seconde
    ;*********************
    movfw compteur_dcf77 ;compteur à 59 ?
    xorlw d'59' ; 3C en hexa
    btfss STATUS,Z
    goto VERIF_PULSE_1_Seconde

    movfw cmpt_TIMER_0
    ;charge nb interruptions tmr0 (2s-150ms)/256/66.56= 108.5 je mets 100
    addlw -d'100' ; ;detection_start_bit-d'117' ;
    btfsc STATUS,C
    goto VERIF_PULSE_1_Seconde

    clrf cmpt_TIMER_0 ;clrf nb d'interruptions effectuées
    clrf TMR0 ;reset du timer0

    clrf compteur_dcf77 ;pas glop! ...on reset tout
    bcf PORTA,5
    clrf HEURES_DCF ; on reset les variables DCF
    clrf MINUTES_DCF
    clrf bit_synchro_dcf77_ok ;on reset le bit_synchro_dcf
    return

    VERIF_PULSE_1_Seconde
    ;***************************** ********
    movfw cmpt_TIMER_0
    ;charge nb interruptions tmr0 (1s-150ms)/256/66.56= 58.6 je mets 45
    addlw -d'45' ; soit 760 ms minimum entre 2 pulses
    btfsc STATUS,C ;si inférieure à d45 C=1
    goto RESET_DU_COMPTEUR

    clrf compteur_dcf77 ;pas glop! ...on reset tout
    bcf PORTA,5
    clrf HEURES_DCF ; on reset les variables DCF
    clrf MINUTES_DCF
    clrf bit_synchro_dcf77_ok ;on reset le bit_synchro_dcf
    return

    RESET_DU_COMPTEUR
    ;***************************
    bcf STATUS,RP0
    movfw compteur_dcf77 ;compteur à 60 ?
    xorlw d'59' ; 3C en hexa
    btfss STATUS,Z
    goto $+2
    clrf compteur_dcf77 ;remets compteur à 0

    ENVOIE_MISE_A_HEURE
    ;***************************
    movfw compteur_dcf77 ;compteur à 0 ?
    btfss STATUS,Z ;test si Z=1
    goto BITS_20_TEST ;non on continu
    call Envoie_mise_heure ; vers affichage lcd
    return ;et on sort

    BITS_20_TEST
    ;****************
    movfw compteur_dcf77 ;test si bit 20 = 1 comme il se doit
    xorlw d'20'
    btfss STATUS,Z ;compteur à 20 ? alors bit C =1
    goto BITS_28_TEST
    call DELAY_150ms ; 153.755 exactement
    btfsc PORTB,0 ;tester si = 1 200ms =1 100ms = 0
    goto BITS_28_TEST
    bcf bit_synchro_dcf77_ok,0 ;alors erreur reception
    return

    BITS_28_TEST
    ;*****************
    bcf STATUS,RP0
    btfss bit_synchro_dcf77_ok,0 ;la synchro a été détectée ou pas ?.....
    goto BITS_35_TEST

    bcf STATUS,RP0
    movfw compteur_dcf77 ;teste la PARITEE PAIRE des bits 21 à 27 ==> bit 28
    xorlw d'28'
    btfss STATUS,Z ;compteur à 28 ? alors bit Z =1
    goto BITS_35_TEST
    call TEST_PARITE ;flag =0 ?...
    clrf FLAG_PARITE ;reset flag
    return

    BITS_35_TEST
    ;*****************
    bcf STATUS,RP0
    btfss bit_synchro_dcf77_ok,0 ;la synchro a été détectée ou pas ?.....
    goto BITS_0_19

    bcf STATUS,RP0
    movfw compteur_dcf77
    xorlw d'35' ;teste la PARITEE PAIRE des bits 29 a 34 ==> bit 35
    btfss STATUS,Z
    goto BITS_0_19
    call TEST_PARITE ;flag =0 ?...
    clrf FLAG_PARITE ;reset flag
    return

    BITS_0_19
    ;************
    movfw compteur_dcf77 ;compteur de 0 à 20 (hexa=14) ,on passe
    sublw d'19'
    btfss STATUS,C ;compteur à 21 ? alors bit C =0
    goto BITS_36_59
    return

    BITS_36_59
    ;*************
    movfw compteur_dcf77 ;compteur de 36(hexa=24) à 59(hexa=3B) ,on passe
    sublw d'35'
    btfsc STATUS,C ;compteur sup à 37(hexa=25)
    goto capture_bit_dcf77
    return

    capture_bit_dcf77
    ;***********************
    bcf STATUS,RP0 ;en bank 0
    bcf STATUS,Z ;clear bit Z

    BITS_29_34
    ;*************
    movfw compteur_dcf77 ;29 - 34 : Heures codées en BCD, bit de poids faible en premier
    sublw d'28'
    btfsc STATUS,C ;compteur à 29 ? alors bit C =0
    goto BITS_21_27
    goto DCF_HEURES

    BITS_21_27
    ;***************
    movfw compteur_dcf77 ;21 - 27 : Minutes codées en BCD, bit de poids faible en premier
    sublw d'20'
    btfsc STATUS,C ;compteur à 21 ? alors bit C =0
    goto $+2
    goto DCF_MINUTES
    return

    ;36 - 41 : Jour codé en BCD, bit de poids faible en premier.
    ;42 - 44 : Jour de la semaine codé en BCD, bit de poids faible en premier.
    ;45 - 49 : Mois codé en BCD, bit de poids faible en premier.
    ;50 - 57 : Année (sur deux chiffres) codées en BCD, bit de poids faible en premier.
    ;59 : Pas d'impulsion

    DCF_MINUTES
    ;**************
    bcf STATUS,RP0 ;en bank0
    call DELAY_150ms ; 153.755 exactement

    test1_valeur_bit_Parite
    ;**************************** ;calcul de la PARITE
    ;------------------------
    movfw PORTB ;charge valeur du portB
    andlw 0x01 ;garde seulemnt le bit 0
    xorwf FLAG_PARITE,f ;inverse le bit0 du flag ,doit etre à 0 pour une "PARITE PAIRE"

    ;test de la valeur retenue sur RB0
    ;---------------------------------------
    btfss PORTB,0 ;teste état du port si = 1
    goto zero_DCF_minute ;non a 0
    goto un_DCF_minute ;oui a 1

    zero_DCF_minute
    bcf STATUS,C ; force un 0 => Carry = 0
    rrf MINUTES_DCF,f ;décalage vers la droite ; faire entrer le bit par la gauche
    return

    un_DCF_minute
    bsf STATUS,C ; force un 1 => Carry = 1
    rrf MINUTES_DCF,f ;décalage vers la droite faire entrer le bit par la gauche
    return

    DCF_HEURES
    ;*************
    bcf STATUS,RP0 ;en bank0
    call DELAY_150ms ; 153.755 exactement

    test2_valeur_bit_Parite
    ;**************************** ;calcul de la PARITE
    ;------------------------
    movfw PORTB ;charge valeur du portB
    andlw 0x01 ;garde seulemnt le bit 0
    xorwf FLAG_PARITE,f ;inverse le bit4 du flag ,doit etre à 0 pour une "PARITE PAIRE"

    ;test de la valeur re‡ue sur RB0
    ;---------------------------------------
    btfss PORTB,0 ;teste état du port si = 1
    goto zero_DCF_heure ;non a 0
    goto un_DCF_heure ;oui a 1

    zero_DCF_heure
    bcf STATUS,C ; force un 0 Carry = 0
    rrf HEURES_DCF,f ;décalage vers la droite ; faire entrer le bit par la gauche
    return

    un_DCF_heure
    bsf STATUS,C ; force un 1 Carry = 1
    rrf HEURES_DCF,f ;décalage vers la droite ; faire entrer le bit par la gauche
    return

    TEST_PARITE
    ;¤¤¤¤¤¤¤¤¤¤¤¤¤

    ; on va vérifier que le bit de parité re‡u est identique au bit de parité calculé
    bcf STATUS,RP0 ;en bank0
    call DELAY_150ms ; 153.755 exactement


    movfw PORTB ;charge valeur PORTB
    andlw 0x01 ;sur RB0
    xorwf FLAG_PARITE,f ; xor avec la valeur calculée

    btfss FLAG_PARITE,0 ; si flag,0 = 0, alors nombre de "1" re‡us = pair, sinon impair.
    goto parite_paire
    goto parite_impaire

    parite_paire
    return
    ;parite_impaire
    bcf bit_synchro_dcf77_ok,0 ;traitement de l'erreur à écrire
    bcf PORTA,5 ;synchro nok led OFF
    clrf compteur_dcf77
    return

    Envoie_mise_heure
    ;**************************
    bcf STATUS,RP0 ;en bank 0

    bsf FLAG_DCF,1 ;autorise ecriture heure DCF vers le DS1307
    return
    end

  10. Publicité

Discussions similaires

  1. Réponses: 25
    Dernier message: 03/07/2014, 07h36
  2. pic16F84
    Par triste80 dans le forum Électronique
    Réponses: 89
    Dernier message: 14/05/2007, 12h42
  3. pic16F84
    Par peace2010 dans le forum Électronique
    Réponses: 64
    Dernier message: 07/05/2007, 22h26
  4. Pic16f84-04/p
    Par jo-electrons dans le forum Électronique
    Réponses: 2
    Dernier message: 30/09/2006, 19h50
  5. programmation PIC16F84
    Par nkoghe12001 dans le forum Électronique
    Réponses: 1
    Dernier message: 23/06/2006, 23h19
Découvrez nos comparatifs produits sur l'informatique et les technologies.