/********************************************************
timer.h
***************************************************/
#ifndef _timer_
#define _timer_
void DelayXms(unsigned int x);
void Timer0_init(void);
void Timer0_stop(void);
void Timer1_init(void);
void Timer1_stop(void);
#endif
/**************************************************
timer.c
******************************************************/
#include <iom8v.h>
#include "mytype.h"
#include "timer.h"
#include "uart.h"
void DelayXms(unsigned int x)//延迟xms
{
unsigned int m;
while(x--)
{
m="1275";
while(m--);
}
}
void Timer0_init(void)
{
TCCR0=0x05;//0X00停止;0X01:CK;0X02:CK/8;
//0X03:CK/64;0X04:CK/256;
//0X05:CK/1024;0X06:T0:FALLING;0X07:T0:RISING;
TCNT0=0X00;//上记数,设置初值0x00;
SREG=0X80;//开中断;
TIMSK|=(1<<TOIE0);//Timer0溢出中断开;
}
void Timer0_stop(void)
{
TCCR0=0; //timer0/counter0 stoped;
}
void Timer1_stop(void)
{
TCCR1B=0; //timer0/counter0 stoped;
}
void Timer1_init(void)
{
TCNT1=0X0000;//记数初值
TCCR1A=0x00;//禁止比较和PWM功能;
TCCR1B=0x01;//0X00停止;0X01:CK;0X02:CK/8;
//0X03:CK/64;0X04:CK/256;
//0X05:CK/1024;0X06:T1:FALLING;0X07:T1:RISING;
//SREG=0X80;//开中断;
}
/**************************************************
main.c
************************************************/
#include <iom8v.h>
#include "mytype.h"
#include "timer.h"
#include "uart.h"
uint8 table[16]={"0123456789abcdef"};
#pragma interrupt_handler timer_int_0:10
void timer_int_0(void)//定时器溢出中断函数。
{
uint16 counter;
Timer0_stop();//停止定时器0.
Prints("Timer0 overflow...",1);
Timer1_init();//定时器1初始化。
DelayXms(4);//定时4MS
Timer1_stop();//定时器1停止。
counter=TCNT1;//取定时器计数值。
Send_abyte(table[counter/4096]);//发送COUNTER值到串口。
Send_abyte(table[counter%4096/256]);
Send_abyte(table[counter%256/16]);
Send_abyte(table[counter%256%16]);
}
void main(void)
{
Uart_init();//串口初始化。
Timer0_init();//定时器0初始化。
Prints("Timer0 start...",1);
while(1);
}
工程包如下:
文章评论(0条评论)
登录后参与讨论