void Usart_Write_String (const char * stringa){ int i; for(i=0; stringa[i]!='\0'; i++){ Usart_Write(stringa[i]); } }
__inline__ static T_SYS_EVENT get_serial_command(VOID) { INT c; T_SERIAL_CMD* pt_cmd_tbl; T_SYS_EVENT t_sys_event = E_EVENT_IDLE; c = Usart_Read(); /* 1文字受信 */ if( c == -1 ) { return t_sys_event; } Usart_Write( c ); /* ホストへエコーバック */ Usart_PgmPuts( PSTR("\r\n") ); for( pt_cmd_tbl = gt_serial_event_tbl; pt_cmd_tbl->c != '\0'; pt_cmd_tbl++ ) { if( pt_cmd_tbl->c == c ) { t_sys_event = pt_cmd_tbl->t_sys_event; return t_sys_event; } } if( (fn_serial_cmd_hdl == NULL) || (fn_serial_cmd_hdl( c ) != 0) ) { Usart_PgmPuts( PSTR("command not found\n") ); } return t_sys_event; }
void main () { char buf[20]; int i; int buflen; ADCON1= 0x20; // CONFIGURE ADC --- AN2 TRISA = 0xFF; // MAKE PORTA AS INPUT usart_init(2400); // initialize the usart do { depth=pressure(); itoa(buf, depth); buflen=strlen(buf); for(i=buflen-1; i>=0; i--) { Usart_Write(buf[i]); // write the data } Usart_Write(0x0D); Usart_Write(0x0A) ; } while(1); }
VOID Usart_PrintDigitN( UINT val, UINT print_lvl ) { UINT digit_1; for( ; print_lvl != 0; print_lvl /= 10 ) { digit_1 = val / print_lvl; val %= print_lvl; // if( digit_1 < 10 ) { Usart_Write( '0' + digit_1 ); // } // else { // Usart_Write( '?' ); // } } }
void interrupt(){ if(Usart_data_ready()){ car_letto=Usart_Read(); if(car_letto!=0x0D && car_letto!=0x0A && cursore_buffer<DIM_MASSIMA_BUFFER){ Usart_Write(car_letto); buffer[cursore_buffer]=car_letto; cursore_buffer++; } else if(strlen(buffer)>0){ buffer[cursore_buffer]='\0'; cursore_buffer=0; if(buffer[0]=='M' && strlen(buffer)==5){ char s_posizione[4]; char s_numero_servo[2]; int posizione; int numero_servo; s_numero_servo[0]=buffer[1]; s_numero_servo[1]='\0'; s_posizione[0]=buffer[2]; s_posizione[1]=buffer[3]; s_posizione[2]=buffer[4]; s_posizione[3]='\0'; if(isInteger(s_numero_servo) && isInteger(s_posizione)){ posizione=atoi(s_posizione); numero_servo=atoi(s_numero_servo); if(posizione<MIN_POS) posizione=MIN_POS; if(posizione>MAX_POS) posizione=MAX_POS; if(numero_servo<0) numero_servo=0; if(numero_servo>3) numero_servo=3; posizioni_servo[numero_servo]=posizione; } else{ Usart_Write_String(stringa_Nuova_Linea); Usart_Write_String(stringa_Sintassi_Errata); } Usart_Write_String(stringa_Nuova_Linea); Usart_Write_String(stringa_Posizione_Cambiata); printPrompt(); } else if((buffer[0]=='O' || buffer[0]=='o') && strlen(buffer)==2){ char s_numero_servo[2]; int numero_servo; s_numero_servo[0]=buffer[1]; s_numero_servo[1]='\0'; if(isInteger(s_numero_servo)){ numero_servo=atoi(s_numero_servo); if(buffer[0]=='O'){ //accensione servo switch(numero_servo){ case 0: ACCENSIONE_SERVO0=SI; break; case 1: ACCENSIONE_SERVO1=SI; break; case 2: ACCENSIONE_SERVO2=SI; break; case 3: ACCENSIONE_SERVO3=SI; break; default: Usart_Write_String(stringa_Sintassi_Errata); break; } } else if(buffer[0]=='o'){ //spegnimento il servo switch(numero_servo){ case 0: ACCENSIONE_SERVO0=NO; break; case 1: ACCENSIONE_SERVO1=NO; break; case 2: ACCENSIONE_SERVO2=NO; break; case 3: ACCENSIONE_SERVO3=NO; break; default: Usart_Write_String(stringa_Sintassi_Errata); break; } } Usart_Write_String(stringa_Nuova_Linea); Usart_Write_String(stringa_Stato_Cambiato); printPrompt(); } } else{ //comando sconosciuto Usart_Write_String(stringa_Nuova_Linea); Usart_Write_String(stringa_Comando_Sconosciuto); printPrompt(); } } else { //stringa vuota annulla cursore_buffer=0; } } //fine data_ready }//fine funzione
static int usart_putchar( char c, struct __file* dummy ) { Usart_Write( c ); return 0; }
VOID Usart_Puts( const CHAR* str ) { while( *str ) { Usart_Write( *str++ ); } }