?? int2gisr.c
字號:
#include "F2407REGS_c.h"
/*************************************************************************
文件名: interrupt INT2()
日期: 2007年2月15日
公司(作者):
描述和說明: CPU核級中斷2(INT2)主服務程序
*************************************************************************/
ioport unsigned port0002; // 定義I/O口地址變量
// 由于I/O空間只有一個設備AD7865
// 所以AD7865地址可任意設,現設為0x0002
#define AD7865_CS port0002 // 定義字符標識AD7865_CS等于I/O口地址0x0002
unsigned int timer1_number=0; // 全局變量,用于定時器中斷計數
signed int AD7865_U; // 存14位AD轉換結果,后變為16位數
signed long U_data_in[320]; // 10個周波AD采樣數據,為長整數
unsigned int calculating_flag=0;// 主循環中有效值計算開關,值為1時計算
void interrupt INT2()
{
switch(PIVR) // 由外設中斷向量寄存器PIVR判斷
{ // 由哪個片內外設事件引起的中斷
case 0x0027: // 定時器1的0.625ms周期中斷
// 中斷向量為0x0027
T1CNT=0x00; // 定時器1的計數器重新賦0
EVAIFRA=EVAIFRA&0x0080; // 清除定時器1周期中斷標志,
// 否則以后的中斷將被忽略
AD7865_U=AD7865_CS; // 讀AD轉換結果,14位2的補碼
AD7865_U=AD7865_U<<2; // 14位2的補碼轉變為16位2的補碼
U_data_in[timer1_number]=AD7865_U; // 存入AD采樣數據緩沖區
timer1_number++; // 定時器1中斷次數加1
if(timer1_number==320)
{
timer1_number=0; // 采10個周波后,計數復位,重新開始
calculating_flag=1; // 通知主循環,可以進行有效值計算
}
PFDATDIR = PFDATDIR&0xFFEF; // IOPF4輸出低電平,為下次再次輸出高電平作準備
PFDATDIR=PFDATDIR|0x1010; // 為再次啟動AD,輸出高電平 (IOPF4) CONVST=1,
// 形成啟動AD所需的上升沿
default: // 其它結果
break; // 返回
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -