|
马老师您好!
我写了一个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();
};
}
调试图 (原文件名:11111111111.JPG) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|