امتیاز موضوع:
  • 2 رأی - میانگین امتیازات: 3
  • 1
  • 2
  • 3
  • 4
  • 5
تحلیل برنامه(فوری)
نویسنده پیام
sahar2000 آفلاین
كاربر تک ستاره
*

ارسال‌ها: 29
موضوع‌ها: 4
تاریخ عضویت: آبان ۱۳۹۰

تشکرها : 10
( 16 تشکر در 7 ارسال )
ارسال: #1
تحلیل برنامه(فوری)
بچه ها کمک
کی تحلیل این برنامه رو بلده بهم بگه؟
فوریه
کد php:
#include <mega8.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
   
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>

#include <delay.h>
char buffer[20];
int w;
#define ADC_VREF_TYPE 0x40

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA 0x10)==0);
ADCSRA|=0x10;
return 
ADCW;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=0 State1=T State0=T
PORTB=0x00;
DDRB=0x04;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 15.625 kHz
// Mode: Ph. correct PWM top=00FFh
// OC1A output: Discon.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x21;
TCCR1B=0x03;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 62.500 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE 0xff;
ADCSRA=0x84;

// LCD module initialization
lcd_init(16);
lcd_clear();
sprintf(buffer,"WELCOM...");
lcd_puts(buffer);
delay_ms(1000);
while (
1)
      {
      
lcd_gotoxy(0,0);
      
w=read_adc(0);
      
OCR1BL=254-(w/4.2);
      
sprintf(buffer,"LIGHT=%d     ",w);
      
lcd_puts(buffer);
      
delay_ms(10);
      };


Heart---- ̿̿̿ ̿' ̿'\̵͇̿̿\з=(•̪●)=ε/̵͇̿̿/'̿'̿ ̿ ̿̿̿ ----Heart
(آخرین ویرایش در این ارسال: ۲۲-دى-۱۳۹۲, ۱۸:۰۱:۱۸، توسط babyy.)
۲۲-دى-۱۳۹۲, ۱۷:۵۴:۰۶
ارسال‌ها
پاسخ
omid_phoenix آفلاین
مدیر بخش
*****

ارسال‌ها: 2,238
موضوع‌ها: 108
تاریخ عضویت: شهریور ۱۳۹۱

تشکرها : 12682
( 15433 تشکر در 4574 ارسال )
ارسال: #2
RE: تحلیل برنامه(فوری)
(۲۲-دى-۱۳۹۲, ۱۷:۵۴:۰۶)sahar2000 نوشته است: بچه ها کمک
کی تحلیل این برنامه رو بلده بهم بگه؟
فوریه

سلام
تحلیل خط به خط کدها رو نیاز دارید یا عملکرد برنامه؟
کدوم قسمت هاش نیاز به تحلیل داره بگید توضیح بدم

۲۲-دى-۱۳۹۲, ۱۹:۰۲:۲۸
ارسال‌ها
پاسخ
تشکر شده توسط : babyy, sharin, Ambassador, sahar2000
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #3
RE: تحلیل برنامه(فوری)
سلام.

مهندس تحليل خاصي ندارهه.
30ثانيه وقت بذاريد كدهاش رو نگاه كنيد متوجه مي شيد كه مقدار ADC رو مي خونه ، اين مقدار رو تقسيم به 4.2 مي كنه و از 254 كمش مي كنه و مي دهه به رجيستر پايين OCR كه 8 بيتي هست و در نتيجه روي پايه ي مربوطه ي ميكرو موج PWM درست مي كنه و مقدار خونده شده توسط ADC رو روي Lcd نشون مي دهه و تمام.

۲۲-دى-۱۳۹۲, ۱۹:۰۸:۳۱
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : babyy, omid_phoenix, Ambassador, lord_viper, sahar2000
sahar2000 آفلاین
كاربر تک ستاره
*

ارسال‌ها: 29
موضوع‌ها: 4
تاریخ عضویت: آبان ۱۳۹۰

تشکرها : 10
( 16 تشکر در 7 ارسال )
ارسال: #4
RE: تحلیل برنامه(فوری)
تحلیل خط به خط
این کد راجب کنترل روشنایی در محیط صنعتیه
که
هر چه نور محیط زیاد باشه این نور را کم میکنه وبالعکس

Heart---- ̿̿̿ ̿' ̿'\̵͇̿̿\з=(•̪●)=ε/̵͇̿̿/'̿'̿ ̿ ̿̿̿ ----Heart
۲۴-دى-۱۳۹۲, ۱۱:۴۸:۵۶
ارسال‌ها
پاسخ
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #5
RE: تحلیل برنامه(فوری)
با توضيحات بالا فكر نمي كنم مرور مجدد برنامه نا مفهوم باشه.

كدويزاد يه سري كد آماده توليد مي كنه( بسته به تنظيماتي كه براش لحاظ شدهه )
فرضم اينه كه با زبان C آشنايي داريد.


کد php:
unsigned int read_adc(unsigned char adc_input
تعريف تابعي براي خوندن مقدار ADC ، يك ورودي مي گيرهه براي تعيين نوع كانال و مقدار خونده شده رو هم بر مي گردونه. هر وقت نياز به محاسبه ي ADC داشتيم، اين تابع رو در روتين برنامه ي اصلي مون فراخواني مي كنيم و به يه متغيير انتسابش مي ديم.

رجيستر ADMUX يكي از ريجسترهاي مربوط به واحد ADC هست كه تنظيم هر بيت اش موجب عملكرد خاصي براي اين واحد مي شه.
اين ريجستر و باقيه ريجسترهاي استفاده شده رو بايد در ديتاشيت يا يه كتاب مرجع چك كنيد كه بيت هاي مختلفش چه نقشي دارند
( دقت كنيد كه نيازي به حفظ نيست ، چون هر ميكرويي رجيسترهاي خاص خودش رو دارهه ، پس فقط روال كار رو بايد بدونيد )
براي هر بار تنظيم ، اگر در سطح رجيستر كد مي زنيد ، بايد ديتاشيت يا كتاب مرجع كنارتون باشه و هيچيش حفظي نيست.
توي متن كامنت هم گذاشته كه در واقع هر خط رو دارهه توضيح مي دهه كه چكاري مي كنه.

TCNT و TCCR و ... مربوط به تايمر/كانتر هستن ، در اين پروژه هدف استفاده از PWM بودهه ، پس سراغ ريجسترهاي OCR هم رفته. PWM هم براي محاسباتش از تايمر استفاده مي كنه و اين 2 واحد به هم مربوط مي شن. تنظيمات رو در كتاب يا ديتاشيت چك كنيد.

باقيه رجيسترها هم كه كامنت نويسي شدن و كارشون مشخصه ، براي جزئيات و دليل مقدار دهي ها بايد مجدد كتاب يا ديتاشيت رو چك كنيد.

كدهاي داخل حلقه ي بينهايت رو هم كه در پست قبلي گفتم.

۲۵-دى-۱۳۹۲, ۱۰:۰۳:۱۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : omid_phoenix, sahar2000, babyy


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  درخواست کمک فوری yasser1364 6 3,248 ۲۶-فروردین-۱۳۸۶, ۰۸:۱۹:۲۶
آخرین ارسال: avini

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 3 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS