为什么M8的T1工作在快速PWM(14)模式下OCR1A不能写入16位的数据,只能写如低字节呢?
马老师您好!我写了一个M8的PWM程序,用的T1的快速PWM模式(14模式)。TOP值ICR1=0x0493,OCR1A=0x0249。 溢出中断和比较匹配中断都开。
但是我在AVR Studio中软件仿真单步执行到OCR1A=0x0249;指令后,仿真器显示我的OCR1A寄存器数值为0x49.高位0x02没有写入。
而且开始执行程序后,比较匹配中断两次后溢出中断才中断一次。很奇怪!
另外我用的是ICC的编译器,编译的时候目标器件选的是M8,在AVR Studio仿真中我也选择了M8位目标器件。
下面是程序:
#include <iom8v.h>
#include <macros.h>
volatile unsigned char OCR1A_state=0,TOP1_state=0;
#pragma interrupt_handler OCR1A_interrupt:iv_TIMER1_COMPA
void OCR1A_interrupt(void)
{
NOP();
OCR1A_state=1;
TOP1_state=0;
NOP();
}
#pragma interrupt_handler TOP1_interrupt:iv_TIMER1_OVF
void TOP1_interrupt(void)
{
NOP();
OCR1A_state=0;
TOP1_state=1;
NOP();
}
void main(void)
{
CLI();
DDRB|=(1<<PB1);
TCCR1A=(1<<COM1A1)|(1<<COM1A0)|(1<<WGM11);//方式14
TCCR1B=(1<<WGM12)|(1<<WGM13);
TIMSK=(1<<OCIE1A)|(1<<TOIE1);
//ICR1H=0x04;
//ICR1L=0x93;
ICR1=0x0493;
//OCR1AH=0x02;
//OCR1AL=0x49;
OCR1A=0x0249;
SEI();
TCCR1B|=(1<<CS12)|(1<<CS10);//定时器开始
NOP();
while(1)
{
NOP();
NOP();
NOP();
};
}
http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_530641.JPG
调试图 (原文件名:11111111111.JPG) 另外,我把头文件换成M128的,不修改任何代码,就一切OK,没问题。 没人回答啊! 我也遇到这个问题,我是使用的T1定时器,但是下载到板子,PWM是正确的,等待高人回答 AVR STUDIO的问题
页:
[1]