Bonjour à tous,
Voici mon problème j'utilise un pic 18f452 avec C18 comme compilo.
j'utilise l'UART tool de pickit2,
donc j'envoi le chiffre 15 à mon pic.
voici mon programme
/* Programme de démonstration de la liaison série
Fichier : RS232.C
Projet : RS232.MCP
Compilateur : MPLAB C18
date : 01/02/2006
Auteur : Philippe Lucidarme (philippe.lucidarme@univ-angers.fr)
Cible : PIC18F452
Carte : CNC Micro
Quartz : 20 MHz
Résumé : programme de démonstration de la liaison série
descritpion : ce programme reçoit un caractère depuis la liaison série.
Si c'est une lettre de l'alphabet en minuscule, le programme la cenvertie en
majuscule et la renvoie sur la liaison série.
*/
//************************** fichier d'entete ****************************** ****/
#include <p18f452.h> // Pour les registres du PIC18F452
#include <usart.h> // Pour le périphérique USART qui gére la liaison série
#include <stdio.h>
#include <delays.h>
//************ Instruction de configuration du pic et de l'horloge *************/
#pragma config WDT = OFF // Pas de watchdog
#pragma config OSC = HS // Quartz HS pour un quartz 20MHz HS
#pragma config LVP=OFF
//****************************de but du programme********************* ***********/
void delay (int cnt)
{
unsigned int i;
for (i = 0; i < cnt ; i++);
}
void main(void) // Programme principal
{
int ch1=0; // Caractére qui sera reçu sur la liaison série
int ch2=0;
int oeil=0;
// Configure tous les ports en entrée (1 = input / 0 = output)
TRISA = 0b11111111; // XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX
TRISB = 0b11111111; // XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX
TRISC = 0b10111111; // RX | TX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX
TRISD = 0b11111111; // XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX
TRISE = 0b111; // XXXXXX | XXXXXX | XXXXXX
TRISBbits.TRISB4=0;
PORTBbits.RB4=1;
ch1=0;
ch2=0;
oeil=0;
// Configure la liaison série :
OpenUSART ( USART_TX_INT_OFF & // Pas d'interruption sur l'émission
USART_RX_INT_OFF & // Pas d'interruption sur la réception
USART_ASYNCH_MODE & // Mode asynchrone
USART_EIGHT_BIT & // Transmission sur 8 bits (1 octet)
USART_CONT_RX & // Reception continue
USART_BRGH_HIGH , // Haute vitesse
25); // (20e6 - 115200) / (16 * 115200) 10
// Transmissions sur la liaison série
while (1) // Boucle infinie
{
oeil = ch1 * 10 + ch2;
PORTBbits.RB4=0;
Delay10KTCYx(150);
PORTBbits.RB4=1;
printf("Hello %s essai %d ",oeil,oeil);
printf("grrr %u ",oeil);
if (DataRdyUSART()) // Attends la présence d'un caractère sur la liaison série
{
ch1=ReadUSART(); // Lit le caractère
ch2=ReadUSART();
WriteUSART(ch1);
// Renvoie le caractère après traitement
printf("toti");
}
}
}
DOnc ch1 est bien égale à 1
ch2 à 5
mais lors du print pour la variable oeil, il me donne 543, je comprend pas.
Merci d'avance
-----