| 
 
| 时钟源用的是外部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口电平
 }
 
 | 
 |