moulin 发表于 2012-9-7 22:39:36

简单的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]
查看完整版本: 简单的CTC定时然后传数据,怎么就有问题呢??