Merhaba yaklaşık olarak 38 kHz frekansa sahip bir PWM sinyali üretmek istiyorum. Periyodumu 26 mikrosaniye olacak şekilde ayarlıyorum.
(https://i.ibb.co/ZgBpT8y/f0fd36b0-bebd-4a31-b564-98962cf4749e.jpg) (https://ibb.co/ZgBpT8y)
Ancak benim kodu hesaplama şeklime göre böyle bir sinyal elde etmemem gerekiyor. Clock frekansı 1MHz yani bir clock darbesi 1 mikrosaniye.
if((P1IN & BIT3)!=BIT3) { //butona basılırsa
for(i=0;i<692;i++){ // 38kHz, 9ms %50 dutycycle PWM sinyal period=26us
P2OUT^=0x01;
__delay_cycles(4);
}
P2OUT=0x00;
}
hesabıma göre i++,i<692 ve Xor işlemi yaparken toplam 3 cycle harcanıyor. 4 saniye de ekleyince toplam 7 cycle yapıyor aynısı xor işlemi yapıldıktan sonra da olduğu için hesabıma göre periyodun 14 mikrosaniye olması lazım. Ancak ben 26 mikrosaniye gözlemliyorum. Sizce bunun sebebi nedir?
Varsayımların yanlış,
C de böyle bir hesap yapamazsın,
ASM çıktısına bakman lazım,
o zaman neden olduğu açıkça görülür.
Misal, 8 bitlik bir işlemci kullanıyorsan
i<692 sorusu 1 komut çevriminde yapılamaz.
For döngüsüne girip çıkmak bedava yapılmaz.
Xor işlemi tek saykılda yapılamaz.
Sonra 'ucundan azıcık asm öğrenin' deyince kızıyorlar.