辅助程序 1,定义用到的变量
unsigned int Count = 0; //定义计数值变量COUNT
bit Flag = 0;
sbit DQ = P3^3;
辅助程序 2,中断子函数
void exint1() interrupt 2
{
_nop_();
_nop_();
If (DQ == 0)
{
//定义中断服务标志位C_FLAG;
//定义IO引脚
//误触发判断
Count++; //计数+1
Flag = 1; //中断标志Flag
}
}
辅助程序 3,延时子函数
void Delay2ms()
{
for( i=0; i<xxxx; i++) {;} //时钟周期延时10ms,根据MCU指令周期设计具体的xxxx值
}
主程序
void main(void)
{
unsigned int Data = 0;
unsigned float Temp = 0;
INT1 = 1;
//主程序 main
// 中断IO口初始状态为High
IT1 = 1;
EX1 = 1;
EA = 1;
// 外中断信号方式控制位,1:下降沿中断。单脉冲周期触发一次
// 外部中断1允许控制位
// 中断允许总控制位
Count = 0; //计数值清零
12
Copyright © NOVOSENSE Microelectronics Co.,Ltd 2023. All rights reserved.
while (1)
{ if( Flag == 1)
{ Flag = 0;
Delay2ms();
if(!Flag)
{ EX1 = 0; //关闭外部中断
Data = Count; //锁存计数值
Count = 0;
if(Data >= 801) //正负温度判断
{ Temp = (Data - 801)*0.0625; }//正温度 else { Temp = (
801 - Data)*0.0625;
} //负温度 Flag = 0;
EX1=1; //开启外部中断 } //
END if(!Flag)
}
//END if(Flag == 1) }
//
END while 循环}
|