/*程序功能:接收PC机十六进制数据后传至pc机显示 数据格式:十六进制
帧头:FD
帧尾: FE*/ #include "msp430x14x.h" #define uint unsigned int #define uchar unsigned char #define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) uchar RBuff[250]; // 接受缓冲区 uchar rindex;//接受计数 uchar tindex;//发送计数 //**********************函数声明****************************// void int_clk(); void int_usart(); void UART0_TXISR(uchar *date,uchar i); //**********************函数声明****************************// int main(void) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; int_clk(); int_usart(); _EINT(); while(1); } //*********************************************************// void int_clk() { uchar i; BCSCTL1&=~XT2OFF; //打开XT振荡器 BCSCTL2|=SELM1+SELS;//MCLK 8M and SMCLK 1M do { IFG1 &= ~OFIFG; //清除振荡错误标志 for(i = 0; i < 100; i++) _NOP(); //延时等待 } while ((IFG1 & OFIFG) != 0); //如果标志为1继续循环等待 IFG1&=~OFIFG; } //**********************初始化串口****************************// void int_usart() { U0CTL|=SWRST;//复位串口 U0CTL|=CHAR; //8位数据 U0TCTL|=SSEL1;//select SMCLK AS CLK U0BR0=0X03; U0BR1=0X69; UMCTL0=0Xff;//1200 ME1|=UTXE0+URXE0;//使能接收和发送 U0CTL&=~SWRST;//清除串口复位信号 IE1|=URXIE0+UTXIE0;//使能接收发送中断 P3SEL|=BIT4; P3SEL|=BIT5;//选择I/O口使用扩展功能和方向 P3DIR|=BIT4; } //**********************接受函数****************************// #pragma vector = UART0RX_VECTOR __interrupt void UART0_RXISR() { RBuff[rindex++] = RXBUF0; if(RBuff[0]==0xFD&RBuff[rindex-1]==0xFE) //接收完毕 { tindex = rindex; rindex=0; UART0_TXISR(RBuff,tindex); } } //**********************************************************// void UART0_TXISR(uchar *date,uchar i) { uint v=0; uchar *tend_date; tend_date=date; delay_us(10); for(v=0;v<i;v++) { U0TXBUF=*tend_date; while((IFG1&UTXIFG0)==0);//等待发送完成 tend_date++; } delay_ms(10); }
|