搜索
bottom↓
回复: 11

大家帮我看看mega16的程序哪出问题了呗

[复制链接]

出0入0汤圆

发表于 2013-3-2 11:08:50 | 显示全部楼层 |阅读模式
//PWM
void timer0_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0x01; //set count
OCR0  = 85;  //set compare
TCCR0 = 0x71; //start timer
cou[0]=A/OCR0;
}

#pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP
void timer0_comp_isr(void)
{
counter[0]++;//compare occured TCNT0=OCR0
}

if(counter[0]>=cou[0])
  {
   PORTA^=0b00000001;//取反PA0
   counter[0]=0;
  }
为什么实际运行时PA0高低电平时间不一样?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-3-2 12:02:44 | 显示全部楼层
按我的理解,这个中断优先级比较低,如果前面还有别的中断的话,是会影响到定时的准确性的。

出0入0汤圆

发表于 2013-3-2 12:06:22 | 显示全部楼层
if(counter[0]>=cou[0])这一段代码位置在哪?

出0入0汤圆

 楼主| 发表于 2013-3-2 12:24:13 | 显示全部楼层
lcw_swust 发表于 2013-3-2 12:06
if(counter[0]>=cou[0])这一段代码位置在哪?

void main(void)
{
port_init();
init_devices();
while(1)
{
  key_scan();
  if(counter[0]>=cou[0])
  {
   PORTA^=0b00000001;
   counter[0]=0;
  }
  if(counter[1]>=cou[1])
  {
   PORTA^=0b00000010;
   counter[1]=0;
  }
  if(counter[2]>=cou[2])
  {
   PORTA^=0b00000100;
   counter[2]=0;
  }
  if(counter[3]>=cou[3])
  {
   PORTA^=0b00001000;
   counter[3]=0;
  }
}
}

出0入0汤圆

发表于 2013-3-2 12:49:12 | 显示全部楼层
星星亮了夜空 发表于 2013-3-2 12:24
void main(void)
{
port_init();

那就把它们放到counter[0]++;后面看看

出0入0汤圆

发表于 2013-3-2 14:01:26 | 显示全部楼层
同意楼上的

出0入0汤圆

 楼主| 发表于 2013-3-2 19:19:33 | 显示全部楼层
lcw_swust 发表于 2013-3-2 12:49
那就把它们放到counter[0]++;后面看看

#pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP
void timer0_comp_isr(void)
{
counter[0]++;
if(counter[0]>=cou[0])
  {
   PORTA^=0b00000001;
   counter[0]=0;
   }//compare occured TCNT0=OCR0
}

void main(void)
{
port_init();
init_devices();
  key_scan();
  //insert your functional code here...
}
是这样么?试了还是不行

出0入0汤圆

 楼主| 发表于 2013-3-2 19:21:28 | 显示全部楼层
mingqiang 发表于 2013-3-2 14:01
同意楼上的

看看7楼呗,谢谢

出0入0汤圆

发表于 2013-3-2 20:59:18 | 显示全部楼层
星星亮了夜空 发表于 2013-3-2 19:19
#pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP
void timer0_comp_isr(void)
{

是吗,while(1)去哪了呢?

出0入0汤圆

 楼主| 发表于 2013-3-2 21:32:03 | 显示全部楼层
lcw_swust 发表于 2013-3-2 20:59
是吗,while(1)去哪了呢?

while(1)只括key_scan?

出0入0汤圆

发表于 2013-3-2 21:46:17 | 显示全部楼层
星星亮了夜空 发表于 2013-3-2 21:32
while(1)只括key_scan?

对               

出0入0汤圆

 楼主| 发表于 2013-3-2 22:00:18 | 显示全部楼层
lcw_swust 发表于 2013-3-2 21:46

还是不行
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 05:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表