با سلام وخسته نباشید
دوستان بعد مطالعه رجیسترای مبدل انالوگ به دیجبتال سنسور دمای LM35 رو به روش سرکشی و بدون وقفه راه اندازی کردم
بعدش خواستم با استفاده از وقفه این کارو بکنم و کد زیر رو نوشتم
مشکلم اینه که داخل حلقه بینهایت اگه استارت نزنم اعداد نامعتبری میگیرم و نمیدونم چرا؟ مگه بعد خروج از وقفه خود میکرو استارت نمیزنه؟؟
اگه از مهندسای عزیز کسی این سنسور رو با وقفه (دستورات رجیستری )و بدون مشکل راه انداحته کدشو بذاره تا مقایسه کنم
ممنونم ازهمگی
کد:
#include "lpc17xx.h" /* LPC17xx definitions */ #include "lcd4bit.h" #include <stdio.h> void Delay (uint32_t Time) { uint32_t i; i = 0; while (Time--) { for (i = 0; i < 5000; i++); } } void ADC_IRQHandler (void) { char buff[20]; unsigned short current_value; int s; unsigned int i; while ((LPC_ADC->ADGDR & 0x80000000) == 0); i = LPC_ADC->ADDR0; // Read A/D Data Register current_value = (i >> 4) & 0x0FFF; // bit 4:15 is 12 bit AD value s = current_value/13; sprintf(buff,"Temp = %i ",s); lcd_puts(buff); Delay(1500); command(0x01); NVIC_DisableIRQ(ADC_IRQn); } //=================================================================================================== int main(void){ lcd_init_4bit(); Delay(1000); //========================================================== LPC_PINCON->PINSEL1 = 1 << 14; // p0.23 select as ADC0.0 23-16=7 2*7=14 LPC_SC->PCONP |= (1 << 12); // Enable power to AD block LPC_ADC->ADCR |= (1<<0); //select AD0.0 0x1 0x2 0x4 0x8 1000 LPC_ADC->ADCR |= 1<<8; // ADCLK is 12.5 MHz 1 0000 0000 //LPC_ADC->ADCR |= 0x10000; // BURST bit 1 << 16 LPC_ADC->ADCR |= 0x200000; //Power up, 1 << 21 //LPC_ADC->ADCR |= 0x08000000; //Start conversion on a falling edge on the selected CAP/MAT signal. // 1 << 27 //----------------------------- LPC_ADC->ADCR |= 0x01000000; // Start A/D Conversion , When the BURST bit is 0 LPC_ADC->ADINTEN |= 0x00000001; // Enable interrupt on channel 0 //=========================================================== //LPC_ADC->ADCR &= ~(7<<24); /* stop conversion */ //LPC_ADC->ADCR |= (1<<24); /* start conversion */ while(1){ LPC_ADC->ADCR |= (1<<24); /* start conversion */ چرا باید باشه؟؟؟؟؟ NVIC_EnableIRQ(ADC_IRQn); } }
دیدگاه