; * Programme principal
 Start BSF STATUS, RP0 ; Acces Bank1
 MOVLW 0xFB ; TRISA.b2 à 0 pour RA2 en sortie
 MOVWF TRISA
 BCF STATUS, RP0 ; Acces Bank0
 BSF PORTA, RA2 ; Allume la Led
 CALL Tempo
 BCF PORTA, RA2 ; Eteint la Led
 CALL Tempo
 GOTO Start ; Reboucle au départ
 END
La temporisation utilisée peut être améliorée de la sorte, afin d’obtenir des temps calibrés:
 CBLOCK 0x0C
 vWait1, vWait2, vWait3;
 ENDC

; * Tempo 500µS 1+1+165*(1+2)+1+2=500µS
 T_500us MOVLW 0xA5 ; 1 cy
 MOVWF vWait1 ; 1 cy
 NOP ; 1 cy
 _T1 DECFSZ vWait1, f ; 1 cy
 GOTO _T1 ; 2 cy
 NOP ; 1 cy
 RETURN ; 2 cy
 ; * Tempo 100ms 1+1+198*(2+500µS+1+2)+6+2=100'000µS = 100 mS
 T_100ms MOVLW 0xC6 ; 1 cy
 MOVWF vWait2 ; 1 cy
 NOP ; 1 cy
 _T2 CALL T_500us ; 2 cy + 500µS
 DECFSZ vWait2, f ; 1 cy
 GOTO _T2 ; 2 cy
 NOP ; 
 NOP ; 
 NOP ; 
 NOP ; 
 NOP ; 
 NOP ; 6 cy
 RETURN ; 2 cy
 ; * Tempo 1 S 1+1+10*(2+100'000µS+1+2)+2= 1,000054 secondes
 T_1s MOVLW 0x0A ; 1 cy
 MOVWF vWait3 ; 1 cy
 NOP ; 1 cy
 _T3 CALL T_100ms ; 2 cy + 100mS
 DECFSZ vWait3, f ; 1 cy
 GOTO _T3 ; 2 cy
 RETURN ; 2 cy

L’appel se fera donc par CALL T_1s pour une temporisation de 1 seconde.
Déclarations et Définitions principales sous MPLAB.
MPLAB est l'environnement de développement intégré Assembleur gratuit de Microchip.
Voici les principales déclarations les plus utiles:
ORG.
Définit l’adresse de l’instruction qui va suivre, utilisé pour le Reset et l’Interruption.
Le Reset se situe à l’adresse 0x0000 et se déclare de la façon suivante :
 ORG 0x0000 ; Déclaration du Reset
 GOTO Start
 Start MOVLW … … ; Programme principal
Si on utilise l’ Interruption, elle se déclarera de la façon suivante à la suite du Reset:
 ORG 0x0000 ; Déclaration du Reset
 GOTO Start
 ORG 0x0004 ; Déclaration de l’IT
 MOVLW 0x01
 MOVWF var
 ; ( il manque ici l'acquittement de l'interruption avant de revenir au programme interrompu)
 RETFIE
 Start MOVLW … …. ; Programme principal
Si l’IT n’est pas utilisée, la place mémoire ainsi libérée par sa non utilisation au niveau du vecteur sera utilisée par le code du programme lui-même.
INCLUDE.
Permet à l’assembleur d’inclure le texte d’un autre fichier dans le fichier source en cours.
 #include <p16F84A.inc >; définition du type de processeur
EQU.
Assignation de constante qui peut se déclarer de la façon suivante :
 MaValeur EQU 0x05 ; La variable MaValeur vaut 0x05
Une variable peut également se déclarer de la façon suivante :
 MaVariable EQU 0x0C ; MaVariable se trouve à l’adresse 0x0C
 MOVLW 0x12 ; W=0x12
 MOVWF MaVariable ; W est stocké dans MaVariable
CBLOCK …. ENDC :.
On peut aussi déclarer des zones de plusieurs variables à l’aide de la directive CBLOCK …. ENDC
Ainsi,
 CBLOCK 0x00C ; début du bloc des variables
 Mavariable : 1 ; 1 octet pour Mavariable
 Latempo : 2 ; 2 octet pour Latempo
 Truc, Muche ; 1 octet pour Truc et 1 octet pour Muche
 ENDC 
défini plusieurs variables d’adresses consécutives: Mavariable à l’adresse 0x0C et La tempo à l’adresse 0x0D.
CONFIG :.
Permet de configurer les « fusibles » internes du PIC à activer par le programmateur.
 __CONFIG _CP_OFF &_WDT_ON
Demande de ne pas positionner le fusible de protection en lecture et d’activer le WatchDog.
Liste des bits du mot de Configuration:.
 _CP_ON ou_CP_OFF : Code Protection bit
 _PWRTE_ON ou_PWRTE_OFF : Power-up Timer enable
 _WDT_ON ou_WDT_OFF : Watch dog Timer enable
 _LP_OSC : Oscillateur LP (low power)
 _XT_OSC : Oscillateur XT (quartz)
 _HS_OSC : Oscillateur HighSpeed
 _RC_OSC : Oscillateur RC
#DEFINE.
Permet de définir une chaîne de substitution :
 #define BitLED PORTA, 2
LIST.
Liste des directives à l’attention du pré-processeur.
 LIST p=16F84A ; Le PIC utilisé est un 16F84A
END.
Définit la fin du programme.
Description matérielle interne du PIC 16F84.
Nous allons donner dans cette section un peu d'information sur l'architecture interne du PIC 16F84.
Nous prenons le Timer 0 comme exemple.
Le timer0.
Le timer0 est un timer sur 8 bits. C'est totalement visible sur la figure ci-dessous. Les bits des registres 8 bits seront toujours repérés de b0 (poids faible) à b7 (poids fort).
Que voit-on sur cette figure ?
L'interruption de débordement du timer 0.
Mettre en route le timer0 est une chose, mais déclencher une interruption en est une autre. Il nous faut maintenant documenter ce mécanisme.
Nous avons déjà rencontré un drapeau lors de la description du timer 0 : le bit "TMR0IF" du registre INTCON. Si vous voulez que ce bit soit à 0, c'est à vous, programmeur, de le faire.
Comme on peut le voir sur la figure ci-dessous, c'est le registre INTCON qui est responsable de la gestion des interruptions.
Pour réaliser l'interruption, il faut réaliser un front montant dans l'ellipse rouge : on en déduit immédiatement les bits à mettre à 1 dans INTCON, à savoir T0IE et GIE. Vous ne voyez pas de front montant ? C'est normal il est en fait réalisé par le bit "TMR0IF" du registre INTCON. Ce que permettent les bits T0IE et GIE, c'est tout simplement d'acheminer ce front d'horloge vers la fameuse ellipse rouge.
Remarque : Sur la documentation ci-dessus, vous trouvez l'appellation T0IF au lieu de TMR0IF. Malheureusement, le nom des bits dépend des compilateurs C ou assembleurs utilisés. Par exemple, le compilateur Hitech C appelle effectivement ce bit T0IF.
Premiers pas avec un compilateur C.
Vous pouvez lire la section d'un autre projet pour découvrir la programmation en C. Vous y trouverez, par exemple, la gestion du timer0, y compris avec interruption.
Contributeurs.
[il faut pratiquer pour apprendre mais pas le contraire]

Photographie/Fabricants/Panasonic/Panasonic Lumix DMC-LS70

The Guild 2
"The Guild 2" est un jeu vidéo de l'entreprise Jowood. Celui-ci mêle habilement jeu de rôle et la gestion.
Ce jeu a la particularité d'être « modifiable » (on peut aussi dire « scriptable » ou « modable »), ce tutoriel s'intéressera donc à ce jeu et à la création de modifications du jeu (dit « mods »).