#include <18F4550.h>
#device ADC=10
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOBROWNOUT
#use delay(clock=48000000)
#use fast_io(b)
#use fast_io(d)
int pwm=0,duty_0=0,duty_1=0,duty_2=0,duty_3=0,duty_4,duty_5=0,duty_6=0;
int16 zaman=0;
#int_timer0 // Timer0 taşma kesmesi
void kesme ()
{
set_timer0(113); // TMR0 kaydedicisine 113 değeri yükleniyor
if (pwm==0) // Eğer PWM değişkeni 0 ise
{
output_high(pin_b0); // RB0 çıkışı lojik-1
output_high(pin_b1); // RB1 çıkışı lojik-1
output_high(pin_b2); // RB2 çıkışı lojik-1
output_high(pin_b3); // RB3 çıkışı lojik-1
output_high(pin_b4); // RB4 çıkışı lojik-1
output_high(pin_b5); // RB5 çıkışı lojik-1
output_high(pin_b6); // RB6 çıkışı lojik-1
}
if (pwm>=duty_0) output_low(pin_b0);
if (pwm>=duty_1) output_low(pin_b1);
if (pwm>=duty_2) output_low(pin_b2);
if (pwm>=duty_3) output_low(pin_b3);
if (pwm>=duty_4) output_low(pin_b4);
if (pwm>=duty_5) output_low(pin_b5);
if (pwm>=duty_6) output_low(pin_b6);
zaman++;
// Servo motor dönüş adımları arası bekleme süresi için
if (zaman>17350) // 17350x114,4µsn=1.984.840µsn, yaklaşık 2msn
{
zaman=0;
}
pwm++;
if (pwm>=173)
pwm=0;
}
void main(void)
{
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_4);
set_timer0(113);
enable_interrupts(int_timer0);
enable_interrupts(global);
output_b(0x00);
while(1) {
duty_0=9;
}
}