ısd 1700 MENÜ NASIL İYİLEŞTİREBİLİRİM

Başlatan fryrmnd, 17 Haziran 2011, 13:53:38

fryrmnd

arkdaşlar sadece device id numarasını okumak için bir kod yazdım... hatalarım nerdedir... yardım erderseniz çok makbule geçecek...

DEFINE LCD_DREG      PORTD   
DEFINE LCD_DBIT         4      
DEFINE LCD_EREG      PORTD   
DEFINE LCD_EBIT         3      
DEFINE LCD_RSREG   PORTD   
DEFINE LCD_RSBIT      2            
DEFINE LCD_BITS         4   
DEFINE LCD_LINES      2

ADCON1=7
CMCON=7

SSPEN VAR SSPCON.5
CKP VAR SSPCON.4
SMP VAR SSPSTAT.7
CKE VAR SSPSTAT.6
SSPIF VAR PIR1.3

SS VAR PORTC.6

Isd_Data VAR BYTE[7]  'ISD DEN GELECEK VERİNİN TUTULACAĞI BYTE LAR
bSpi VAR BYTE         'MOSI VE MISO DAN GELEN VERİNİN TUTULACAĞI BYTE
bSpi_Rev var byte     'YOLLANAN VE ALINAN VERİYİ TERSLEYİP ALMAK İÇİN(ISD LSB Yİ İLK YOLLUYO)

SR0A VAR ISD_DATA[0]  'STATUS REGİSTER 0 İLK BYTE
SR0B VAR ISD_DATA[1]  'STATUS REGİSTER 0 İKİNCİ BYTE
SR1 VAR ISD_DATA[2]   'STATUS REGİSTER 1

isCMDERR var SR0A.0   'STATUS REGİSTER 0 COMMAND ERROR BİTİ
isFULL var SR0A.1     '    "      "  MEMORY FULL BİTİ
isPU var SR0A.2       '    "      "  POWER UP BİTİ
isEOM VAR SR0A.3      '  "        "  END OF MESSAGE BİTİ
isINT var SR0A.4      '   "       "  İNTERRUPT BİTİ

isREADY var SR1.0      'STATUS REGİSTER 1 DEVİCE READY BİTİ


TRISD=0
TRISA=0
TRISB=0
TRISC=%00010000
TRISE=0
PORTD=0
PORTA=0
PORTB=0
PORTE=0


PORTC.3=1
PORTC.5=0  'AÇILIŞTA SS=HIGH, MOSI=LOW  VE SCLK HİGH OLABİLİR DİYE YAZIYO
SS=1       'DESGİN NOTE SF 34



SSPEN=1            'SERİ PORT ENABLE
SSPIF=0            'SERİ PORT İNTERRUP FLAG TEMİZLENDİ
smp=0
ckp=1              'İDLE STATE HİGH
cke=0              'İDLE TO ACTİVE CLOCK STATE(ANLADIĞIM DÜŞEN KENARDA VERİ YOLLANACAK)
'DATA TRANSFRE PROTOCOL REQUİRES THAT THE MİCROCONTROLLER'A SPİ SHİFT REGİSTERS ARE CLOCKED OUT
'ON THE FALLİNG EDGE OF SCLK.... DESİGN NOTE SF 31

PAUSE 300
LCDOUT $FE,1

gosub Isd_Pu         'POWER UP KOMUTU
pause 50

gosub Isd_Read_Status 'KOMUT HATASI OLUŞTUMU
if isCMDERR=1 then
lcdout $FE,1,"hatalı komut"
endif


main:
LCDOUT $FE,2,"BASLIYOR"

gosub Isd_Wait_Ready   'SR1 READY BİTİ İNCELENİYO (ISD KOMUT ALMAYA HAZIRMI)
gosub Isd_Read_DeviceId  'ISD 1760 DEVİCE ID... DÖNEN 1 BYTE IN SON 5 BİTİ 10100 OLMALI
LCDOUT $FE,1,BIN Isd_Data[3]

gosub Isd_Read_Status           'HATA OLUŞTUMU VE CİHAZ TEKRAR KOMUT ALMAYA HAZIRMI
if isCMDERR=1 then              'BAŞKA KOMUT YOLLAMIYOM TABİ DE
lcdout $FE,1,"hatalı komut"
endif
gosub Isd_Wait_Ready

goto main




Isd_Pu:
SS=0       'SLAVE SELECT LOW
bSpi=$01  'POWER UP KOMUTU İLK BYTE
gosub Isd_Spi
SR0A=bspi_rev  'ISD DEN GELEN İLK BYTE SROA
bspi=$00   'POWER UP KOMUTU 2. BYTE
gosub Isd_Spi
SR0B=bspi_rev  'İKİNCİ BYTE SR0B
SS=1      ' SLAVE SELECT HİGH
return

Isd_Read_DeviceId: 
SS=0
bspi=$09            'DEVİCE ID KOMUTU İLK BYTE
gosub Isd_Spi
SR0A=bspi_rev
bspi=$00            '2. BYTE
gosub Isd_Spi
SR0B=bspi_rev
bspi=$00             '3. BYTE
gosub Isd_Spi
Isd_Data[3]=bSpi_ReV
SS=0
return

Isd_Wait_Int:
gosub Isd_Read_Status
if isInT=0 then Isd_Wait_Int
return

Isd_Wait_Ready:
gosub Isd_Read_Status    'READ STATUS KOMUTU YOLLANACAK
if isREADY=1 then Isd_Wait_Ready   'DÖNEN SR1DE READY BİTİ 1 OLANA KADA BEKLENİYO
return

Isd_Read_Status:
SS=0
bspi=$05
gosub Isd_Spi
SR0A=bspi_rev
bspi=$00
gosub Isd_Spi
SR0B=bspi_rev
bspi=$00
gosub Isd_Spi
SR1=bspi_rev
SS=1
return

Isd_Int_Clear:
SS=0
bspi=$04
gosub Isd_Spi
SR0A=bspi_rev
bspi=$00
gosub Isd_Spi
SR0B=bspi_rev
SS=1
return

Isd_Spi:
bspi_rev=bspi rev 8
SSPBUF=bspi_rev    'İLK BYTE IN TERLENMİŞ HALİ YOLLANIYOR
gosub letClear     'SERİ PORT İNTERRUP FLAG TEMZİLENİYOR
bspi=SSPBUF        'ISD DEN GELEN İLK VERİ ALINIYO
gosub letclear
bspi_rev=bspi rev 8 'TERSLENİYO
return


letClear:
if SSPIF=0 then letclear
pauseus 25
SSPIF=0
return

fryrmnd

arkdaşlar 8-9 tane telefon hattına bağlayaacağım  pic ve ISD ses entegersiyle bir düzenek kurmaya çalışıyorum... düzenek aktifken çalan telefonun kime ait olcağını hoparlörden verecek... bu kısmı ana döngü içinde vriyorum,burda sorun yok... tabi 2. bir menüye rb0 kesmesi ile girip menüde her telefon için kayıt, silme,kaydettiğini dinleme ve ses seviyesi ayarı yapmaya çalışınca ben de  sstack overflow hatası aldım....   bu menü işi sistemi aktif etmeden kesme içinde halledilebilrmi,,, edilemezse bu işi nasıl yapabilirim... değişik bi yol aklına gelen varsa çok sevinirim... kod aşağıda... teşekkürler

DEFINE LCD_DREG		PORTD	
DEFINE LCD_DBIT			4		
DEFINE LCD_EREG		PORTD	
DEFINE LCD_EBIT			3		
DEFINE LCD_RSREG	PORTD	
DEFINE LCD_RSBIT		2				
DEFINE LCD_BITS			4	
DEFINE LCD_LINES		2



ON INTERRUPT GOTO KESME
INTCON=%10010000 
OPTION_REG.6=0 'DÜŞEN KENAR KESME
ADCON1=7
CMCON=7
OPTION_REG.7=0 'pull up aktif(buton basınca toprağa çekecek)

ANASAY VAR BYTE
ALTSAY VAR BYTE
ALTSAYKALAN VAR BYTE

temp_bit    VAR BIT

temp		VAR BYTE
spi_cnt 	             var byte	' counter for SPI transfer
bSPI 		var byte 	' the byte being transferred on SPI

s_addr		VAR WORD	' Start Address
e_addr		VAR WORD	' End Address

ISD_Data 	var byte[7]	' This array contains data to/from ISD

SR0a 		var ISD_Data[0]
SR0b 		var ISD_Data[1]
SR1 		var ISD_Data[2]    ' only valid after ReadStatus

isCmdErr 	var SR0a.0	             ' 1=previous command failed/ignored
isFull 		var SR0a.1	' 1=memory full
isPU		var SR0a.2	' 1=ISD powered up
isEOM		VAR SR0a.3	' 1=EOM detected (clear by CLR_INT command)
isINT 		var SR0a.4	' 1=current operation completed (clear by CLR_INT command)

isReady 	var SR1.0	' 1=Ready to receive SPI command (only valid after ReadStatus)
				        ' Some SPI commands can still be sent when isReady=0

SYMBOL cikis=PORTB.0
symbol asagitus=PORTB.1
SYMBOL yukaritus=PORTB.2
SYMBOL sec=PORTB.3
SYMBOL INTF=INTCON.1

Symbol ss		= PORTC.3			'ISD1760 SLAVE SELECT  
Symbol sclk		= PORTC.4			'ISD1760 SPI CLOCK 
Symbol mosi 	= PORTC.5         	'ISD1760 SPI MOSI
Symbol miso		= PORTC.6			'ISD1760 SPI MISO 

TRISD=0
TRISA=1
TRISB=1
TRISC=%01000000
TRISE=1
PORTD=0
PORTA=0
PORTB=1
PORTE=0

ANASAY=1
pause 300
LCDOUT $FE,$40,16,8,4,3,4,8,16,0  '> ÖZEL KARAKTERİ... 0 NOLU ADRESTE
lcdout $FE,1
LCDOUT $FE,$84,"BASLIYOR"


BASLA:

'bu kısımda kime telefon gelmişse tespit edip onun kısmını ses entegresinden çalıyorum

GOTO BASLA


disable
KESME:
  GOSUB ANAMENU           '  >KAYIT      ÇIKIS
                           '  CAL        SEC
  WHILE cikis=1  'AKTIF MODA GERI
     
     

  IF ASAGITUS=0 THEN     'ANAMENU ASAĞI   
     ANASAY=ANASAY+1                     
     GOSUB ANAMENU
  ENDIF
  WHILE ASAGITUS=0 
  WEND
  IF YUKARITUS=0 THEN   'ANAMENU YUKARI
    ANASAY=ANASAY-1
    GOSUB ANAMENU
  ENDIF
  WHILE YUKARITUS=0
  WEND
  
  IF SEC=0 THEN        'ANAMENUDEN ALT MENUYE           ' >1. KAYIT     BASLA  BU ANASAY DEGERİNE GÖRE DEĞİŞEBİLİYO
   GOSUB ALTMENUSECIMLI  'HANGI MENUYE GIDILCEĞI       '   2. KAYIT     GERİ
   
  
  WHILE SEC=0 
  WEND  
    WHILE CIKIS=0      'GERI SEÇENEGI SEÇİLMEDIĞI SÜRECE ALT MENÜDE 
     IF ASAGITUS=0 THEN    'ALT MENÜDE ASAĞI
      ALTSAY=ALTSAY+1
      GOSUB  ALTMENUSECIMLI
     ENDIF
     WHILE ASAGITUS=0 
     WEND
     IF YUKARITUS=0 THEN    'ALTMENÜDE YUKARI
      ALTSAY=ALTSAY-1
      GOSUB ALTMENUSECIMLI
     ENDIF
     WHILE YUKARITUS=0
     WEND
     IF SEC=0 THEN           'ALT MENUDE SEÇ (PLAY REC,ERASE,VOL?)
      SELECT CASE ANASAY       'HANGI ALT MENÜDE OLDUĞUMUZA BAKILACAK
       CASE 1 
        GOSUB isd_set_rec2
       CASE 2
        GOSUB isd_set_play2
       CASE 3
        GOSUB isd_set_erase2
       CASE 4
        GOSUB isd_set_vol2
      END SELECT
      GOSUB ISD_WAIT_RDY     'RDY BİTİ KONTROL EDİLİYO  (VOLUME İNT DURUMUNA GÖRE İF İLE İŞLEM VOLUME MU  SORGULAMA YAPILIP İNT CLERAR EDİLCEK)
      ALTSAY=1
      GOSUB ALTMENUSECIMLI
      ENDIF
      
   WEND        'CIKIŞ=GERI TUSU 
   ANASAY=1
  ENDIF        'SEC İLE ALT MENUYE GİRMİŞTİK

WEND  'ÇIKIŞIN 

  WHILE CIKIS=0 
  WEND
  
  INTF=0

RESUME
ENABLE

ANAMENU:

LCDOUT $FE,1

 SELECT CASE ANASAY
  CASE 1
 LCDOUT $FE,$82,0,"KAYIT",$FE,$C0,"CAL",$FE,$8D,"SEC",$FE,$CB,"CIKIS"
  CASE 2
 LCDOUT $FE,$80,"KAYIT",$FE,$C2,0,"CAL",$FE,$8D,"SEC",$FE,$CB,"CIKIS" 
  CASE 3
 LCDOUT $FE,$82,0,"SIL",$FE,$C0,"SES AYARI",$FE,$8D,"SEC",$FE,$CB,"CIKIS" 
  CASE 4
 LCDOUT $FE,$80,"SIL",$FE,$C2,0,"SES AYARI",$FE,$8D,"SEC",$FE,$CB,"CIKIS" 
 END SELECT
 
RETURN

ALTMENUSECIMLI:

  SELECT CASE ANASAY
   CASE 1
     GOSUB ALTMENUKAYIT
   CASE 2
     GOSUB ALTMENUCAL
   CASE 3
     GOSUB  ALTMENUSIL
   CASE 4
     GOSUB ALTMENUSESAYARI
 END SELECT 
 
RETURN 
       
 ALTMENUKAYIT:
 
 LCDOUT $FE,1
 
 ALTSAYKALAN=ALTSAY//2
  IF ALTSAYKALAN=1 THEN  
  LCDOUT $FE,$82,0,$FE,$83,#ALTSAY,". KAYIT",$FE,$8B,"BASLA",$FE,$C0,#ALTSAY+1,". KAYIT",$FE,$CC,"GERI"
  ENDIF
  IF ALTSAYKALAN=1 THEN
  LCDOUT $FE,$80,#ALTSAY,". KAYIT",$FE,$8B,"BASLA",$FE,$C2,0,$FE,$C3,#ALTSAY+1,". KAYIT",$FE,$CC,"GERI"
  ENDIF 
 
 RETURN
 
 ALTMENUCAL:
 
  LCDOUT $FE,1
  
  ALTSAYKALAN=ALTSAY//2
  IF ALTSAYKALAN=1 THEN  
  LCDOUT $FE,$82,0,$FE,$83,#ALTSAY,". KAYIT",$FE,$8B,"DINLE",$FE,$C0,#ALTSAY+1,". KAYIT",$FE,$CC,"GERI"
  ENDIF
  IF ALTSAYKALAN=1 THEN
  LCDOUT $FE,$80,#ALTSAY,". KAYIT",$FE,$8B,"DINLE",$FE,$C2,0,$FE,$C3,#ALTSAY+1,". KAYIT",$FE,$CC,"GERI"
  ENDIF 
 
 RETURN
 
 ALTMENUSIL:
 
  LCDOUT $FE,1 
  
  ALTSAYKALAN=ALTSAY//2
  IF ALTSAYKALAN=1 THEN  
  LCDOUT $FE,$82,0,$FE,$83,#ALTSAY,". KAYIT",$FE,$8D,"SIL",$FE,$C0,#ALTSAY+1,". KAYIT",$FE,$CC,"GERI"
  ENDIF
  IF ALTSAYKALAN=1 THEN
  LCDOUT $FE,$80,#ALTSAY,". KAYIT",$FE,$8D,"SIL",$FE,$C2,0,$FE,$C3,#ALTSAY+1,". KAYIT",$FE,$CC,"GERI"
  ENDIF 
  
 RETURN
 
 
 ALTMENUSESAYARI:
 
  LCDOUT $FE,1
  
  ALTSAYKALAN=ALTSAY//2
  IF ALTSAYKALAN=1 THEN 
  LCDOUT $FE,$82,0,$FE,$83,#ALTSAY,". DERECE",$FE,$8B,"KAYDET",$FE,$C0,#ALTSAY+1,". DERECE",$FE,$CC,"GERI"
  ENDIF
  IF ALTSAYKALAN=0 THEN
  LCDOUT $FE,$80,#ALTSAY,". DERECE",$FE,$8B,"KAYDET",$FE,$C2,0,$FE,$FE,$C3,#ALTSAY+1,". KAYIT",$FE,$CC,"GERI"
  ENDIF
  
 RETURN 
'----- bu kısımdan sonrası ses entegeresiyle alakalı fonksiyonlar

isd_set_rec2:
LOW ss
	
		bSPI = $81		           'Set Record Command (7 bytes)
		GoSub isd_spi
	
		bSPI = $00 
		GoSub isd_spi

	
		bSPI = s_addr.LowByte 	   'Start Address low byte. 
		GoSub isd_spi
	
		bSPI = s_addr.HighByte 	   'Start Address high byte 
		GoSub isd_spi
	
		bSPI = e_addr.LowByte 	   'End Address low byte 
		GoSub isd_spi
		
	
		bSPI = e_addr.HighByte 	   'End Address high byte
		GoSub isd_spi
		
	
		bSPI = $00		           'Reserved Address - set to "0"
		GoSub isd_spi
		
HIGH ss


RETURN

isd_set_play2:
	LOW ss

	bSPI = $80		'Set Play Command (7 bytes)
	GoSub isd_spi
	

	bSPI = $00 
	GoSub isd_spi
	

	bSPI = s_addr.LowByte 	' Start Address low byte. 
	GoSub isd_spi
	

	bSPI = s_addr.HighByte 	' Start Address high byte 
	GoSub isd_spi
	

	bSPI = e_addr.LowByte 	' End Address low byte 
	GoSub isd_spi
	

	bSPI = e_addr.HighByte 	' End Address high byte
	GoSub isd_spi
	

	bSPI = $00		' Reserved Address - set to "0"
	GoSub isd_spi
	

	HIGH ss

RETURN


isd_set_erase2:
LOW ss
	
		bSPI = $82		           'Set Erase Command (7 bytes)
		GoSub isd_spi

	
		bSPI = $00 
		GoSub isd_spi

	
		bSPI = s_addr.LowByte 	   'Start Address low byte. 
		GoSub isd_spi

	
		bSPI = s_addr.HighByte 	   'Start Address high byte 
		GoSub isd_spi
		
	
		bSPI = e_addr.LowByte 	   'End Address low byte 
		GoSub isd_spi

	
		bSPI = e_addr.HighByte 	   'End Address high byte
		GoSub isd_spi

	
		bSPI = $00		           'Reserved Address - set to "0"
		GoSub isd_spi

	
		HIGH ss


RETURN


isd_set_vol2:


RETURN

isd_rd_status:				'read status of ISD1700 
	LOW ss

	bSPI=$05		'Read Status Command
	gosub isd_spi
	sr0a = bSPI	'SR0a

	bSPI=$00
	gosub isd_spi
	sr0b = bSPI	'SR0b

	bSPI=$00
	gosub isd_spi
	sr1 = bSPI	'SR1

	HIGH ss

RETURN
	
	
isd_clr_int:					' CLEAR INTERRUPT AND EOM BITS
	LOW SS
	
	bSPI=$04		'Clear Interrupt Command
	gosub isd_spi

	bSPI=$00
	gosub isd_spi

	HIGH SS

RETURN	
	
isd_wait_rdy:
gosub isd_rd_status
if isready=0 then isd_wait_rdy
return	
          
isd_wait_int:
	GOSUB isd_rd_status
	IF isINT = 0 THEN isd_wait_int
RETURN        	

isd_spi:				        ' shift SPI data out and into SPI byte 
	FOR spi_cnt = 0 to 7        '
		MOSI = bSPI.0 		    ' shift LSB of byte onto MOSI line
		LOW SCLK 		        ' clock MISO data out to uC (Falling Edge)
		temp_bit = miso         '
		HIGH SCLK		        ' clock MOSI into ISD1700 (Rising Edge)
		bSPI = bSPI >> 1 		' shift SPI byte Right
		bSPI.7 = temp_bit
	NEXT spi_cnt

RETURN
	
	end

fryrmnd

başlık taşınmış  :D ... çok açıyom farkındayım... kusura bakmayın... gene debelendim durdum.. yetersiz ulvi gibi ben ne malım yaa... ulan aktif olarak menüü kısmını seç... menüde  telefon  kısmını seçenek olarak koy... seçince buton gelene kadar ordan çıkma...kime geldiğini çalsın dursun... yanılıyomuyum arkdaşlar...

OG

Çok sorman önemli değil de aynı konuya farklı başlıklar açarsan silinir. Bilgin olsun.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

fryrmnd

ya bide o kodu bıraktım çalıştıramadım... kafada gidiyo işte... dediğin gibi dönüp şöle bi bakmam lazım açtığım başlıklara... ordan devam etmek lazım...

Veli B.

Dilimizi kullanım şekliniz, beni ciddi şekilde rahatsız etti. Bu kadar umarsız olmamalı insanımız!

fryrmnd

katana bey.... umarsız derken çaresizlik anlamında mı söylediniz... yani rahatsız eden kısım ne anlayamadım... "malım " kelimesi mi sadece...

Veli B.

Hayır, imla kurallarını ve kelimeleri kullanım şekliniz rahatsız etti. Aslında sadece şahsınıza değil, genelde yeni nesile bir sitemim. Mesaj yazılırken gösterilen hassasiyet, okuyan kişi için ciddi anlam ifade eder.
Ben bir konuya bakarken bu hususa önem veriyorum.
Soru soran kişi, mesajı yazarken zaman ayırıp hatalarını düzeltmiyorsa/önem vermiyorsa, ben de cevap yazmak için zaman ayırmıyorum yada olması gerektiği kadar ayırmıyorum. 

fryrmnd

Dil kullanımına önem vermedeki hassasiyetinizi takdir ediyorum katana bey. Ancak yazdıklarımın aşırı derece anlaşılmayacak olduğunu sanmıyorum. Takdir edersiniz ki dil anlaşmak için vardır. Eğer anlaşılmadıysam özür dilerim. Yüzyüze olsak arada bazı kelime ve heceleri yutup anlaşılmayacak olsam sizi daha iyi anlarım. Ama elektronikle uğraşmak için geç kaldığını düşünen ve gecenin bir saati uzun uzun program yazmaya çalıştıktan sonra klavye başına oturan bir kişi olarak her harfine ve her imla işaretine dikkat edecek ve defalarca kez tashihden geçirecek bir kişi değilim. Bu da benim tercihim. Keza değindiğim gibi anlaşılmayacak derecede kötü yazdığımı sanmıyorum.Anlamını hala bilmediğim değişik kelimeleri de (lol vb) kullanmadım zaten kullanmamaya çalışıyorum. Dile özen göstermek ile klavyede bir kaç harfi atlamanın farklı şeyler oluduğunu düşünüyorum. Hassasiyetiniz için teşekkürler.

fryrmnd

#9
arkadaşlar bir menüm var... ama çok fazla if  then olduğundan mıdır çıkış tuşuna basışım çok geç algılıyor. çok az da olsa diğerlerinde de var aynı sıkıntı... 4 buton kullanıyorum.biraz
açıklama yazdım ama anlaşılıyodur umarım...  anlaşılmıyo ise tekrar düzenleme yapabilirim... teşekkürler...

DEFINE LCD_DREG      PORTD   
DEFINE LCD_DBIT         4      
DEFINE LCD_EREG      PORTD   
DEFINE LCD_EBIT         3      
DEFINE LCD_RSREG   PORTD   
DEFINE LCD_RSBIT      2            
DEFINE LCD_BITS         4   
DEFINE LCD_LINES      2


ADCON1=7
CMCON=7


ANASAY VAR BYTE
ALTSAY VAR BYTE
ALTSAYKALAN VAR BYTE

temp_bit    VAR BIT

temp      VAR BYTE
spi_cnt                 var byte   ' counter for SPI transfer
bSPI       var byte    ' the byte being transferred on SPI

s_addr      VAR WORD   ' Start Address
e_addr      VAR WORD   ' End Address

ISD_Data    var byte[7]   ' This array contains data to/from ISD

SR0a       var ISD_Data[0]
SR0b       var ISD_Data[1]
SR1       var ISD_Data[2]    ' only valid after ReadStatus

isCmdErr    var SR0a.0                ' 1=previous command failed/ignored
isFull       var SR0a.1   ' 1=memory full
isPU      var SR0a.2   ' 1=ISD powered up
isEOM      VAR SR0a.3   ' 1=EOM detected (clear by CLR_INT command)
isINT       var SR0a.4   ' 1=current operation completed (clear by CLR_INT command)

isReady    var SR1.0   ' 1=Ready to receive SPI command (only valid after ReadStatus)
                    ' Some SPI commands can still be sent when isReady=0
                   
SYMBOL cikis=PORTC.0
symbol asagitus=PORTC.1
SYMBOL yukaritus=PORTC.2
SYMBOL sec=PORTC.7
SYMBOL INTF=INTCON.1

Symbol ss      = PORTC.3         'ISD1760 SLAVE SELECT 
Symbol sclk      = PORTC.4         'ISD1760 SPI CLOCK
Symbol mosi    = PORTC.5            'ISD1760 SPI MOSI
Symbol miso      = PORTC.6         'ISD1760 SPI MISO

TRISD=0
TRISA=1
TRISB=0
TRISC=%11000111
TRISE=1
PORTD=0
PORTA=0
PORTB=0
PORTE=0

ANASAY=1
ALTSAY=1
pause 500
LCDOUT $FE,$40,16,8,4,3,4,8,16,0  '> ÖZEL KARAKTERİ... 0 NOLU ADRESTE
LCDOUT $FE,$48,2,4,8,24,8,4,2,0
lcdout $FE,1
LCDOUT $FE,$84,"BASLIYOR"
pause 500


BASLA:

LCDOUT $FE,1
LCDOUT $FE,$80,"AKTIF MOD",$FE,$C9,"AYARLAR"

IF YUKARITUS=0 THEN     'AKTIF MODA DALLAN
GOSUB AKTIFMOD
ENDIF
WHILE YUKARITUS=0
WEND

IF CIKIS=0 THEN         'MENUYE DALLAN
GOSUB ANAMENU
WHILE CIKIS=0
WEND

WHILE cikis=1  '2 SEÇENEKLİ MENÜYE GERİ
     
     

  IF ASAGITUS=0 THEN     'ANAMENU ASAĞI
     IF ANASAY=4 THEN
      ANASAY=1
     ENDIF 
     ANASAY=ANASAY+1                     
     GOSUB ANAMENU
  ENDIF
  WHILE ASAGITUS=0
  WEND
  IF YUKARITUS=0 THEN   'ANAMENU YUKARI
    IF ANASAY=1 THEN
     ANASAY=4
     ENDIF
    ANASAY=ANASAY-1
    GOSUB ANAMENU
  ENDIF
  WHILE YUKARITUS=0
  WEND
 
 
  IF SEC=0 THEN        'ANAMENUDEN ALT MENUYE           ' >1. KAYIT     BASLA  BU ANASAY DEGERİNE GÖRE DEĞİŞEBİLİYO
   GOSUB ALTMENUSECIMLI  'HANGI MENUYE GIDILCEĞI       '   2. KAYIT     GERİ
   
 
  WHILE SEC=1
  WEND 
    WHILE CIKIS=1      'GERI SEÇENEGI SEÇİLMEDIĞI SÜRECE ALT MENÜDE
     IF ASAGITUS=0 THEN    'ALT MENÜDE ASAĞI
      IF ALTSAY=8 THEN
       ALTSAY=1
       ENDIF
      ALTSAY=ALTSAY+1
      GOSUB  ALTMENUSECIMLI
     ENDIF
     WHILE ASAGITUS=0
     WEND
     IF YUKARITUS=0 THEN    'ALTMENÜDE YUKARI
      IF ALTSAY=1 THEN
       ALTSAY=8
      ENDIF
      ALTSAY=ALTSAY-1
      GOSUB ALTMENUSECIMLI
     ENDIF
     WHILE YUKARITUS=0
     WEND
     IF SEC=0 THEN           'ALT MENUDE SEÇ (PLAY REC,ERASE,VOL?)
      ALTSAY=1
      SELECT CASE ANASAY       'HANGI ALT MENÜDE OLDUĞUMUZA BAKILACAK
       CASE 1
        PAUSE 100
       CASE 2
        PAUSE 100
       CASE 3
        PAUSE 100
       CASE 4
        PAUSE 100
      END SELECT
      ALTSAY=1
      GOSUB ALTMENUSECIMLI
      ENDIF
     
   WEND        'CIKIŞ=GERI TUSU
   ANASAY=1
  ENDIF        'SEC İLE ALT MENUYE GİRMİŞTİK

WEND  'ÇIKIŞIN

  WHILE CIKIS=0
  WEND

ENDIF '2 SEÇENEKLİ MENÜDEN AYAR MENÜSÜNE GİRİŞ SONU
pause 300
GOTO BASLA

AKTIFMOD:

WHILE CIKIS=1
LCDOUT $FE,1
LCDOUT $FE,$80,"AKTIF",$FE,$CB,"CIKIS"
pause 300
WEND

RETURN



ANAMENU:

LCDOUT $FE,1

SELECT CASE ANASAY
  CASE 1
LCDOUT $FE,$81,0,"KAYIT",$FE,$C0,"CAL",$FE,$8D,"SEC",$FE,$CB,"CIKIS"
  CASE 2
LCDOUT $FE,$80,"KAYIT",$FE,$C1,0,"CAL",$FE,$8D,"SEC",$FE,$CB,"CIKIS"
  CASE 3
LCDOUT $FE,$81,0,"SIL",$FE,$C0,"SES",$FE,$8D,"SEC",$FE,$CB,"CIKIS"
  CASE 4
LCDOUT $FE,$80,"SIL",$FE,$C1,0,"SES",$FE,$8D,"SEC",$FE,$CB,"CIKIS"
END SELECT

RETURN

ALTMENUSECIMLI:

  SELECT CASE ANASAY
   CASE 1
     GOSUB ALTMENUKAYIT
   CASE 2
     GOSUB ALTMENUCAL
   CASE 3
     GOSUB  ALTMENUSIL
   CASE 4
     GOSUB ALTMENUSESAYARI
END SELECT

RETURN
       
ALTMENUKAYIT:

LCDOUT $FE,1

ALTSAYKALAN=ALTSAY//2
  IF ALTSAYKALAN=1 THEN 
  LCDOUT $FE,$81,0,$FE,$82,#ALTSAY,". KAYIT",$FE,$8B,"BASLA",$FE,$C0,#ALTSAY+1,". KAYIT",$FE,$CC,"GERI"
  ENDIF
  IF ALTSAYKALAN=0 THEN
  LCDOUT $FE,$80,#ALTSAY-1,". KAYIT",$FE,$8B,"BASLA",$FE,$C1,0,$FE,$C2,#ALTSAY,". KAYIT",$FE,$CC,"GERI"
  ENDIF

RETURN

ALTMENUCAL:

  LCDOUT $FE,1
 
  ALTSAYKALAN=ALTSAY//2
  IF ALTSAYKALAN=1 THEN 
  LCDOUT $FE,$81,0,$FE,$82,#ALTSAY,". KAYIT",$FE,$8B,"DINLE",$FE,$C0,#ALTSAY+1,". KAYIT",$FE,$CC,"GERI"
  ENDIF
  IF ALTSAYKALAN=0 THEN
  LCDOUT $FE,$80,#ALTSAY-1,". KAYIT",$FE,$8B,"DINLE",$FE,$C1,0,$FE,$C2,#ALTSAY,". KAYIT",$FE,$CC,"GERI"
  ENDIF

RETURN

ALTMENUSIL:

  LCDOUT $FE,1
 
  ALTSAYKALAN=ALTSAY//2
  IF ALTSAYKALAN=1 THEN 
  LCDOUT $FE,$81,0,$FE,$82,#ALTSAY,". KAYIT",$FE,$8D,"SIL",$FE,$C0,#ALTSAY+1,". KAYIT",$FE,$CC,"GERI"
  ENDIF
  IF ALTSAYKALAN=0 THEN
  LCDOUT $FE,$80,#ALTSAY-1,". KAYIT",$FE,$8D,"SIL",$FE,$C1,0,$FE,$C2,#ALTSAY,". KAYIT",$FE,$CC,"GERI"
  ENDIF
 
RETURN


ALTMENUSESAYARI:

  LCDOUT $FE,1
 
  ALTSAYKALAN=ALTSAY//2
  IF ALTSAYKALAN=1 THEN
  LCDOUT $FE,$81,0,$FE,$82,#ALTSAY,". DERECE",$FE,$8B,"KAYDET",$FE,$C0,#ALTSAY+1,". DERECE",$FE,$CC,"GERI"
  ENDIF
  IF ALTSAYKALAN=0 THEN
  LCDOUT $FE,$80,#ALTSAY-1,". DERECE",$FE,$8B,"KAYDET",$FE,$C1,0,$FE,$FE,$C2,#ALTSAY,". KAYIT",$FE,$CC,"GERI"
  ENDIF
 
RETURN