Butona kaç defa basıldığını saymak "PBP ile"

Başlatan solidus, 16 Mart 2008, 19:15:50

solidus

Sevgili ETE hocam,
Tavsiyeniz üzere anahtarları port a da lambaları da port b de topladım. MCU yu 16f628A olarak değiştirdim. Ayrıntılar hususunda haklısınız geç verdim. Fakat yapılacak iş henüz netleşti. Buna göre;
1. Başlangıçta mod sw.lerin durumu okunacak.ilgili LED yakılacak.(Sw durumuna göre portb.4 ve portb.5)
2. Sw konumuna göre ilgili programa dallanacak.(SINGLE yada RIPPLE)
3. Anahtar SINGLE durumunda ise butona basıldığı anda STA1 aktif olacak
  buton basılı olduğu sürece STA1 aktif kalacak buton bırakıldığında
  STA1 inaktif olacak.2,3 ve 4. basışta aynı olay devam edecek.4.buton
  bırakıldığında en başa DÖNMEYECEK.
4. Anahtar RIPPLE durumunda ise butona basılı olduğu sürece STA1 den başlayarak 50 ms aralıklarla STA2,STA3,STA4 aktif olacak.STA2 aktif olduğunda STA1 inaktif, STA3 aktif olduğunda STA2 inaktif, STA4 aktif olduğunda STA3 inaktif olacak.STA4 inaktif olduğunda en başa DÖNMEYECEK.
[/URL][/img]

@ DEVICE pic16F628A 
@ DEVICE pic16F628A, WDT_ON 
@ DEVICE pic16F628A, PWRT_ON 
@ DEVICE pic16F628A, PROTECT_OFF 
@ DEVICE pic16F628A, MCLR_OFF 
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT
 
PORTA=0:TRISA=1 
PORTB=0:TRISB=0 
OPTION_REG.7=0 
CMCON=7

X var byte  'SINLE DÖNGÜ DEĞİŞKENİ
Y VAR BYTE  'RIPPLE DÖNGÜ DEĞİŞKENİ
SWSNGL VAR PORTA.2
SWRPL VAR PORTA.3
BTN VAR PORTA.4
LEDSNGL VAR PORTB.5
LEDRPL VAR PORTB.4

SINGLE:

IF SWSNGL=1 THEN
LEDSNGL=1
IF BTN=1 THEN 
IF X=0 THEN 
X=1 
ELSE 
X=X*2 
IF X=16 THEN X=1 
ENDIF 
while BTN=1 
PORTB=X 
wend 
ENDIF
ENDIF 
PORTB=0 
PAUSE 20 
GOTO SINGLE

RIPPLE:
IF SWRPL=1 THEN
LEDRPL=1
IF BTN=1 THEN 
IF Y=0 THEN 
Y=1 
ELSE 
Y=Y*2 
IF Y=16 THEN Y=0 
ENDIF
ENDIF
ENDIF 
PORTB=Y 
PAUSE 100 
GoTo RIPPLE 
END
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..