📄 isr.c
字号:
#include "hardware.h"
#define P_IOB_Data (volatile unsigned int *)0x7005
#define P_INT_Ctrl (volatile unsigned int *)0x7010
#define P_INT_Clear (volatile unsigned int *)0x7011
#define ClearWDog *(volatile unsigned int *)0x7012=1
#define P_ADC_MUX_Ctrl (volatile unsigned int *)0x702B
#define P_ADC_MUX_Data (volatile unsigned int *)0x702C
extern unsigned int TempPress; // 1:按下"输入温度"; 0:没按
extern unsigned int ResetPress; // 1:按下"复位"; 0:没按
extern unsigned int DispIt; // 1:刷新LCD; 0:不刷新 (0.5s)
extern unsigned int ADOK; // 1:AD转换完成; 0:没完成
extern unsigned int DingShi; // 1:5分钟定时报音; 0:不定时报音
extern unsigned int DingShiTime; //定时报音时间累计
extern unsigned int UpTime; //上传时间累计
extern unsigned int HeatTime; //加热时间(毫秒)
extern unsigned int ADCDataSave[10];//读取的10次AD值
void ReadAD(); //读取10次AD,存在ADCDataSave[]
//=============================================
//函数: IRQ5
//说明: IRQ5_2Hz中断
//=============================================
void IRQ5(void) __attribute__ ((ISR));
void IRQ5(void)
{
if(*P_INT_Ctrl&0x0004)
{
ClearWDog; //IRQ5_2Hz
*P_INT_Clear=0x0004;
ReadAD();
DispIt=1;
UpTime++; //上传时间计数
if(DingShi==1)DingShiTime++; //定时报音计数
}
else
{
*P_INT_Clear=0x0008; //IRQ5_4Hz
}
}
//=============================================
//函数: IRQ1
//说明: IRQ1_TMA中断,10ms
//=============================================
void IRQ1(void) __attribute__ ((ISR));
void IRQ1(void)
{
*P_INT_Clear=0x1000; //clear INT flag
if(HeatTime)
HeatTime--;
if(HeatTime==0)
*P_IOB_Data&=0xffdf; //关继电器
}
//=============================================
//函数: ReadAD
//语法: void ReadAD(void)
//参数: 无
//说明: 读取10次AD,存在ADCDataSave[]
//=============================================
void ReadAD()
{
unsigned int i;
for(i=0;i<10;i++)
{
ClearWDog;
while(!(*P_ADC_MUX_Ctrl&0x8000)); //wait,until ADC complete
ADCDataSave[i]=*P_ADC_MUX_Data;
ADCDataSave[i]&=0xffc0;
}
ADOK=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -