bonjour à tous,
j'ai un projet que je dois avoir fini pour début septembre pour ma second sess mais là , je bloque totalement , j'ai jamais utilisé l'usart et étant pas très bon en programmation , j'aimerais que quelqu'un m'aide ...
donc voila mon projet , s est un robot commandé par pc via le port serie RS232.
j utilise un pic 18F2620
donc j'utilise comme logiciel " Hyperterminal "
j utilise comme module de émission - réception des radiometrix TDL2A-433-9
ce que il me faudrait , s'est savoir faire 4 commandes donc on va dire
- fleche du haut , sa fera avancé les 2 moteurs
- fleche du bas , sa fera reculé les 2 moteurs
- fleche de gauche , sa fera tourner à gauche les 2 moteurs
- fleche de droite , sa fera tourner à droite les 2 moteurs
ce qui me faudrait aussi , c'est envoyé un message de retour sur le Hyperterminal pour dire que la donné a bien été recu , donc par exemple j appuye sur la fleche du haut , sa ecrit dans hyperterminal " le robot avance "
voila sa s est en gros ce que faudrait que je fasse
si quelqu un pourrait m aidé , sa me ferait enormement plaisir
voila le code ( ce code permet de faire avancer les moteurs tout droit bêtement )
et sa le code dans usartCode:#include <pic18.h> #include <stdio.h> #include <stdlib.h> #include "delay.h" #include "lcd.h" #include "usart.h" __CONFIG(1, HS&IESODIS&FCMDIS); __CONFIG(2, BORDIS&PWRTEN&WDTDIS ); __CONFIG(3, PBANDIS); __CONFIG(4, LVPDIS&XINSTDIS&STVRDIS&LPT1DIS); __CONFIG(5, UNPROTECT); __CONFIG(6, WRTEN); #define S1 RA0 #define S2 RA1 #define S3 RA2 #define S4 RA3 #define OUTA RB3 #define OUTB RB2 #define OUTC RB1 #define OUTD RB0 #define OUTE RC0 #define OUTF RC1 #define OUTG RC2 #define OUTH RC3 int x=10; void main () {ADCON1=0x07; TRISA= 0b00000000; TRISB= 0b00000000; TRISC= 0b10000000; InitUSART (129); RC4=1; RC5=0; lcd_init (); lcd_clear (); while(1) { OUTA=1, OUTB=0, OUTC=0, OUTD=0; OUTE=1, OUTF=0, OUTG=0, OUTH=0; delay_ms(x); OUTA=1, OUTB=0, OUTC=0, OUTD=1; OUTE=1, OUTF=0, OUTG=0, OUTH=1; delay_ms(x); OUTA=0, OUTB=0, OUTC=0, OUTD=1; OUTE=0, OUTF=0, OUTG=0, OUTH=1; delay_ms(x); OUTA=0, OUTB=1, OUTC=0, OUTD=1; OUTE=0, OUTF=1, OUTG=0, OUTH=1; delay_ms(x); OUTA=0, OUTB=1, OUTC=0, OUTD=0; OUTE=0, OUTF=1, OUTG=0, OUTH=0; delay_ms(x); OUTA=0, OUTB=1, OUTC=1, OUTD=0; OUTE=0, OUTF=1, OUTG=1, OUTH=0; delay_ms(x); OUTA=0, OUTB=0, OUTC=1, OUTD=0; OUTE=0, OUTF=0, OUTG=1, OUTH=0; delay_ms(x); OUTA=1, OUTB=0, OUTC=1, OUTD=0; OUTE=1, OUTF=0, OUTG=1, OUTH=0; delay_ms(x); } OUTA=0, OUTB=0, OUTC=0, OUTD=0; OUTE=0, OUTF=0, OUTG=0, OUTH=0; } }
Code:/****************************************************************************** * USART Routines (2004.02.26) * Fabrice Médol * * This file contains the USART routines. * Each routine's parameters are explained above the function declaration. ****************************************************************************** */ #ifndef _USART_C #define _USART_C #include <pic18.h> #include "usart.h" near char ser_tmp; /******************************************************************************* * InitUSART * * This subroutine initializes the USART * Asynchronous Mode * 8 bit * Reception & Transmission Interrupts enabled ******************************************************************************* */ void InitUSART(char VALEURBRG) { SYNC=0; // Asynchronous mode SPEN=1; // Asynchronous mode BRGH=1; // High Speed Mode SPBRG=VALEURBRG; // Baud Rate = Fosc / (16*(SPBGR+1) // Reception config RX9=0; // 8 bit reception RCIE=0; // Enable Reception Interrupt CREN=1; // Enable Reception // Transmission config TX9=0; // 8 bit transmission TXIE=0; // Enable Transmission Interrupt TXEN=1; // set bit TXIF to Enable Transmission TRISC6=0; // TX output TRISC7=1; // RX intput // Flush RX Buffer ser_tmp=RCREG; ser_tmp=RCREG; ser_tmp=RCREG; } /******************************************************************************* * getch * * Read one byte from serial * * Returns : the byte received ******************************************************************************* */ unsigned char getch(void) { while(!RCIF); return (RCREG); } /******************************************************************************* * getchR * * Read one byte from serial with indication of reception error * * Returns : the byte received ******************************************************************************* */ unsigned char getchR(void) { while (!(OERR || FERR || RCIF)) { if (OERR) { // overflow error // disable_interrupt(GIE)? CREN = 0; ser_tmp = RCREG; // flush the rx buffer ser_tmp = RCREG; ser_tmp = RCREG; CREN = 1; // enable_interrupt(GIE)? } else if (FERR) { // framing error // disable_interrupt(GIE)? ser_tmp = RCREG; // enable_interrupt(GIE)? } else if (RCIF) { // RCIF! // disable_interrupt(GIE)? ser_tmp = RCREG; // enable_interrupt(GIE)? } } return ser_tmp; } /******************************************************************************* * getch_nb * * non blockong Read one byte from serial * * Returns : the byte received or 0 if error ******************************************************************************* */ char getch_nb(void) { if (PIR1 & 32) { ser_tmp = RCREG; return ser_tmp; } else { return 0; } } /******************************************************************************* * putch() * * byte : the byte to send * * Write one byte to serial ******************************************************************************* */ void putch(char byte) { while(!TXIF); TXREG=byte; //while(!TRMT); } /******************************************************************************* * put_string * s : a pointer on the string to send! * * Send string s to serial ******************************************************************************* */ void put_string(const unsigned char * text) { char i = 0; while( text[i] !=0 ) putch(text[i++]); } /******************************************************************************* * envoi d'un octet au format hex ******************************************************************************** */ void tx_hex_byte(unsigned char val) { char c; c = conv_ascii((val>>4) & 0x0f); putch(c); c = conv_ascii(val&0x0f); putch(c); } /******************************************************************************* * envoi d'un octet au format decimal ******************************************************************************** */ void tx_dec_byte(unsigned char val) // displays byte in decimal { unsigned char d; char c; d=val/100; c=conv_ascii(d); putch(c); val=val%100; d=val/10; c=conv_ascii(d); putch(c); d=val % 10; c=conv_ascii(d); putch(c); } /******************************************************************************* * conversion ascii ******************************************************************************** */ char conv_ascii(unsigned char val) { char c; if (val < 10) { c=val+'0'; } else { val=val-10; c=val + 'A'; } return(c); } #endif
-----