addeemm36
Üye
- Katılım
- 23 May 2006
- Mesajlar
- 9
- Puanları
- 1
- Yaş
- 40
Merhaba Üstatlar,
Ben CCS C işine yeni başladım yardımlarınızı bekliyorum bende hazır bir devre var bunun yazılımını değiştirmek istiyorum devre RCO pininden gelen pals sayıyor, araştırmalarım TIMER1 kullanılması gerektiği yönünde ben örnek uygulamaları aldım denedim olmadı değiştirdim olmadı en son değişmiş hali aşağıdadır. Devredeki 5MHZ osilatör kullanılmış. Hazır program üzerinden gideyim olmadı T1CON değerini ayarlayayım dedim yine olmadı. Ben programdan RC0 pininden gelen palsi saymasını istiyeceğim (yani butona her basışı) daha sonra sayılan pals değerlerine göre alt programlara yönlendireceğim.
#include "PIC16C73B.h"
// Denetleyici konfigürasyon ayarları
//#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=5000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#use fast_io(b) //Port yönlendirme komutları B portu için geçerli
#byte T1CON=0X10
int i=0; // Tamsayı tipinde değişken tanımlanıyor
//****************** Timer0 Kesmesi *****************************
#int_timer1 // Timer1 kesmesi
void timer1_kesme () // Kesme fonksiyonu ismi
{
set_timer1(63036); // TMR1 değeri belirleniyor
i++; // i değeri 1 arttırılıyor
if (i==50) // i değeri 50'ye eşit olursa RB0 lojik-1 olsun
output_high(pin_b0);
if (i==100) // i değeri 100'e eşit olursa RB0 lojik-0 ve i=0 olsun
{
output_low(pin_b0);
i=0;
}
}
/********* ANA PROGRAM FONKSİYONU********/
void main ( )
{
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
setup_adc(ADC_OFF); // ADC birimi devre dışı
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı
set_tris_b(0x00); // B portu komple çıkış
output_b(0x00); // B portu çıkışı ilk anda sıfırlanıyor
//setup_timer_1(T1_INTERNAL | T1_DIV_BY_8); // Timer1 ayarları yapılıyor
T1CON=00000011; // DEĞİŞİK VARYASYONLAR DENEDİM OLMADI
::
set_timer1(63036); // TMR1 değeri belirleniyor
// enable_interrupts(INT_timer1); // int_timer0 kesmesini aktif yapar
enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver
while(1); // Sonsuz döngü
}
Ben CCS C işine yeni başladım yardımlarınızı bekliyorum bende hazır bir devre var bunun yazılımını değiştirmek istiyorum devre RCO pininden gelen pals sayıyor, araştırmalarım TIMER1 kullanılması gerektiği yönünde ben örnek uygulamaları aldım denedim olmadı değiştirdim olmadı en son değişmiş hali aşağıdadır. Devredeki 5MHZ osilatör kullanılmış. Hazır program üzerinden gideyim olmadı T1CON değerini ayarlayayım dedim yine olmadı. Ben programdan RC0 pininden gelen palsi saymasını istiyeceğim (yani butona her basışı) daha sonra sayılan pals değerlerine göre alt programlara yönlendireceğim.
#include "PIC16C73B.h"
// Denetleyici konfigürasyon ayarları
//#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=5000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#use fast_io(b) //Port yönlendirme komutları B portu için geçerli
#byte T1CON=0X10
int i=0; // Tamsayı tipinde değişken tanımlanıyor
//****************** Timer0 Kesmesi *****************************
#int_timer1 // Timer1 kesmesi
void timer1_kesme () // Kesme fonksiyonu ismi
{
set_timer1(63036); // TMR1 değeri belirleniyor
i++; // i değeri 1 arttırılıyor
if (i==50) // i değeri 50'ye eşit olursa RB0 lojik-1 olsun
output_high(pin_b0);
if (i==100) // i değeri 100'e eşit olursa RB0 lojik-0 ve i=0 olsun
{
output_low(pin_b0);
i=0;
}
}
/********* ANA PROGRAM FONKSİYONU********/
void main ( )
{
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
setup_adc(ADC_OFF); // ADC birimi devre dışı
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı
set_tris_b(0x00); // B portu komple çıkış
output_b(0x00); // B portu çıkışı ilk anda sıfırlanıyor
//setup_timer_1(T1_INTERNAL | T1_DIV_BY_8); // Timer1 ayarları yapılıyor
T1CON=00000011; // DEĞİŞİK VARYASYONLAR DENEDİM OLMADI
set_timer1(63036); // TMR1 değeri belirleniyor
// enable_interrupts(INT_timer1); // int_timer0 kesmesini aktif yapar
enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver
while(1); // Sonsuz döngü
}