Bonjour à tous,
Voici mon petit problème, je désire utiliser le uart1 dans mon application, le même que celui utilisé pour programmer le rc813 (rx pin1 et tx pin32).
Je suis donc partit de l'exemple "R8C - Premiers pas - Jean Brunet" en remplaçant les registres de l'uart 0 en l'uart 1
exemple:
u1mr = 0x05; ===> ancienne valeur: u0mr = 0x05;
u1c0 = 0x00; ===> ancienne valeur: u0c0 = 0x00;
//u1rrm = 0;u0rrm ===> pas d'équivalent en uart1 ???
u1brg =32-1; ===> ancienne valeur: u0brg =32-1;
etc, etc....
A ce stade je pense avoir un petit résultat, apparemement la réception d'un caractère dans le programme du rc813 fonctionne, car je recopie sa valeur sur le port p1 et celle-ci semble correspondre au code ascii du caractère envoyé par hyperterminal. Par contre aucune donnée n'est transmise du µc vers hyperterminal. Le problème ne peut pas être électrique puisque le port fonctionne pour l'upload du programme et sa vérification...
j'ai rajouté l'instruction prc2=1 partout pour être sûr de bien déverouiller p0 mais sans succès.
Voici le code utilisé:
void UART1_INIT(void){
p0=0xff;
prc2=1;
pd0=0xff;
p0=0xff;
pd3=pd3&0x7f; // Ok car réception OK
u1mr = 0x05;
u1c0 = 0x00;
//u1rrm = 0; mis en commentaire car u1rrm n'existe pas (dans l'exemple: u0rrm=0)
u0brg = 32-1; // 38400 baud avec l'horloge 20MHz
re_u0c1 = 1; // réception activéere_u1c1 = 1;
}
void sendTxd1(unsigned char data){
while (ti_u1c1 == 0); //wait empty tx buffer
u1tbl=data; // u1tb=data ne fonctionne pas non plus
te_u1c1=1; //send
}
unsigned char receiveRxd1(void){
unsigned char data;
unsigned char dummy;
while (ir_s1ric == 0); //wait for serial data
ir_s1ric = 0;
data = u1rbl; //put in buffer
dummy = u1rbh; //mem error
re_u1c1=1;
return data;
}
void main(void){
char Message[]="Je passe un message";
unsigned char touche;
unsigned char i;
/*-- Change on-chip oscillator clock to Main clock --*/
asm("FCLR I");
prc0 = 1; /* Protect off */
cm13 = 1; /* Xin Xout */
cm15 = 1; /* XCIN-XCOUT acity */
cm05 = 0; /* Xin on */
cm16 = 0; /* Main clock = No division mode */
cm17 = 0;
cm06 = 0; /* CM16 and CM17 enable */
asm("nop"); /* Waiting for stable of oscillation */
asm("nop");
asm("nop");
asm("nop");
ocd2 = 0; /* Main clock change */
prc0 = 0;
pd1 = 0x0ff;
UART1_INIT();
while (1){
touche=receiveRxd1(); //OK
sendTxd1(touche); //Non OK rien dans hyperterm.
p1=touche; //OK
}
}
Rien n'y fait, pas moyen d'obtenir de caractère sur l'hyperterminal, si quelqu'un a une idée ou un programme qui fonctionne sur uart1 (rx+tx), ça me ferait vraiment plaisir.
Merci d'avance, bonne prog a tous...
