时钟源用的是外部8.192mHz,无论怎么设置计数初值,方波输出的最高频率就是128k 源程序: //***********************************************************************| // 功能: 256K和8K方波产生 // 功能说明: 系统时钟采用外部8.192M晶体,T/C0计数法产生256KHz方波, T/C0的 // 时钟源采用系统时钟(不分频)即每记一次数(TCNT0增加1) 需要 // 1/8.192 us的时间。256KHz的时钟周期为1/256ms=1000/256us, 因此 // 半周期需要计数1000/256/2/(1/8.192)=16次,即TCNT0初始值为 // 256-16=240=0XF0 // MCU: ATmega16 // 编程语言: AVR-ICC // 工具软件: ICCAVR和PonyProg2000 // 系统时钟: 外部8.192MHz晶振 // 熔丝位设置: CKOPT=1 CKSEL3..0=1111 SUT1..0=10(1表示未编程,0表示编程) // 作者: 靖文(http://94179411.21ic.org/) //***********************************************************************| #include <iom16v.h> #include <macros.h>
#define set_bit(x,y) (x|=(1<<y))//置位寄器x的第y位 #define clr_bit(x,y) (x&=~(1<<y))//清零寄器x的第y位
void main(void) { unsigned int i; unsigned char n; DDRB|=BIT(1) set_bit(TCCR0,CS00);// T/C0采用系统时钟不分频 set_bit(TIMSK,TOIE0);//允许定时器T/C0溢出中断 TCNT0=240;//256K方波产生的计数初始值 SEI();//开中断 while(1); } #pragma interrupt_handler F256K:iv_TIMER0_OVF//指定中断服务程序的入口 void F256K(void)//产生256KHz的方波信号 { TCNT0=240; PORTB^=BIT(1);//翻转PB1口电平 } |