?? 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 + -