|
我实在是找不到程序上的错误,附上程序请大家帮忙看看问题出在哪了
时钟与串口初始化就不贴了 问题应该不在那
unsigned long int string_to_int(unsigned char *ptr)
{
unsigned long int Data = 0;
int i = 0;
for(i = 0; ptr[i] != 0x0d; i++)
{
Data = Data*10 + ptr[i]-48;
}
return Data;
}
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<255; i++)
{
*Flash_ptr++ = value[i]; // Write value to flash
}
FCTL1 = FWKEY; // Clear WRT bit
FCTL3 = FWKEY + LOCK; // Set LOCK bit
}
void copy_data(uchar *ptr1,uchar *ptr2)
{
int i;
for(i=1;i
ptr1[i-1]=ptr2[i];
}
#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
int i;
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;
switch(Recptr[0])
{
case 'w':
copy_data(Recptr1,Recptr);
WorkTime=string_to_int(Recptr1);
write_SegA(Recptr1,0x2000);
break;
case 's':
copy_data(Recptr2,Recptr);
StopTime=string_to_int(Recptr2);
write_SegA(Recptr2,0x1000);
break;
}n=WorkTime+StopTime;
}
if(RX_flag==1)
{
RX_flag=0;
UART_TX_BUF[0]='o';
UART_TX_BUF[1]='k';
for(i=0;i<2;i++)
{
while (!(IFG1 & UTXIFG0));
TXBUF0=UART_TX_BUF[i];
}
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0 (void)
{
n--;
if(n<=WorkTime)
{ P2OUT=0x00;
P1OUT |=BIT0;}
if(n==0)
{P2OUT=0xff;
P1OUT &=~BIT0;
n=StopTime+WorkTime;}
}
void main()
{
WDTCTL=WDTPW+WDTHOLD;
P2DIR=0xFF;
P2OUT=0xFF;
P1DIR |=BIT0;
P1OUT &=~BIT0;
int_clk();
int_usart();
char i;
for(i=0;i<255;i++)
{
WorkTimeptr[i]=*data++;
}
data=(unsigned char *)0x3080;
WorkTime=string_to_int(WorkTimeptr);
for(i=0;i<255;i++)
{
StopTimeptr[i]=*data1++;
}
data1=(unsigned char *)0x2080;
StopTime=string_to_int(StopTimeptr);
n=WorkTime+StopTime;
CCTL0 = CCIE;
CCR0 = 4096;
TACTL = TASSEL_1+ID_3 + MC_1;
_EINT();
while(1)
{}
} |
|