|
-
- <P>void timer1()
- {
- TIMSK=(1<<TICIE1)|(1<<TOIE1); //0X02输入捕获中断使能
- TCCR1B=(1<<ICNC1)|(1<<ICES1)|(1<<CS12); //输入捕获噪音使能,上升沿捕获,时钟256分频1us计数一次
- TCNT1=0X85ed;// ###定时1s#########
- TIFR=(1<<ICF1)|(1<<TOV1); //0x20写"1"清输入捕获标志位
- //SREG=SREG&0x7f;
- }</P>
复制代码- void fre_pwm(int i,int b)
- {
- DDRD |=(1<<4); // OC1B 管脚设置为输出
- DDRD |=(1<<5); // OC1A 管脚设置为输出
- TCCR1A=(0<<COM1A1)|(1<<COM1A0)|(1<<COM1B1)|(0<<COM1B0)|(1<<WGM11)|(1<<WGM10);
- // OC1A 作为上限值 电平取反 OC1B 作为比较值 比较匹配时清零,到达上限值是置1
- TCCR1B=(1<<WGM13)|(1<<WGM12)|(0<<CS12)|(1<<CS11)|(1<<CS10);
- // 波形产生模式15 , 64分频
- OCR1A=i; // 晶振频率16MHz , 64分频
- OCR1B=i*b/100; // 占空比
-
- }
复制代码 快速pwm和捕获的功能都用到了TCCR1B这个寄存器,是不是不能同时在一个main函数下使用,如果不能应该怎么样改才能同时使用,我用的是atmega16的的芯片。
|
|