?? exp4.c
字號:
#include <io8535.h>
#include <intrinsics.h>
#define pulse_out PORTC //定義端口C為脈寬輸出端口
#define ICP PIND_Bit6 //定義ICP引腳
unsigned char ov_counter; //計數器1溢出
unsigned int rising_edge,falling_edge; //定義用于存儲的變量
unsigned long pulse_clocks; //定義用于存儲實際的時鐘
#pragma vector=TIMER1_OVF1_vect
__interrupt void timer1_ovf_isr(void) //定義計數器1溢出中斷服務程序
{
ov_counter++; //當發生溢出時,計數器自加
}
#pragma vector=TIMER1_CAPT1_vect
__interrupt void timer1_capt_isr(void) //定義計數器1捕獲中斷服務程序
{
//通過檢測ICP引腳的電平,檢測信號的上升沿或下降沿
//按照定義的ICP引腳觸發類型,執行中斷
if(ICP)
{
rising_edge=ICR1; //保存脈沖的起始時間
TCCR1B=TCCR1B&0xBF; //設置系統為下降沿觸發
ov_counter=0; //清零本次溢出計數器
}
else
{
falling_edge=ICR1; //保存下降沿時間
TCCR1B=TCCR1B|0x40; //設置系統為上升沿觸發
pulse_clocks=(unsigned long)falling_edge-(unsigned long)rising_edge+(unsigned long)ov_counter*0x1000;
//計算
pulse_out=pulse_clocks/500; //在C端口輸出毫秒
}
}
void main(void)
{
DDRC=0xFF; //設置端口C為輸出
PORTC=0xFF;
DDRD=0x00;
TCCR1B=0xC2; //設置計時器1的時鐘為clock/8
//系統上升沿捕獲,并具有消除噪聲功能
TIMSK=0x24; //定義計時器1溢出中斷和捕獲中斷
__enable_interrupt();
while(1)
;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -