Comme je suis nouveau dans la programmation, Maï m'aide a apprendre ce monde magnifique de la programmation des pics en assembleur.
soyez indulgent, je comprend vite mais il faut m'expliquer longtemps
d'abord voici le code de départ
Code : Tout sélectionner
;*******************************************************************
;
;********************************************************************
;
; Auteur :maï/JMarc
; Version :1.0
; Date :09/2016
;
;********************************************************************
; Note:PIC 16F876A_04
;********************************************************************
ERRORLEVEL-302
list p=16f877 ;liste directive du 16F876a
#include "P16F877.INC"
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
;*********************** Déclarations des définitions ***************
;*********************** Assignations *******************************
DRAM EQU 0x20 ;début Mémoire Ram banque0
FRAM EQU 0X7F ;fin Mémoire Ram banque0
QUARTZ EQU .4 ;Valeur du quartz en MHz
DIVISEUR1 equ .8 ;ici 8 du TMR
TEMPS EQU .100000 ;Valeur en µs Normalement .100000
TIMER1 EQU .65535-((QUARTZ*TEMPS)/(.4*DIVISEUR1)-2);les-2 pour temps chargement timer1
TIMER1L EQU LOW TIMER1 ;valeur
TIMER1H EQU HIGH TIMER1 ;pour 100 ms qu'il faudra incorporer dans le timer 1
;*********************** Déclaration des Globales *******************
GLOBAL Sauv, Sauv1, Temp
GLOBAL ComptSu,ComptSd
UDATA
Sauv res 1
Sauv1 res 1
Temp res 1
ComptSu res 1
ComptSd res 1
;*********************** Définitions variables en RAM PAGE0 *********
CBLOCK 0x20
;Sauv,Sauv1,Temp
;ComptSu
;ComptSd
ENDC
;*********************** Macro **************************************
Banque0 MACRO
BCF STATUS,RP0 ;Acces bank0
BCF STATUS,RP1
ENDM
Banque1 MACRO
BSF STATUS,RP0 ;Acces bank1
BCF STATUS,RP1
ENDM
Banque2 MACRO
BCF STATUS,RP0 ;acces bank2
BSF STATUS,RP1
ENDM
Banque3 MACRO
BSF STATUS,RP0 ;Acces bank4
BSF STATUS,RP1
ENDM
;********************************************************************
ORG 0x00
GOTO Principale
;****************** Gestion des interruptions ***********************
ORG 0x04
MOVWF Sauv ;sauve W
SWAPF STATUS, 0 ; dans w
MOVWF Sauv1 ;sauve status
MOVLW TIMER1L ;oui
MOVWF TMR1L
MOVLW TIMER1H ;on recharge le timer1
MOVWF TMR1H
BCF PIR1,TMR1IF ;RAZ du drapeau de TMR1
INCF Temp,F ; à 10 cela fera 1s
SWAPF Sauv1,0 ; dans w
MOVWF STATUS ;restaure status
SWAPF Sauv, 1 ; 1=f
SWAPF Sauv, 0 ;restaure W 0=w
RETFIE ; retour int
;*********************** AFFICHAGE des SECONDES *******************************
;poids fort ComptSd ;poid faible ComptSu
;******************************************************************************
LedTable
addwf PCL,f ; ajout au PC
retlw B'00111111' ; LED allum?es pour afficher 0
retlw B'00000110' ; LED allum?es pour afficher 1
retlw B'01011011' ; LED allum?es pour afficher 2
retlw B'01001111' ; LED allum?es pour afficher 3
retlw B'01100110' ; LED allum?es pour afficher 4
retlw B'01101101' ; LED allum?es pour afficher 5
retlw B'01111101' ; LED allum?es pour afficher 6
retlw B'00000111' ; LED allum?es pour afficher 7
retlw B'01111111' ; LED allum?es pour afficher 8
retlw B'01100111' ; LED allum?es pour afficher 9
retlw B'00000000' ; Effacement toutes LED
;*******************************************************************
; Début du Programme
;*******************************************************************
Principale
;*********************** Mise a zéro de la mémoire RAM banque0 ******
MOVLW DRAM
MOVWF FSR
Effa CLRF INDF
INCF FSR,F ;RAZ RAM
BTFSS FSR,7
GOTO Effa
;*********************** Initialisation des ports *******************
CLRF PORTA
CLRF PORTB
CLRF PORTC
Banque1 ;accés bank1
CLRF TRISA ;PortA en sortie
CLRF TRISB ;Broches RB0:RB7 en sortie
CLRF TRISC ;Broches RC0:RC7 en sortie
MOVLW B'00000110' ;PORTA digitale
MOVWF ADCON1 ;
;*********************** validation des INT ************************
BSF INTCON,GIE ;validation des INT
BSF INTCON,PEIE
BSF PIE1,TMR1IE ;valide le TMR1
Banque0
;******************* Initialisation des timers/compteurs *************
; ici on va travailler avec le TIMER1
;*********************************************************************
MOVLW (0)|(0)|(1<<T1CKPS1)|(1<<T1CKPS0)|(0<<T1OSCEN)|(0<<T1SYNC)|(0<<TMR1CS)|(0<<TMR1ON)
MOVWF T1CON
MOVLW TIMER1H ;on charge le TIMER1
MOVWF TMR1H
MOVLW TIMER1L ;voir son calcul dans
MOVWF TMR1L ;assignation
BSF T1CON,TMR1ON ;arrêt TMR1 bit a 1
;********************** Boucle principale *************************************
AFFI
MOVFW ComptSu ; compteur des unitées
CALL LedTable
MOVWF PORTC
MOVFW ComptSd ; compteur des dizaines
CALL LedTable
MOVWF PORTB
Boup MOVLW 0X0A ;on test si 10fois 100mS 0x0A
SUBWF Temp,W ; temp - w
BTFSS STATUS,Z ; si resultat = 0, drapeau z de status =0, alors saut
GOTO BouP ;NON on retourne dans la boucle P
INCF ComptSu ; oui compteur seconde +1
MOVLW 0X0A ; on test si poid faible >9
SUBWF ComptSu,W
BTFSS STATUS,C
GOTO Compt
INCF ComptSd
CLRF ComptSu
Compt MOVLW 0X06 ;ici on test si compteur =60S
SUBWF ComptSd,W ; ComptSd - w
BTFSS STATUS,Z
GOTO AFFI ; NON on retourne dans boucle P
CLRF ComptSu ;RAZ du compteur
CLRF ComptSd
GOTO AFFI
;*********************** Allez c'est partie *************************
END

il faut faire le test pour savoir si ton compli prend bien : .11 ou 11
j'ai encore fait une boulette ici