#include <mega16a.h> //معرفي کتابخانه ميکروکنترلر مگا 16//
#include <delay.h> //delay معرفي کتابخانه//
void main(void)
{
int i; //در روبرو يک متغير براي استفاده در برنامه تعريف شده است//
//است را خروجي کرده ايم PWM که در واقع پين خروجي موج D در زير پين 4 از پورت//
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (1<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
//از خط 27 تا 34 تنظيمات واحد تايمر/کانتر 1 ميکرو مي باشند که با توجه به تنظيمات ما در محيط کدويزارد ايجاد مي شوند//
//در زير مي توانيد توضيحات مربوط به تنظيمات رجيسترهاي تايمر/کانتر 1 ميکرو را مشاهده کنيد//
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 1000/000 kHz
// Mode: Fast PWM top=OCR1A
// OC1A output: Disconnected
// OC1B output: Non-Inverted PWM
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 20 ms
// Output Pulse(s):
// OC1B Period: 20 ms Width: 0/400 ms
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (1<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1A=20000; //دوره تناوب سيگنال ما را مشخص مي کند که براب با 20000 ميکرو ثانيه يا 20 ميلي ثانيه قرار داده شده است OCR1A رجيستر//
OCR1B=400; //را مشخص مي کند که براي شروع ان را بربر با 400 ميکرو ثانيه يا 0.4 ميلي ثايه قرار داده ايم PWM عرض پالس سيگنال OCR1B رجيستر//
//را بين 400 تا 2400 مقدار دهي مي کنيم تا با ايجاد عرض پالس هاي مختلف سروو موتور در زاويه هاي مختلف چرخش کند OCR1B رجيستر for در ادامه ما توسط دو حلقه//
while (1)
{
for(i=400;i<=2400;i++) { //مي ريزد OCR1B تعريف شده که از 400 تا 2400 شمارش مي کند و درون رجيستر for در روبرو يک حلقه//
OCR1B=i;
delay_ms(2);
}
for(i=2400;i>=400;i--) { //مي ريزد OCR1B روبرو برعکس قبلي است يعني از 2400 يکي يکي کم مي کند تا به 400 برسد و مقادير شمارش را درون رجيستر for حلقه//
OCR1B=i;
delay_ms(2);
}
}
}