简单的CTC定时然后传数据,怎么就有问题呢??
程序如下,我明明让单片机发送0X02,0X60这两个数据共12个,用串口工具接收到50个0X02,0X60;于是单步调试,结果是发送12个数据,于是将中断程序改成:ISR(TIMER1_COMPA_vect)
{
Data=0X02;
k++;
Data=0X60;
k++;
if(k==12)
{ PORTD|=_BV(3);//REDE置1,发送
_delay_us(1);
for(i=0;i<12;i++)
{
UART_send(Data);
_delay_us(1);
}
TransFlag=1;
k=0;
}
}
程序就是接收12个0X02和0X60,问下各位用户怎么会这样,百思不得其解~
#define PageTotal 1
volatile uint TransFlag=0;
volatile uint k=0;
volatile uint PageCount=0;
int main(void)
{
//testing
k=0;
buf_k=0;
PageCount=0;
port_init();
USART_init(); //USART初始化
timer1_init();//定时计数器初始化,开始计时
TCNT1=0X0000;//TCNT1初始值
OCR1A=0X0031;//8分频时:0X0031定时50us
sei();
while(PageCount<PageTotal)
{
if(TransFlag)
{
TransFlag=0;
PageCount+=1;
}
}
cli();
TCCR1B=0X00;
TIMSK=0X00;
PORTB|=_BV(0);
}
ISR(TIMER1_COMPA_vect)
{
Data=0X02;
k++;
Data=0X60;
k++;
PORTD|=_BV(3);//REDE置1,发送
_delay_us(1);
for(i=k-2;i<k;i++)
{
UART_send(Data);
_delay_us(1);
}
if(k==12)
{
TransFlag=1;
k=0;
}
}
页:
[1]