CCS C PIC Timer0 kesmesi ile PWM kontrolü YARDIM

ilkersatur

Yeni Üye
Katılım
17 Haziran 2022
Mesajlar
3
Merhabalar, bütünleme sınavım için çalışmaktayım. Takıldığım bir konu var. Mikroişlemci alanına hakim olanlar yardımcı olursa çok sevinirim.
Timer0 kesmesi aktif edilmiştir.
PIN_B7 1KHz'lik PWM işaret üretecektir.
PWM duty değeri PIN_B6 gelen sinyal lojik "1" ise %60, "0" ise %40 olacaktır.
PIN_B6 lojik seviye, ana program tarafından izlenerek pwm duty değerinin değişimi timer0 kesme alt programı tarafından ayarlanacaktır.
CCS C yazılımı nasıl olmalıdır?
 

Ekler

  • Ekran görüntüsü 2022-06-17 001323.png
    Ekran görüntüsü 2022-06-17 001323.png
    10.1 KB · Görüntüleme: 249
yaptığınız yere kadar atın tamamlamanıza yardımcı olmayı deneriz.
 
#include <main.h>
#byte sfr_t0l=0xFD6
#byte sfr_t0h=0xFD7
int8 t0l_ton;
int8 t0h_ton;
int8 t0l_toff;
int8 t0h_toff;
int16 sayi;
int16 sayi1;

#byte sfr_t0con=0xFD5
#bit tmr0on=sfr_t0con.7
#bit t08bit=sfr_t0con.6
#bit t0cs=sfr_t0con.5
#bit t0se=sfr_t0con.4
#bit psa=sfr_t0con.3
#bit t0ps2=sfr_t0con.2
#bit t0ps1=sfr_t0con.1
#bit t0ps0=sfr_t0con.0


#byte sfr_intcon=0xFF2
#bit sfr_gie=sfr_intcon.7
#bit sfr_tmr0ie=sfr_intcon.5
#bit sfr_t0if=sfr_intcon.2

#INT_TIMER0
void tmr0(void)
{

while(TRUE)

if (input(PIN_B6)==1)
{
output_high(PIN_B7);

sfr_t0l=t0l_ton;
sfr_t0h=t0h_ton;
}
else
{

output_low(PIN_B7);

sfr_t0l=t0l_toff;
sfr_t0h=t0h_toff;

}
}
void timer0_ayar(void);
void timer0_kesme_ayar(void);

void main()
{

timer0_ayar();
timer0_kesme_ayar();

tmr0on=1;
sfr_tmr0ie=1;


}
void timer0_ayar(void)
{
tmr0on=0;
t08bit=0;
t0cs=0;//timer
t0se=0;
psa=1;
t0ps2=0;
t0ps1=0;
t0ps0=0;

sayi=65535;
sayi-=600;
t0h_ton=make8(sayi,1);
t0l_ton=make8(sayi,0);

sayi1=65535;
sayi1-=400;
t0h_toff=make8(sayi1,1);
t0l_toff=make8(sayi1,0);
}

void timer0_kesme_ayar(void)
{
sfr_gie=1;
sfr_t0if=0;
}
 
Kod:
if (input(PIN_B6)==1)
{
output_high(PIN_B7);

sfr_t0l=t0l_ton;
sfr_t0h=t0h_ton;
}
zaten okuyorsunuz
1(hıgh) ise b7'yi hıgh yapıyorsunuz

0 konumunu'da görmek isterseniz;
else veya if (input(PIN_B6)==0) olarak ekleyin devamına
 

Çevrimiçi personel

Forum istatistikleri

Konular
8,850
Mesajlar
144,040
Üyeler
3,555
Son üye
Logi

Son kaynaklar

Back
Top