[AVR单片机] mega16单片机初始化对OCR1AH赋值无效

[复制链接]
2328|7
 楼主| feiyinglala 发表于 2014-1-7 23:02 | 显示全部楼层 |阅读模式
本帖最后由 feiyinglala 于 2014-1-8 18:43 编辑

用的是Atmel mega16A   编译器是 ICCAVR v7.22   晶振是7.3728M
想把OCR1A直接赋值为0x04B0;
可是定时器这么初始化后,示波器看到的不符合这个结果。倒是OCR1AL的B0对着,OCR1AH却依然为0
初始代码如下:

  1. static void Timer1_INIT(void)
  2. {
  3. uchar temp;
  4. TCCR1B = 0x00;                                 //停止定时器
  5. TCCR1A = 0xc2;                                 //A通道工作模式11,相位修正PWM,OC1A引脚在上升匹配时,置高电平
  6. //PWM计数器峰值及波的频率
  7. ICR1H = 0x07;                                 //设定了定时器1比较的峰值,同时也确定了PWM的周期
  8. ICR1L = 0xff;
  9. //输出占空比,与OCR1大小成反比

  10. OCR1AH = 0x04;                                   //???为何此句不奏效
  11. OCR1AL = 0xB0;
  12.   
  13. TCNT1H = 0x00;                         //计数器置0
  14. TCNT1L = 0x00;
  15. TIMSK &= ~0x3c;                         //不使能定时器1的A通道比较匹配,否则电路跑得太慢
  16. TCCR1B = 0x11;                                 //启动定时器1,时钟不分频
  17. }
按照4楼所建议的方法,参照范例程序赋值顺序就正常了。正常工作的代码如下
static void Timer1_INIT(void)
{
TCCR1B = 0x00;                                 //停止定时器

TIMSK &= ~0x3c;                         //不使能定时器1的A通道比较匹配,否则电路跑得太慢
TCNT1H = 0x00;                         //计数器置0
TCNT1L = 0x00;
//输出占空比,与OCR1大小成反比
OCR1AH = 0x04;                                   //???为何此句不奏效
OCR1AL = 0xB0;
//PWM计数器峰值及波的频率
ICR1H = 0x07;                                 //设定了定时器1比较的峰值,同时也确定了PWM的周期
ICR1L = 0xff;  
TCCR1A = 0xc2;                                 //A通道工作模式11,相位修正PWM,OC1A引脚在上升匹配时,置高电平

TCCR1B = 0x11;                                 //启动定时器1,时钟不分频
}

qin552011373 发表于 2014-1-7 23:57 | 显示全部楼层
用的哪个型号的片子?
 楼主| feiyinglala 发表于 2014-1-8 00:14 | 显示全部楼层
qin552011373 发表于 2014-1-7 23:57
用的哪个型号的片子?

Atmel 的
qin552011373 发表于 2014-1-8 08:11 | 显示全部楼层
feiyinglala 发表于 2014-1-8 00:14
Atmel 的

ICC有个直接生成程序的功能,你可以试下,然后和你的程序对比一下
 楼主| feiyinglala 发表于 2014-1-8 14:36 | 显示全部楼层
qin552011373 发表于 2014-1-8 08:11
ICC有个直接生成程序的功能,你可以试下,然后和你的程序对比一下

说的是代码生成器?
qin552011373 发表于 2014-1-8 15:57 | 显示全部楼层
feiyinglala 发表于 2014-1-8 14:36
说的是代码生成器?

是的,就是代码生成器
 楼主| feiyinglala 发表于 2014-1-8 18:39 | 显示全部楼层
qin552011373 发表于 2014-1-8 15:57
是的,就是代码生成器

老兄高见,哈哈。按照代范例的赋值顺序就好了。多谢多谢
qin552011373 发表于 2014-1-9 08:33 | 显示全部楼层
feiyinglala 发表于 2014-1-8 18:39
老兄高见,哈哈。按照代范例的赋值顺序就好了。多谢多谢

不客气,结贴散分吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

224

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部