AVR单片机计数定时问题

我用了M16ARV内部8M晶振,用了8分频,那就是计数为1us,然后计数到20为一个半周期,也就周期为40us,循环点亮led,为什么我用示波器显示图形是,显示的是周期竟... 我用了M16 ARV内部8M晶振,用了8分频,那就是计数为1us,然后计数到
20为一个半周期,也就周期为40us,循环点亮led,为什么我用示波器显示图形是,显示的是周期竟然是400us,也就是说我的计数为20us,不是理想的1us,看程序我也没感觉有问题,这是怎么回事呢?
void main(void)
{

DDRB=0xff;
PORTB=0xDF;

SREG=0x80;开中断
TIMSK|=(1<<TOIE0);
TCCR0|=(0<<CS02)|(1<<CS01)|(0<<CS00);8分频
TCNT0=0xff; 初值定时为1us

while(1);
}
#pragma interrupt_handler Time0:10
void Time0(void)
{
TCNT0=0xff;

i++;

if(i==20){

LED13_1;
}
if(i==40){
LED13_0;
i=0;
}
}
这个究竟怎么回事,求解
展开
 我来答
无中生有0123
推荐于2016-06-01 · 知道合伙人教育行家
无中生有0123
知道合伙人教育行家
采纳数:237 获赞数:917
物联网、智能柜.

向TA提问 私信TA
展开全部
系统时钟8分频;计数一次就进入中断,也就意味着,单片机每次执行8条单周期指令,就要进入中断;当你的中断内需要时间大于8个周期时,出了中断,就会再次进入中断;

修改建议:
频率降低一点;改为外部时钟,放大一点(5V供电可超频到33M);

否则会出逻辑错的;

或者使用定时器的比较匹配输出,保证没问题;

另外 00,FF是边界,比较容易出逻辑问题;
追问
我用了16M晶振,1分频,定时1us,示波器上看为10us定时,扩大了10倍,难道我定时1us太小了?
追答
是的!16个周期就要进入一次中断,进出中断的时间不止16个了………………
注意细节……
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式