//****************************************************************************************** // PIC16F88 Sample Program // Project : // Program Name : // Programer : // Create date : Version 1.0 H24.06.05 // Replace date : // History : // Laungage : HI_TECH PICC C Laungage Version 9.83 //****************************************************************************************** // Description // OSC : Internal OSC 8MHz //****************************************************************************************** #include //__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & BOREN_OFF & LVP_OFF & CPD_OFF & WRT_OFF & // DEBUG_OFF & CCPMX_RB0 & CP_OFF ); __CONFIG( FOSC_INTOSCIO & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & BOREN_OFF & LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF & CCPMX_RB0 & CP_OFF ); __CONFIG( FCMEN_OFF & IESO_OFF ); void Init_USART(void); void Trans_USART(char *); void Rec_USART(char *); void Trans_USART_s(char *); void timer(unsigned int); void M0puls(void); void M1puls(void); void M_hyp(unsigned int); void M_dot(unsigned int); void M_spe(unsigned int); void M_end(unsigned int); void M_out(char); void M_outs(char *); void Strcpy(char *,char *); int main(void) { char tmp_char[2]; // ************************* // 1.Initialized Segment // ************************* TRISA=0x00; TRISB=0xdf; //0b1101,1111 PORTA=0x00; PORTB=0x00; OSCCON=0x7E; //OSC 8MHz ANSEL=0x00; //ALL Degital PORT Init_USART( ); //Init USART Trans_USART_s(" Connect PIC16F88 OK > "); Trans_USART_s("Input 0-9 or A-Z ? > "); // ************************* // 2.Program Main // ************************* while(1){ Rec_USART(tmp_char); Trans_USART(tmp_char); M_out(tmp_char[0]); // M_outs("ABCDEFGHIJKLMNOPQRSTUVWXYZ "); // M_outs("1234567890 "); // M_outs("START PIC16F88 OK "); } } //**************************************************************************** // Function Name : Trans_USART_s // Title : // Input : // Output : // Description : //**************************************************************************** void Trans_USART_s(char in_str[] ) { unsigned int lp=0; unsigned int lp1; while(in_str[lp]!=0x00){ Trans_USART(&in_str[lp]); for(lp1=0;lp1<1000;lp1++); lp++; } } //**************************************************************************** // Function Name : Init_USART // Title : // Input : // Output : // Description : //**************************************************************************** void Init_USART( ) { // // TXSTA;TRANSMIT STATUS AND CONTROL REGISTER // Bit7:Async ==> Don't care // BIT6:Selects 8-bit ==> 0 // BIT5:Transmit Enable Bit ==> 1:Enable 0:Disable // BIT4:AUSART Select mode ==> 1:Synce 0:Async // BIT3:Read As '0' // BIT2:High BAUD Rate Select ==> 1:High Speed 0:Low Speed // BIT1:TSR Status bit ==> 1:TSR Empty 0:TSR Full // BIT0:9Th Bit of Transmit data , can be parity bit // TXSTA=0x20; //0b0010,0000 // // RCSTA;RECIVE STATUS AND CONTROL REGISTER // Bit7:Serial Port Enable bit==> 1:Serial Port Enable 0:Serial Port Disable // BIT6:Selects 8-bit ==> 0 // BIT5:Single Recive Enable ==> Asyn:Don't Care // BIT4:AUSART Select mode ==> 1:Enable 0:Disable // BIT3:When Bit6=1 // BIT2: 1:Framing error 0:No Framing error // BIT1: 1:Overrun error 0:Overrun error // BIT0:9Th bit Recived data // RCSTA=0x90; //0b1001,0000 // // SPBRG;Baund Rate Genarator REGISTER // 9600BPS, OSC:8MHz(Inside) ==> SPREG=12 SPBRG=0x0C; } //**************************************************************************** // Function Name : Trans_USART // Title : // Input : // Output : // Description : //**************************************************************************** void Trans_USART(char *IO_data ) { char chk_flg; // // 1.Check Send Flag // while(1){ chk_flg = TXSTA & 0x02; //0000,0010 TXSTA(TRMT) if(chk_flg != 0x00)break; } // // 2.Set data // TXREG = *IO_data; } //**************************************************************************** // Function Name : Rec_USART // Title : // Input : // Output : // Description : //**************************************************************************** void Rec_USART(char *IO_data ) { char chk_flg; // // 1.Check Recvive Flag // while(1){ chk_flg = PIR1 & 0x20; //0010,0000 PIR1(RCIF) if(chk_flg != 0x00)break; } // // 2.Check error // chk_flg = RCSTA & 0x06; //0000,0110 RCSTA(FERR,OERR) See PIC16F88 Manual P.98 if(chk_flg != 0x00){ *IO_data = 0x00; return; } // // 3.Set Recive Data // *IO_data = RCREG; } //**************************************************************************** // Function Name : M_outs // Title : // Input : // Output : // Description : //**************************************************************************** void M_outs(char in_char[] ) { unsigned int lp=0; while(in_char[lp]!=0x00){ M_out(in_char[lp]); lp++; } } //**************************************************************************** // Function Name : M_out // Title : // Input : // Output : // Description : //**************************************************************************** void M_out(char in_char ) { char m_data[20]; unsigned int lp; unsigned int Speed=40; // ******************** // 1.Set data // ******************** if(in_char==' ') Strcpy(m_data," "); if(in_char=='A') Strcpy(m_data,"0-"); if(in_char=='B') Strcpy(m_data,"-000"); if(in_char=='C') Strcpy(m_data,"-0-0"); if(in_char=='D') Strcpy(m_data,"-00"); if(in_char=='E') Strcpy(m_data,"0"); if(in_char=='F') Strcpy(m_data,"00-0"); if(in_char=='G') Strcpy(m_data,"--0"); if(in_char=='H') Strcpy(m_data,"0000"); if(in_char=='I') Strcpy(m_data,"00"); if(in_char=='J') Strcpy(m_data,"0---"); if(in_char=='K') Strcpy(m_data,"-0-"); if(in_char=='L') Strcpy(m_data,"0-00"); if(in_char=='M') Strcpy(m_data,"--"); if(in_char=='N') Strcpy(m_data,"-0"); if(in_char=='O') Strcpy(m_data,"---"); if(in_char=='P') Strcpy(m_data,"0--0"); if(in_char=='Q') Strcpy(m_data,"--0-"); if(in_char=='R') Strcpy(m_data,"0-0"); if(in_char=='S') Strcpy(m_data,"000"); if(in_char=='T') Strcpy(m_data,"-"); if(in_char=='U') Strcpy(m_data,"00-"); if(in_char=='V') Strcpy(m_data,"000-"); if(in_char=='W') Strcpy(m_data,"0--"); if(in_char=='X') Strcpy(m_data,"-00-"); if(in_char=='Y') Strcpy(m_data,"-0--"); if(in_char=='Z') Strcpy(m_data,"--00"); if(in_char=='0') Strcpy(m_data,"-----"); if(in_char=='1') Strcpy(m_data,"0----"); if(in_char=='2') Strcpy(m_data,"00---"); if(in_char=='3') Strcpy(m_data,"000--"); if(in_char=='4') Strcpy(m_data,"0000-"); if(in_char=='5') Strcpy(m_data,"00000"); if(in_char=='6') Strcpy(m_data,"-0000"); if(in_char=='7') Strcpy(m_data,"--000"); if(in_char=='8') Strcpy(m_data,"---00"); if(in_char=='9') Strcpy(m_data,"----0"); // ******************** // 2.Output // ******************** for(lp=0;lp<20;lp++){ switch(m_data[lp]){ case '0': M_dot(Speed); M_spe(Speed); break; case '-': M_hyp(Speed); M_spe(Speed); break; case ' ': M_end(Speed); break; default: M_end(Speed); return; } } } //**************************************************************************** // Function Name : M_hyp // Title : // Input : // Output : // Description : //**************************************************************************** void M_hyp(unsigned int len ) { unsigned int lp; len=len*3; for(lp=0;lp