Débuter avec un microcontrôleur PIC

Le schéma et le cablâge

Dans cet exemple je choisis un microcontrôleur 8 bits de Microchip un PIC12F629. Il possède 6 entrées/sorties numériques, 1 Koctets de mémoire flash et il se loge dans un boitier DIL à 8 broches.

Le but est de programmer ce microcontrôleur pour faire clignoter une LED en utilisant le basic ou le C. Un premier programme qui permettra après de passer à d'autres plus complexes ultérieurement.

Le pic sera câblé comme sur le schéma structurel ci-contre : Il est alimenté en 5 V ( attention il ne supporte guère plus!), un condensateur de 100 nF assure le découplage de l'alimentation, la broche 4 (MCLR) est mise au + 5V via une résistance de 10 kohms, car c'est la broche de remise à zéro du microcontrôleur à l'état bas.
Sur la sortie 5 (GP2) une LED et sa résistance série sont montées. Les autres sorties GP0 à GP5 peuvent être utilisées de la même façon.
Attention toutefois à ne pas surcharger le microcontrôleur ( 25 mA maxi pour les sorties).

On utilise l'oscillateur interne du PIC à 4 Mhz, on se passe d'un oscillateur à quartz, ce qui simplifie le schéma.

Il faut mieux laisser libre GP0 et GP1 pour permettre de programmer le PIC en ICSP( In Circuit Programming).

La réalisation du montage peut se faire sur une plaque de connexions comme sur la photo ci-contre ou sur une plaquette d'expérimentation.

La programmation en basic

Programmer un microcontrôleur en basic est de loin la méthode la plus simple. Ici pas d'assembleur, quelques lignes de programmes suffisent.

Il faut pour cela un environnement de développement (IDE) et un programmateur pour PIC :

- Le programmateur est le PIC-01 de SEEIT, mais tout autre programmateur convient.

- L'IDE est MikroBasic de Mikroelectronika en version de démonstration, la limitation de code à 2Koctets suffit largement pour cette application.

Voici le programme

 
'Jmd 10/2025
'jmdefais@wanadoo.fr
' Pic 12F629
' Oscillateur interne 4 Mhz

program led_clignotante

main:
  TRISIO = 0          ' Port GPIO en sortie
  do                  ' Début bouvle
      GPIO = $FF      ' Port GPIO au niveau 1
      delay_ms(500)  ' Attend 0,5 s
      GPIO = 0       ' Port GPIO au niveau 0
      delay_ms(500)  ' Attend 0,5 s
  loop until 0 = 1   ' Boucle sans fin
end.
  
  

 

 

Quelques commentaires supplémentaires :

' représente des commentaires et ne sont pas pris en compte pour la compilation. Le programme commence à main :

TRISIO =0 met les broches GP0 à GP5 en sorties

Do Loop until est une boucle qui se répète sans fin, car la condition 0 = 1 ne sera jamais vraie.
Dans la boucle, toute les 0,5 seconde on change l'état des sorties, avec la fonction delay_ms ( délai d'attente en mS)

$FF est de l'héxadécimal et égal à 255 en décimal, ce qui met tout le Port GP à 1.

L'utilisation de MikroBasic est très simple, il suffit de choisir le PIC et son horloge, écrire les lignes de code et de les compiler.

La programmation en C

Programmer un microcontrôleur en C est un peu plus compliqué. Il faut bien respecter la syntaxe.

L'environnement de développement (IDE) est celui du constructeur, MPLAB X IDE de Microchip et le programmateur le PICKIT5 qui permet la programmation ICSP, mais tout autre programmateur convient.

Voici le programme

 

 

/* 
 * File:   main.c
 * Author: JMDefais
 *
 * Created on 27 octobre 2025, 14:54
 */

#include < stdio.h >
#include < stdlib.h >
#include < xc.h >

// CONFIG
#pragma config FOSC = INTRCIO   // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
#pragma config WDTE = ON        // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF      // Power-Up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = ON       // GP3/MCLR pin function select (GP3/MCLR pin function is MCLR)
#pragma config BOREN = ON       // Brown-out Detect Enable bit (BOD enabled)
#pragma config CP = OFF         // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)


#define _XTAL_FREQ 4000000
#define LED GPIO2

int main()
{
TRISIO = 0;//GPIO as Output PIN
while(1)
{
LED = 1;
__delay_ms(500);
LED = 0;
__delay_ms(500);
}

return 0;
} 
  
  

L'utilisation de MPLAB X IDE est moins aisée que MikroBasic, car il faut inclure dans le projet un fichier de configuration.

Quelques commentaires supplémentaires :

/* représente des commentaires et ne sont pas pris en compte pour la compilation. Le programme commence à int main ()

{} encadre les instuctions qui doivent se terminer par un ; (point virgule)

#include inclus les fichiers d'entête stdio.h et stdlib.h sont automatiquement placés par l'IDE . xc.h est à placer.

// CONFIG configure les fusibles, comme l'oscillateur interne avec FOSC = INTRCIO

#define _XTAL_FREQ 4000000 donne la fréquence de l'oscillateur interne nécessaire à l'instruction _delay_ms.

#define LED GPIO2 indique que la LED est branchée à GP2. Il suffit de lui donner une valeur 0 ou 1 dans le programme pour l'allumer ou l'éteindre.

TRISIO donne la direction du Port GP, ici en sortie

while (1) est une boucle sans fin car la valeur 1 ne peut être vraie.

Programmer le microcontrôleur

Il faut un programmateur et son logiciel. On utilise le fichier au format Intel (.hex) créé par le compilateur.

Tous les fichiers sont disponibles pour les 2 IDE.

Fichiers Mikrobasic
Fichiers MPLAB X