# Fiche méthode : Microcontrôleurs
## 1. Architecture de base
### 1.1 Composants principaux
- **Program Counter (PC)** : Registre 13 bits qui pointe vers la prochaine instruction à exécuter.
- **Instruction Register (IR)** : Stocke l'opcode de l'instruction en cours.
- **Mémoire de programme (PM)** : 14 bits, stocke les instructions.
- **Mémoire de données (DM)** : 8 bits, stocke les données.
- **ALU** : Unité arithmétique et logique pour les calculs.
- **Accumulateur (W)** : Registre de travail principal.
- **Stack** : Pour les appels de sous-routines et les interruptions.
### 1.2 Architecture Harvard
- Sépare la mémoire de programme (PM) et la mémoire de données (DM).
- Permet des accès simultanés aux instructions et aux données.
## 2. Programmation en assembleur
### 2.1 Instructions de base
- Transfert de données : `MOVF`, `MOVWF`, `MOVLW`
- Opérations arithmétiques : `ADDWF`, `SUBWF`, `INCF`, `DECF`
- Opérations logiques : `ANDWF`, `IORWF`, `XORWF`
- Contrôle de flux : `GOTO`, `CALL`, `RETURN`, `RETFIE`
### 2.2 Exemple de code
```assembly
; Incrémente PORTB
MOVF PORTB, W ; Charge la valeur de PORTB dans W
INCF W, W ; Incrémente W
MOVWF PORTB ; Stocke le résultat dans PORTB
```
## 3. Gestion des interruptions
### 3.1 Processus d'interruption
1. Sauvegarde du PC dans la pile
2. Chargement de l'adresse du vecteur d'interruption dans le PC
3. Exécution de la routine d'interruption
4. Retour à l'exécution normale avec `RETFIE`
### 3.2 Configuration
- Activer les interruptions globales (GIE)
- Configurer les sources d'interruption individuelles
## 4. Timers et compteurs
### 4.1 Utilisation
- Mesure de temps
- Génération de délais précis
- Comptage d'événements
### 4.2 Configuration
- Choisir la source d'horloge (interne/externe)
- Configurer le prescaler pour ajuster la fréquence
- Activer les interruptions si nécessaire
## 5. Conversion analogique-numérique (ADC)
### 5.1 Principe
- Convertit un signal analogique en valeur numérique
### 5.2 Configuration
- Choisir la résolution (ex: 10 bits)
- Sélectionner le canal d'entrée
- Configurer le format de résultat (ADFM bit)
## 6. Techniques de programmation
### 6.1 Débouncing des boutons
```assembly
CHECK_BUTTON:
BTFSC PORTD, 0 ; Vérifie si le bouton est pressé
GOTO NOT_PRESSED
; Code pour gérer le bouton pressé
GOTO CHECK_BUTTON
NOT_PRESSED:
; Code pour gérer le bouton non pressé
GOTO CHECK_BUTTON
```
### 6.2 Utilisation de la pile
- Pour les appels de sous-routines : `CALL` pousse PC sur la pile, `RETURN` récupère l'adresse
- Pour les interruptions : Sauvegarde automatique du contexte
## 7. Astuces et bonnes pratiques
- Utiliser des commentaires pour expliquer le code
- Organiser le code en sections (initialisation, boucle principale, sous-routines)
- Gérer correctement les changements de banque mémoire
- Utiliser des macros pour le code répétitif
- Tester chaque partie du code individuellement avant l'intégration
## 8. Conversion de bases numériques
- Hexadécimal vers binaire : 0x14 = 0b00010100
- Binaire vers hexadécimal : 0b01010101 = 0x55
- Conversions décimales : 0xECE = 3790 (base 10)
N'oubliez pas de consulter la documentation spécifique du microcontrôleur que vous utilisez pour les détails précis de l'implémentation.
