ccs c dilinde interrupts (kesme)yardım

Katılım
9 Ara 2011
Mesajlar
14
Puanları
1
Ccs dilinde kesme ; mrb arkadaşlar 16f877a ile yaptıgım bir devre var öncelikle devreyi anlatayım, pıc in a portuna 4 tane buton b portunada 4 tane led baglı,örnek;a0 butonuna basıldıgı zaman b0 ledi 10 dakika yanacak ve sönecek aynı sekilde a1e basıldıgında b1 ledi 10 dakika bu sekilde seneryo devam ediyor. bu devrenin programını yazdım fakat küçük bi problem var bunun içinde yardımlarınızi iştiyorum.1. butona bastıktan sonra led yandı. buled sönene kadar diger butonlarım calısmıyor. yani if degimi 1 oldugu için delay_ms döngüsüne girdiği için bu zaman döngüsü bitene kadar diger butonlar çalısmıyor ne yapılabilir aynı anda tüm butonları kontrol edebilmek için simdiden tesekkür ederim .
 
#include "C:\Users\ASUS\Desktop\ccs c çalışmalar\kontrolkalemi\kesme.h"




#use fast_io (a)
#use fast_io (b)
boolean d0,d1,d2,d3;
int16 z[4];
#int_RTCC
void RTCC_isr(void)
{output_toggle(pin_b7);
set_timer0(6);
if (d0==1){
if (++z[0]==6000){
output_low(pin_b0);z[0]=0;}}if (d1==1){
if (++z[1]==6000){
output_low(pin_b1);z[1]=0;}}if (d2==1){
if (++z[2]==6000){
output_low(pin_b2);z[2]=0;}}if (d3==1){
if (++z[3]==6000){
output_low(pin_b3);z[3]=0;}}
}
void main()
{
set_tris_a(0x0f);
output_a(0x00);
set_tris_b(0x00);
output_b(0x00);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_timer0);
enable_interrupts(GLOBAL);
set_timer0(6);
while(true){
d0=input_state(pin_b0);
d1=input_state(pin_b1);
d2=input_state(pin_b2);
d3=input_state(pin_b3);
if (input(pin_a0)==1)
output_high(pin_b0);if (input(pin_a1)==1)
output_high(pin_b1);if (input(pin_a2)==1)
output_high(pin_b2);if (input(pin_a3)==1)
output_high(pin_b3);}
}

testi yapıldı
zaman ayarını sen ayarlarsın artık hasas istersen.
 
#include "C:\Users\ASUS\Desktop\ccs c çalışmalar\kontrolkalemi\kesme.h"




#use fast_io (a)
#use fast_io (b)
boolean d0,d1,d2,d3;
int16 z[4];
#int_RTCC
void RTCC_isr(void)
{output_toggle(pin_b7);
set_timer0(6);
if (d0==1){
if (++z[0]==6000){
output_low(pin_b0);z[0]=0;}}if (d1==1){
if (++z[1]==6000){
output_low(pin_b1);z[1]=0;}}if (d2==1){
if (++z[2]==6000){
output_low(pin_b2);z[2]=0;}}if (d3==1){
if (++z[3]==6000){
output_low(pin_b3);z[3]=0;}}
}
void main()
{
set_tris_a(0x0f);
output_a(0x00);
set_tris_b(0x00);
output_b(0x00);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_timer0);
enable_interrupts(GLOBAL);
set_timer0(6);
while(true){
d0=input_state(pin_b0);
d1=input_state(pin_b1);
d2=input_state(pin_b2);
d3=input_state(pin_b3);
if (input(pin_a0)==1)
output_high(pin_b0);if (input(pin_a1)==1)
output_high(pin_b1);if (input(pin_a2)==1)
output_high(pin_b2);if (input(pin_a3)==1)
output_high(pin_b3);}
}

testi yapıldı
zaman ayarını sen ayarlarsın artık hasas istersen.


öncelikle paylaşımın için teşekkür ederim bende böyle bir kesme devresi yapıcamda banada yardımcı olurmusun acaba
ccs ile 2 buton ve 16 led devresi yazılımı yaptım a1 butonuna bastığım zaman ledler b0 dan c7 ye kadar sırasıyla yanıyor ve bütün ledler yanarken 2 dk bekliyor 2 dk'dan sonra ledler c7 den başlayarak b0 kadar yavasca sönüyor a2 butonuda bu fonkiyonu tam tersini yapıyor yani birisi yukardan aşağıya diğeri aşağıdan yukarı doğru animasyon yapıyor.her butona bastığımda animasyonlar basa dönsün istiyorum yardım edersen sevinirim şimdiden çok teşekkür ederim
 

Forum istatistikleri

Konular
128,212
Mesajlar
915,856
Kullanıcılar
449,991
Son üye
multiroots

Yeni konular

Geri
Üst