📄 test_t1.c
字号:
//*************************************************
//测试功能:t1内部计数,如有溢出则计量溢出次数
//测试方法:
//测试结果:ok
//时钟频率:外部8m
//管脚分配:
//注意事项:
//完成时间:2009.03.15
//**************************************************
//**************************************************
//头文件
//**************************************************
#include <iom16v.h>
#include <macros.h>
//**************************************************
//*****************************************************
//全局变量定义
//*****************************************************
unsigned char N=0;//用来区别是第一次外部中断还是第二次中断
unsigned int T1OVF_NUM=0;//用来计定时器T1的溢出次数
unsigned long int T1_NUM;//T1计的总时钟的个数
//*****************************************************
//函数声明
//*****************************************************
void INT0_INIT(void);
void T1_INIT(void);
//*****************************************************
//函数名称:void INT0_INIT(void)
//函数功能:int0初始化,上升沿产生中断,使能中断
//注意事项:未开总中断
//*****************************************************
void INT0_INIT(void)
{
MCUCR|=((1<<ISC01)|(1<<ISC00));
GICR|=(1<<INT0);
}
//*****************************************************
//函数名称:void INT0_INTERRUPT(void)
//函数功能:中断处理,N+1
//注意事项:
//*****************************************************
#pragma interrupt_handler INT0_INTERRUPT:2
void INT0_INTERRUPT(void)
{
if(!N)
{
TCCR1B=0X01;//开始内部计数
MCUCR=0X02;//设置外部中断0下降沿产生中断
N++;
}
else
{
TCCR1B=0X00;//定时器t1停止工作
CLI();//关中断,进行数据处理
//数据处理
T1_NUM=T1OVF_NUM;
T1_NUM=T1_NUM*65536+TCNT1;
//数据处理结束
T1OVF_NUM=0;
TCNT1=0X0000;
MCUCR|=((1<<ISC01)|(1<<ISC00));//设置外部上升沿中断
N=0;//
SEI();
}
}
//**************************************************
//函数名称:void T1_INIT(void)
//函数功能:内部定时
//注意事项,定时器未工作,定时器工作,需+TCCR1B=0X01;
//**************************************************
void T1_INIT(void)
{
TCCR1A=0X00;
TCNT1=0X0000;
TIMSK|=(1<<TOIE1);
}
//**************************************************
//函数名称:void T1_OVF(void)
//函数功能:ti溢出处理
//注意事项:
//**************************************************
#pragma interrupt_handler T1_OVF:9
void T1_OVF(void)
{
T1OVF_NUM++;
}
//**********************************************************
//主函数
//**********************************************************
void main(void)
{
CLI();
INT0_INIT();
T1_INIT();
SEI();
while(1)
;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -