当前位置:首页 > atmega128定时器
#include
#define uchar unsigned char #define uint unsigned int
void Delayus(uint US); //微秒延时子程序 void Delayms(uint MS); //毫秒延时子程序
void timer1_init(void);
uchar temp=0x01;
void main(void) {
uchar i,temp;
DDRA=0XFF; DDRC=0XFF; DDRF |=0X03; PORTF|=0X0E; PORTA=0XFF; PORTC=0XFF; PORTF&=0xF9;
DDRB |=0X10; PORTB|=0X10; timer1_init(); SEI(); while(1); }
void timer1_init(void) {
TCNT1H = 0xE3; TCNT1L = 0xE1;
TCCR1A = 0x00;
TCCR1B = 0x05;
TIMSK = 0x04; }
//LED IO口设为输出 //数码管段选设为输出 //LED及数码管锁存IO口设为输出 //锁存数据关闭数码管 //PB4设为输出 //关闭PB4外接的LED //enable interrupts //设置 TC1 的 计数寄存器 高8位值,基于7.3728M晶振 //设置 TC1 的 计数寄存器 低8位值,基于7.3728M晶振 //设置TC1 为 CLK/1024分频,启动TC1 //设置 定时计数器 的 屏蔽寄存器 /*--------------------------------------------------------------------
程序名称:定时器1中断服务程序 程序功能: 注意事项: 提示说明: 输 入: 返 回:
--------------------------------------------------------------------*/ #pragma interrupt_handler timer1_ovf_isr:15 void timer1_ovf_isr(void) {
TCNT1H = 0xE3; //reload counter high value TCNT1L = 0xE1; //reload counter low value PORTA=temp; temp<<=1; if(temp==0x00) temp=0x01; }
/**************************************************** 函数名称: Delayus
功 能: 延时指定微秒(8M晶振)
参 数: US--延时的微秒数(大约,不是很精确,MS越大越准确) 返回值 : 无
/****************************************************/ void Delayus(uint US) {
uint i;
US=US*5/4; for( i=0;i /**************************************************** 函数名称: Delayms 功 能: 延时指定毫秒(8M晶振) 参 数: MS--延时的毫秒数 返回值 : 无 通过软件仿真反复实验得到的数值 /****************************************************/ void Delayms(uint MS) { uint i,j; for( i=0;i for(j=0;j<1141;j++); }
共分享92篇相关文档