#include "msp430x43x.h"void init_uart(void);void uart_start(void);void uart_send(void);void uart_receive(void); unsigned char RXDATA_BUF[10];const unsigned char TXDATA_BUF[10]={0xbd,0x77,0x3d,0xc5,0xc6,0xf5,0x68,0x0d,0x6b,0xff};unsigned int RX_count=0,TX_count=0,TXBUF_num=10,RXBUT_num=10,FLAG; void main(void){ init_uart(); uart_start(); while(1) { _BIS_SR(CPUOFF); _NOP(); }} void init_uart(void) //初始化UART{ unsigned int i; WDTCTL=WDTPW+WDTHOLD; FLL_CTL1|=XT2OFF+SELM_XT2+SELS; do //等待时钟稳定 { IFG1&=~OFIFG; //清除OSCFault for(i=0;i<0xff;i++); //延时 } while((FLL_CTL0&XT2OF)==XT2OF); UCTL0|=SWRST; //控制寄存器位 UCTL0|=CHAR; UTCTL0=SSEL0+SSEL1; //选择发送时钟源复位 UBR00=0XA0; //波特率9600 UBR10=0X01; UMCTL0=0X5E; UCTL0&=~SWRST; //选择发送时钟源置位 ME1|=URXE0+UTXE0; //使能TXD RXD IE1|=URXIE0; IFG1=0X00; P2SEL|=0X30; //模块选用,p2.4,5为USART0收发 P2DIR|=0X10; for(i=0;i<10;i++) RXDATA_BUF=0; // 清接收缓存 _EINT();} void uart_start(void) //启动发送{ IE1|=UTXIE0; while((UTCTL0&BIT0)!=BIT0); TXBUF0=TXDATA_BUF[0]; TX_count=1;} void uart_receive(void) //接收{ RXDATA_BUF[RX_count]=RXBUF0; RX_count+=1; if(RX_count>=RXBUT_num) {RX_count=0;}} void uart_send(void) //发送{ TXBUF_num-=1; if(TXBUF_num>0) { TXBUF0=TXDATA_BUF[TX_count]; TX_count+=1; } else { FLAG+=1; if(FLAG>10) {IE1&=~UTXIE0;} else { TXBUF_num=10; TX_count=0; uart_start(); } }} #pragma vector=USART0RX_VECTOR__interrupt void UartRx(void)//发送中断响应{ uart_send();} #pragma vector=USART0TX_VECTOR__interrupt void UartTx(void)//接收中断响应{ uart_receive();}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
前边加上const ,是不是就把数组放到flash里了
- #include "msp430x43x.h"
- void init_uart(void);
- void uart_start(void);
- void uart_send(void);
- void uart_receive(void);
- unsigned char RXDATA_BUF[10];
- const unsigned char TXDATA_BUF[10]={0xbd,0x77,0x3d,0xc5,0xc6,0xf5,0x68,0x0d,0x6b,0xff};
- unsigned int RX_count=0,TX_count=0,TXBUF_num=10,RXBUT_num=10,FLAG;
- void main(void)
- {
- init_uart();
- uart_start();
- while(1)
- {
- _BIS_SR(CPUOFF);
- _NOP();
- }
- }
- void init_uart(void) //初始化UART
- {
- unsigned int i;
- WDTCTL=WDTPW+WDTHOLD;
- FLL_CTL1|=XT2OFF+SELM_XT2+SELS;
- do //等待时钟稳定
- {
- IFG1&=~OFIFG; //清除OSCFault
- for(i=0;i<0xff;i++); //延时
- }
- while((FLL_CTL0&XT2OF)==XT2OF);
- UCTL0|=SWRST; //控制寄存器位
- UCTL0|=CHAR;
- UTCTL0=SSEL0+SSEL1; //选择发送时钟源复位
- UBR00=0XA0; //波特率9600
- UBR10=0X01;
- UMCTL0=0X5E;
- UCTL0&=~SWRST; //选择发送时钟源置位
- ME1|=URXE0+UTXE0; //使能TXD RXD
- IE1|=URXIE0;
- IFG1=0X00;
- P2SEL|=0X30; //模块选用,p2.4,5为USART0收发
- P2DIR|=0X10;
- for(i=0;i<10;i++)
- RXDATA_BUF=0; // 清接收缓存
- _EINT();
- }
- void uart_start(void) //启动发送
- {
- IE1|=UTXIE0;
- while((UTCTL0&BIT0)!=BIT0);
- TXBUF0=TXDATA_BUF[0];
- TX_count=1;
- }
- void uart_receive(void) //接收
- {
- RXDATA_BUF[RX_count]=RXBUF0;
- RX_count+=1;
- if(RX_count>=RXBUT_num) {RX_count=0;}
- }
- void uart_send(void) //发送
- {
- TXBUF_num-=1;
- if(TXBUF_num>0)
- {
- TXBUF0=TXDATA_BUF[TX_count];
- TX_count+=1;
-
- }
- else
- {
- FLAG+=1;
- if(FLAG>10)
- {IE1&=~UTXIE0;}
- else
- {
- TXBUF_num=10;
- TX_count=0;
- uart_start();
- }
- }
- }
- #pragma vector=USART0RX_VECTOR
- __interrupt void UartRx(void)//发送中断响应
- {
- uart_send();
- }
- #pragma vector=USART0TX_VECTOR
- __interrupt void UartTx(void)//接收中断响应
- {
- uart_receive();
- }
复制代码一周热门 更多>