Exemple
de programme C - Commande en MLI simple
#pragma symbols code debug
objectextend optimize(4)
#include <reg51.h>
#include <stdio.h>
// domliAA1.c
// Commande moteur MLI par transistors MOSFET
//Port P3
sbit MG=P3^0;
sbit MD=P3^1;
sbit FC=P3^2;
sbit LED=P3^3;
//variables
unsigned char mem1;
unsigned char mem2;
unsigned char mem3;
unsigned char mem4;
unsigned char ecart;
unsigned char capt;
unsigned int i;
unsigned long j;
// Procédures d'interruptions
void MLID (void); //timer0 pour le moteurD
void MLIG (void); //timer1 pour le moteurG
void STOP (void); // Int0
//Prog principal
void main (void)
{
ET0=1;ET1=1;EX0=1;IT0=0;PX0=1;EA=1;
TMOD=0x22;
LED=1;
mem2=0x70;
mem4=0x80;
mem1=(255-mem2);
mem3=(255-mem4);
TH0=mem2;
TH1=mem4;
TR0=1;TR1=1;
do
{
P1=0xFF;
capt = P1;
switch (capt) // codage de la
position
{
case 0x7F : mem2 = 0xF0; mem4
= 0x00;LED=1;break;
case 0x3F : mem2 = 0xF0; mem4
= 0x10;LED=1;break;
case 0xBF : mem2 = 0xF0; mem4
= 0x20;LED=1;break;
case 0x9F : mem2 = 0xF0; mem4
= 0x40;LED=1;break;
case 0xDF : mem2 = 0xF0; mem4
= 0x80;LED=1;break;
case 0xCF : mem2 = 0xF0; mem4
= 0xA0;LED=1;break;
case 0xEF : mem2 = 0xF0; mem4
= 0xC0;LED=0;break;
case 0xE7 : mem2 = 0xF0; mem4
= 0xF0;LED=0;break; //centre
case 0xF7 : mem2 = 0xC0; mem4
= 0xF0;LED=0;break;
case 0xF3 : mem2 = 0xA0; mem4
= 0xF0;LED=1;break;
case 0xFB : mem2 = 0x80; mem4
= 0xF0;LED=1;break;
case 0xF9 : mem2 = 0x40; mem4
= 0xF0;LED=1;break;
case 0xFD : mem2 = 0x20; mem4
= 0xF0;LED=1;break;
case 0xFC : mem2 = 0x10; mem4
= 0xF0;LED=1;break;
case 0xFE : mem2 = 0x00; mem4
= 0xF0;LED=1;break;
}
mem1=(255-mem2);
mem3=(255-mem4);
}
while(1);
}
// *************************************************************************
void MLID (void) interrupt 1 //Mli moteur D
{
MD=!MD;
if (MD==0) TL0=mem4;
else TL0=mem3;
}
// **************************************************************************
void MLIG (void) interrupt 3 //Mli moteur G
{
MG=!MG;
if (MG==0) TL1=mem2;
else TL1=mem1;
}
// ****************************************************
void STOP (void) interrupt 0 //Arret
{
MD=0;MG=0;LED=1;
for (;;);
}
|