#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
unsigned int a=0;
unsigned int b=0;
unsigned int c=0;
unsigned int d=0;
int main(void)
{
_PROTECTED_WRITE(CLKCTRL_MCLKCTRLB, (CLKCTRL_PDIV_16X_gc | CLKCTRL_PEN_bm));//16分频
PORTB_DIRSET|=(1<<4);//PB4设置为输出
//PORTB_OUTCLR|=(1<<4);//PB4输出低电平
TCA0.SINGLE.PER = 0xFFFF; /* Period: 0xffff 周期和它无关??*/
TCA0.SINGLE.CNTH = 0; /* Count: 0x0 */
TCA0.SINGLE.CNTL=0xFF;
TCA0.SINGLE.CTRLA = TCA_SINGLE_CLKSEL_DIV16_gc | 1 << TCA_SINGLE_ENABLE_bp; /* Module Enable: disabled */
TCA0.SINGLE.INTCTRL=1 << TCA_SINGLE_OVF_bp;//中断使能
sei();
while (1)
{
}
}
ISR (TCA0_OVF_vect)//中断函数
{
a++;
TCA0.SINGLE.CNTH = 0; /* Count: 0x0 */
TCA0.SINGLE.CNTL=0xFF;
d=TCA0.SINGLE.CNT ;
if (a<=1000)
{
PORTB_OUTCLR|=(1<<4);//PB4输出低电平
}
else if(a>1000 && a<2000)
{
//a=0;
PORTB_OUTSET|=(1<<4);//PB4输出高电平
}
else a=0;
}
以上是ATTINY817的代码,现在不论怎么改TCA0.SINGLE.CTRLA寄存器中的TCA_SINGLE_CLKSEL_DIV16_gc还是改TCA0.SINGLE.CNTH和TCA0.SINGLE.CNTL都改变不了定时时间呢?哪位大神帮忙看看,多谢了,困扰我两周了。 |