AD采樣程序的設(shè)計(jì)
例如:當(dāng)檢測(cè)到某點(diǎn)的電壓,大于預(yù)設(shè)定值,則產(chǎn)生過壓保護(hù),通過單片機(jī)控制減小輸入的電壓值、斷電、鳴叫,等一系列保護(hù)電路措施...
1.主函數(shù):
void main(void)
{
// USER CODE BEGIN (MAIN_Main,2)
uword temp1=0,temp2=0,temp3=0,temp4=0;
// USER CODE END
MAIN_vInit();
// USER CODE BEGIN (MAIN_Main,3)
// USER CODE END
while(1)
{
// USER CODE BEGIN (MAIN_Main,4)
ADC_vStartSeqReqChNum(0,0,0,3);
temp1=ADC_uwGetResultData0();
temp1=temp1*10+24;
temp1=temp1/48;
temp2=temp1/10;
temp3=temp1%10;
temp4=temp24|temp3;
P3_DATA=temp4;
// USER CODE END
}
} // End of function main
2.ADC函數(shù):
在檢測(cè)到某點(diǎn)電壓大于或小于與設(shè)定值,單片機(jī)產(chǎn)生中斷,產(chǎn)生相應(yīng)措施。
void ADC_vIsr(void) interrupt ADCINT
{
// USER CODE BEGIN (ADC_Isr,2)
uword i=0,j=0;
// USER CODE END
SFR_PAGE(_su0, SST0); // switch to page 0
// Check Interrupt Request 0 Flag
if (((IRCON1 0x08) != 0)) //判斷中斷0標(biāo)志位是否置位
{
IRCON1 = ~(ubyte)0x08; // 置位了,清除該標(biāo)志位, 為下次做準(zhǔn)備
// USER CODE BEGIN (ADC_Isr,3)
for(i=0;i1000;i++) //八個(gè)發(fā)光二極管間隔亮,延時(shí)時(shí)間約0.45s
for(j=0;j500;j++)
P3_DATA=0xaa;
for(i=0;i1000;i++)
for(j=0;j500;j++)
P3_DATA=0x55;
// USER CODE END
}
// Check Interrupt Request 1 Flag
if (((IRCON1 0x10) != 0)) //判斷中斷1標(biāo)志位是否置位
{
IRCON1 = ~(ubyte)0x10; //置位了,清除該標(biāo)志位,為下次做準(zhǔn)備
// USER CODE BEGIN (ADC_Isr,4)
for(i=0;i1000;i++) //八個(gè)發(fā)光二極管高低半間隔亮,
for(j=0;j500;j++)
P3_DATA=0xf0;
for(i=0;i1000;i++)
for(j=0;j500;j++)
P3_DATA=0x0f;
// USER CODE END
}
// USER CODE BEGIN (ADC_Isr,5)
// USER CODE END
SFR_PAGE(_su0, RST0); // restore the old SCU page
} // End of function ADC_vIsr
評(píng)論