Académique Documents
Professionnel Documents
Culture Documents
Influence des travaux puplics sur L’environnement (Université Sultan Moulay Slimane)
Le MikroC
Le MikroC
V. Les opérateurs
1- Opérateurs de base
Opérateur Fonction
+ Addition
- Soustraction
* Multiplication
/ Division entière
% Reste de la division entière
2- Opérateurs d’affectation
Opérateur Fonction
&& ET logique
|| OU logique
! NON logique
4- Opérateurs logique sur les Bits
Opérateur Fonction Exemples
& ET x=a&b
| OU x=a|b
^ OU exclusif x=a^b
~ NON x=~a
>> Décalage à droite des bits x=a>>3
<< Décalage à gauche des bits x=a<< 2
Le MikroC
5- Opérateurs de comparaison
Remarque : En C, FAUX est la valeur 0, VRAI est tout ce qui est ≠ 0.
Opérateur Fonction Exemple
== Egale à x = a==3 ; x sera VRAI si a est égal à 3, FAUX sinon
!= Différent de x = a!=3 ; x sera VRAI si a est différent de 3, FAUX sinon
> Supérieur à x = a>3 ; x sera VRAI si a est supérieur à 3, FAUX sinon
< Inférieur à x = a<3 ; x sera VRAI si a est inférieur à 3, FAUX sinon
>= Supérieur ou égal à x = a>=3 ; x sera VRAI si a est supérieur ou égal à 3,.
FAUX sinon
<= Inférieur ou égal x = a<=3 ; x sera VRAI si a est inférieur ou égal à 3, FAUX
sinon
if (condition) if (condition) {
Action1; Action1;
[else Actions;
Action;] ...
}
[else {
Action
Action2; ...
}]
Le MikroC
...
}
4- Boucles: faire... Tant que .....
do {
action;
}
while (condition)
Exemple
do {
x-=y;
Portb=x;
}
while (x!=0);
5- Boucles: pour .....
for ([expression_1] ; [expression_2] ; [expression_3])
action ;
Exemple
for(x=20 ; x> 0 ; x--)
portb=x;
Indice 0 1 2 3 4 5
valeurs 12 34 -16 77 103 -87
Le MikroC
Par exemple :
short table[4] ={ -1,77 ,10,44};
➢ Si le nombre de données dans la liste d’initialisation est inférieur à la dimension du tableau, seuls
les premiers éléments seront initialisés. Les autres éléments seront mis à zéro.
➢ Lors d’une initialisation, il est également possible de ne pas spécifier le nombre d’éléments du
tableau. Par défaut, il correspondra au nombre de constantes de la liste d’initialisation.
Tableau multi-dimensions
type nom-du-tableau[dim1][dim2]
Exemple float m[50][20]; /* tableau à 2 dimensions 50x20 */
Le MikroC
void interrupt() {
counter++;
TMR0 = 96;
INTCON = 0x20; //baisser le flag
}
Exemple
Dans cet exemple, la fonction principale fait clignoter les bits du port D 4 par 4 et la fonction de
l’interruption fait clignoter les bits du port C 4 par 4. La durée d’allumage et d’extinction est 500ms.
Le MikroC
void interrupt()
{
//faire clignoter les leds du portc 5 fois
int i;
for(i=0; i<5; i++) {
portc=0x0F;
delay_ms(500);
portc=0xF0;
delay_ms(500);
}
INTCON.intf = 0; //baisser le flag
}
//_______________________________________________
void main() {
trisc=0x00;
trisd=0x00;
intcon.gie=1; //bit de valdation de toutes les interruptions
intcon.inte= 1; //bit de valdation de l'interruption INT
while(1){
portd=0xF0;
delay_ms(500);
portd=0x0F;
delay_ms(500);
}
}
Le MikroC
Le programme correspondant
Le MikroC
trisc=0xFF;
trisd=0xFF;
while(1){
a=portc;
b=portd;
x=a+b;
portb= bcdTo7seg(x);
RB7_bit=0;
}
}
Schéma
Le programme
void main() {
short unsigned c,a,b;
trisb=0x00;
trisd=0xFF;
while(1){
c=portd;
a=c&0x0F; //extraire les 4 bist de la droite
b=c>>4; //extraire les 4 bist de la gauche
portb=a+b;
}
}
4. Afficher7segment à 4 digits
Schéma
Programme :
Le MikroC
.................................
.................................
.................................
.................................
delay_ms(50);
.................................
.................................
.................................
.................................
delay_ms(50);
.................................
.................................
.................................
.................................
Le MikroC
delay_ms(50);
.................................
.................................
.................................
.................................
delay_ms(50);
} }
________________________________________________________
sbit LCD_RS at RB6_bit;
sbit LCD_EN at RB7_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;
sbit LCD_RS_Direction at TRISB6_bit;
sbit LCD_EN_Direction at TRISB7_bit;
sbit LCD_D4_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB5_bit;
void main() {
short unsigned a,b;
unsigned int x ;
char ta[4],tb[4];
char tx[6];
char *tt;
trisc=0x00;
trisd=0xFF;
Lcd_Init(); //initilisation du LCD
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR);
Delay_ms(500);
Le MikroC
while(1){
a=portd&0x0F;
b=portd>>4;
x=a*b;
bytetostr(a,ta); // transformer le contenu de a en chaine de caractères
bytetostr(b,tb); // transformer le contenu de b en chaine de caractères
wordtostr(x,tx); // transformer le contenu de c en chaine de caractères
tt=Ltrim(ta);
Lcd_Out(1,6,"Calcul"); // à la ligne 1 conne 6 , on affiche "calcul"
Lcd_Out(2,1,Ltrim(ta));
Lcd_Out_Cp("x");
Lcd_Out_Cp(Ltrim(tb));
Lcd_Out_Cp("=");
Lcd_Out_Cp(Ltrim(tx));
}
}
Programme réception
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;
Le MikroC
void main() {
char a;
char ta[4];
UART1_Init(4800);
Lcd_Init(); //initilisation du LCD
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR);
Delay_ms(500);
Lcd_Out(1,2,"Donnee recue");
while(1){
UART1_Write(ta);
if (UART1_Data_Ready() == 1) {
a = UART1_Read();
bytetostr(a,ta);
Lcd_Out(2,5,ta);
}
} }
programme d’émission
sbit LCD_RS at RB6_bit;
sbit LCD_EN at RB7_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;
void main() {
char a;
char ta[4];
trisd=0xFF;
UART1_Init(4800);
Lcd_Init(); //initilisation du LCD
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR);
Delay_ms(500);
Lcd_Out(1,2,"Donnee emise");
while(1){
a=portd;
bytetostr(a,ta); // transformer le contenu de a en chaine de caractères
UART1_Write(a);
Lcd_Out(2,5,ta);
Le MikroC
}
}