目的是:将串口的数据存储下来,主程序再将数据调用。
问题是:当我把程序下载到430里面,连接好串口通讯,用串口发送数据给430后,能存下来,也能调用,可为什么当我复位后就不行了。
附程序:写数据到flash A
void write_SegA (uchar *value, int n) { uchar *Flash_ptr; // Flash pointer uint i; Flash_ptr = (uchar *)(0x1080 + n); // Initialize Flash pointer FCTL1 = FWKEY + ERASE; // Set Erase bit FCTL3 = FWKEY; // Clear Lock bit *Flash_ptr = 0; // Dummy write to erase Flash segment FCTL1 = FWKEY + WRT; // Set WRT bit for write operation for (i=0; i { *Flash_ptr++ = value[i]; // Write value to flash } FCTL1 = FWKEY; // Clear WRT bit FCTL3 = FWKEY + LOCK; // Set LOCK bit }
串口接收中断
#pragma vector=UART0RX_VECTOR __interrupt void UART0_RX_ISR(void) { static char RX_len_temp; Recptr[RX_len_temp]=RXBUF0; RX_len_temp++; if(Recptr[RX_len_temp-1]==0x0d) { RX_len=RX_len_temp; RX_flag=1; RX_len_temp=0; write_SegA(Recptr,0); } } string转int函数
unsigned long int string_to_int(unsigned char *ptr) { unsigned long int Data = 0; int i = 0; for(i = 0; ptr[i] != \' \'; i++) { Data = Data*10 + ptr[i]-48; } return Data; } 将flash A中数据读出来
void ProcessCMD() {int i; data=(unsigned char *)0x1080; for(i=0;i { WorkTimeptr[i]=*data++; } WorkTime=string_to_int(WorkTimeptr); }
定时器A中断
#pragma vector=TIMERA0_VECTOR __interrupt void Timer_A0 (void) { n--; if(n<=WorkTime) P2OUT=0x00; if(n==0) {P2OUT=0xff; n=120;} } 主程序:
void main() {P2DIR=0xFF; P2OUT=0xFF; WDTCTL=WDTPW+WDTHOLD; int_clk(); int_usart(); CCTL0 = CCIE; CCR0 = 4096; TACTL = TASSEL_1+ID_3 + MC_1; _EINT(); char i; ProcessCMD(); for(;;) { if(RX_flag==1) { RX_flag=0; for(i=0;i { tmpptr[i]=Recptr[i]; } UART_TX_BUF[0]=\'o\'; UART_TX_BUF[1]=\'k\'; for(i=0;i<2;i++) { while (!(IFG1 & UTXIFG0)); TXBUF0=UART_TX_BUF[i];//; } } } }