#include <89c51rd2.H>
#define PWM P2_0 // PWM çıkış ucu(Servonun kontrol ucu)
#define Saga_Don P1_0 // Sağa dönme butonu
#define Merkez P1_1 // Merkeze alma butonu
#define Sola_Don P1_2 // Sağa dönme butonu
void main (void)
{
// _ _
// __| |__________| |__________
// -----20msn---
int i=3; // 20 msn'lik PWM periyot içindeki '1' olma süresi için
int sayac; // PWM sinyalin 20 msn'lik peryodu için
TMOD=0x01; // T0'ın 16 bit (mod1) zamanlayıcı olarak ayarlanması
TH0=0xFE; // Z/S'nin başlangıç değerinin kurulması
TL0=0x0C; // T0 her 500 saymada taşacak(0,5 ms)
P1=0xFF; // P1 portunun giriş olarak ayarlanması
while(1)
{
if(!Sola_Don) // Sola Dön butonuna basıldı ise
i=2; // 1 msn 'lik PWM sinyali elde edilecek
if(!Saga_Don) // Sola Dön butonunan basıldı ise
i=4; // 2 msn 'lik PWM sinyali elde edilecek
if(!Merkez) // Merkez butonunan basıldı ise
i=3; // 1,5 msn 'lik PWM sinyali elde edilecek
TR0=1; // T0'ın saymaya başlaması
while(TF0) // Taşma olmuş ise
{
TR0=0; //Z/S'i durdur
TF0=0; // Taşma bayrağını temizle
if (sayac==40) // 40x0,5=20 msn olduğunda(PWM peryodu)
sayac=0; // sayacı sıfırla
else
sayac++; // sayacı bir arttır
if(sayac<i) // i'nin değerine göre 1,1.5 ve 2 msn
PWM=1; // boyunca PWM çıkışı Lojik 1
else
PWM=0; // Diğer durumlarda Lojik 0
/* Z/S her çalıştırmada sayacak değere tekrar kurulmalı */
TH0=0xFE;
TL0=0x0C;
}
}
}