18F452 ile TMRO

Başlatan Tom, 11 Mart 2006, 09:47:19

Tom

Arkadaşlar şu kardeşinize yardım eden yokmu?Projem bu noktada tokandı.18F452 ile TMRO kullanarak bir led 'i yakıp söndürmem lazım, Hani bizim üstatlar yardım lütfen.

HEXF2

Dostum yapman gereken çok kolay.İlk önce TMR0'ın high mı yoksa Low interrupt seviyesi kullanacağına karar vermelisin.Yada maskelenmemiş kesme olarak kullanabilirsin.Misal high seviye olarak kullanmak istiyorsan

RCON yazmacının 7.bitini ilk olarak set et ve interrupt seviyesi özelliği aktif olsun.Daha sonra TMR0'ın hengi seviye interrupt kullanacağınıda IRP yazmaçlarından ayarlayacaksın.Daha sonra INTCON'dan TMR0 kesmesini aktif edeceksin ve tüm kesmeleri aktif edeceksin.

Şu anda TMR0'ı high seviye interrupt olarak seçtiğimiz TMR0 kesmesi oluştuğunda 0x18 kesme vektörüne gidecektir.Bu kesmeyi low olarak ayarlasaydık 0x08adresine gidecekti.Kesme geldiğinde ise bayrağı temizlemeyi unutma.

Birde TMR0 18FXXX ailesinde hem 8 bit modda(16fxxx uyumlu) hemde 16 bit modunda kurulabilir.Bunuda ayarlaman lazım.

Eğer 8bit olarak kullanaksan TMR0L yazmacını kullan

Tom

dediğin gibi TMR0 için gerekli düzenlemeleri yaptım.Proğram PORTD,1 deki led 'i 1 sn aralıklarla yakıp söndürüyor.Fakat yakıp söndürme işlemi 30 defa veya 31 defa devam ediyor sonra kesme duruyor.Sanki kesme sayısını 30 defa girmişim gibi.Acaba yeni olarak 18F452 de kesme sayısını sınırlayan bir regısterdemi var, ben bir türlü bulamadım.Proğramı aşağıda veriyorum.Sen tecrübe sahibisin sanırım cözersin.Proğramın basındaki tanımlamalar benim ana proğramımdan alıntı yani led in yakıp söndürülmesi ile ilgisi yok bilgine.




LIST    P=PIC18F452 , F=INHX32, C=160, N=0, ST=OFF, MM=OFF, R=DEC, X=ON
   #INCLUDE   P18F452.INC
   
;__CONFIG _CONFIG1H, _OSCS_ON_1H & _HSPLL_OSC_1H      
  ;Oscillator switching=OFF. High Speed PLL Oscillator enable=ON. ( ben bu tip kullanacagım .Çünkü lcd yazmada
  ; çok kararlı.


__CONFIG  _CONFIG1H,_OSCS_OFF_1H & _XT_OSC_1H  ;XT oscillator

__CONFIG _CONFIG2L, _BOR_ON_2L & _BORV_42_2L & _PWRT_ON_2L          
  ;Brown Out Reset=ON. Power-up Timer=ON

__CONFIG _CONFIG2H, _WDT_OFF_2H
  ;Watch Dog Timer=OFF.

__CONFIG _CONFIG3H, _CCP2MX_OFF_3H              
  ;Mux on CCP2=OFF.

__CONFIG _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
  ;Stack overflow reset=OFF. Low Voltage Programming(ISCP)=OFF. Background Debugger=OFF.

__CONFIG _CONFIG5L, _CP0_ON_5L & _CP1_ON_5L & _CP2_ON_5L & _CP3_ON_5L    
  ;Code Protection=ON

__CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H          
  ;Boot Block Code Protection=OFF. Data EEPROM Code Protection=OFF.

__CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L  
  ;Program blocks 0:3 Write Protection=OFF.

__CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
  ;EEPROM Write protection=OFF. Boot Block Write Protection=OFF. Configuration Register Write    Protection=OFF.

__CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
  ;Table Read Protection blocks 0:3=OFF.

__CONFIG _CONFIG7H, _EBTRB_OFF_7H              
  ;Boot Block Table Read Protection=OFF.

;------------------------------------
   ORG   h'00'
   GOTO   BASLA
   ORG   h'08'
   GOTO   KESME
BASLA  

SAYAA   EQU   d'32'
SAYAB   EQU   d'33'
SAYAC   EQU   d'34'
DEPO   EQU   d'35'
KAYIT   EQU   d'36'
KAYIT2   EQU   d'37'
AMBAR   EQU   d'38'
TORBA   EQU   d'39'
CANTA   EQU   d'40'
CUVAL   EQU   d'41'
CANAK   EQU   d'42'
MAYAC   EQU   d'43'
BUTON_REG EQU   d'44'
SEPET   EQU   d'45'
BAVUL   EQU   d'46'
YON   EQU   d'47'
DURAK   EQU   d'48'

VERI   EQU   d'49'   ; veri reg
VERI_AD   EQU   d'50'   ; veri adresinin tutuldugu reg
CX   EQU   d'51'
SAY0   EQU   d'52'
SAY1   EQU   d'53'
CASUS   EQU   d'54'
IZCI   EQU   d'55'
ASIRI_YUK_REG equ   d'56'
YON_GOS   equ   d'57'
REV_REG   equ   d'58'
ACIL_REG1   equ   d'59'
ACIL_REG2   equ   d'60'
ACIL_REG3   equ   d'61'
ACIL_REG4   equ   d'62'
KAPI_REG   equ   d'63'
T_C_REG   equ   d'64'
ACIL_REG5   equ   d'65'
PARK_REG   equ   d'66'
ACIL_REG6   equ   d'67'
DISPLAY_REG equ   d'68'

#DEFINE   RS   PORTC,1      ;0->kontrol   1->data
#DEFINE   RW   PORTC,0      ; 0->Write    1->Read
#DEFINE   EN   PORTD,2      ; lcd enable
#DEFINE   KONTRAS   PORTC,2 ; lcd kontras ucu
#DEFINE   LAMBA   PORTC,3 ; lcd lamba ucu

#DEFINE DATA7 PORTA,2
#DEFINE DATA6 PORTA,1
#DEFINE DATA5 PORTA,5
#DEFINE DATA4 PORTD,3

#DEFINE   PTC   PORTD,7   ; ptc girişi normalde portd,7=0

   CLRF   CANAK
   CLRF   CUVAL
   CLRF   CANTA
   CLRF   TORBA
   CLRF   AMBAR
   CLRF   KAYIT
   CLRF   KAYIT2   
   CLRF   DEPO
   CLRF   SAYAA
   CLRF   SAYAB
   CLRF   SAYAC
   clrf   ASIRI_YUK_REG
   clrf   REV_REG
   clrf   ACIL_REG1 ; call tum_kontrol içindeki acil cıkıs
   clrf   ACIL_REG2 ; 2 kayıt arası yani gecıkme_uc içindeki
                 ; acil çıkış için.
   clrf   ACIL_REG3 ; ıkı kayıt arası park ozel ıcın
   clrf   ACIL_REG4 ; revizyonda  REV_TUMKONTR icin
   clrf   KAPI_REG  ; yarım/ tam otomatik secimi
   clrf   T_C_REG     ; asan tek/çift hızlı seçimi
   clrf   ACIL_REG5 ; call KAPI_ACMA_ISLEMI1 icin
   clrf   PARK_REG  ; park aktif/pasif reg
   clrf   ACIL_REG6 ; call tum_kontrol_dur icin acil cıkıs
      
   CLRF   PORTA
   CLRF   PORTB
   CLRF   PORTC
   CLRF   PORTD
   CLRF   PORTE
;===============   
PORTLARI_KUR   
   MOVLW   h'07' ; portA ve portE tüm çıkışları dijital
   MOVWF   ADCON1
   BCF   TRISE,4
   CLRF   TRISA
   MOVLW   b'11000110'
   MOVWF   TRISB
   MOVLW   b'00010000' ; burada Rc4 kapı aç buton ucu
   MOVWF   TRISC
   movlw   b'10000000' ; 7. bit PTC girişi
   movwf   TRISD
   
   CLRF   TRISE
   BSF   TRISE,0
   BSF   TRISE,1
   BSF   TRISE,2
   
   bsf   RCON,7
   
   MOVLW   b'10100000'
   MOVWF   INTCON
   
   MOVLW   b'11000111'
   MOVWF   T0CON
   
;================   
SIL_KOMPLE
   BCF   PORTD,1      ; role uln2003 için
   BSF   PORTA,0      ; display ve tüm reg sıl
   BSF   PORTD,0      ; role 4099=0
   BCF   PORTD,0
   bcf   TRISB,7
   
   BCF   PORTB,7      ; display ve tüm reg sıl
   BCF   PORTA,3
   BCF   PORTA,4
   BCF   PORTB,0
   BCF   PORTB,3
   BCF   PORTB,4
   BCF   PORTB,5
   BSF   PORTB,3
   BCF   PORTB,3
   BSF   PORTB,4      
   BSF   PORTB,3      
   BCF   PORTB,3
   BCF   PORTB,4
   BSF   PORTB,5
   BSF   PORTB,3
   BCF   PORTB,3
   BSF   PORTB,4
   BSF   PORTB,3
   BSF   PORTA,3
   BSF   PORTA,4
   BSF   PORTB,0
   bsf   TRISB,7
   BSF   PORTD,1      ; role 2003  için
   
   

YAK
   bsf   portD,1      ; led yak
;-----------------   
TMR0_KESME_KUR1      
   
   MOVLW   b'10100000'
   MOVWF   INTCON
   
   CLRF   TMR0L
   clrf   SAYAC
;-------------------
YAK1
   bsf   CASUS,0
   GOTO   YAK1   
SONDUR
   bcf   portD,1      ; led sondür
;-----------------   
TMR0_KESME_KUR2   
   
   MOVLW   b'10100000'
   MOVWF   INTCON

   clrf   TMR0L
   clrf   SAYAC
;-------------------   
SONDUR1
   clrf   CASUS
   GOTO   SONDUR1
KESME
   BCF   INTCON,2
   incf   SAYAC,F
   MOVLW   d'10'
   cpfseq   SAYAC,W
   GOTO   DEVAM
   tstfsz   CASUS
   goto   SONDUR
   GOTO   YAK
DEVAM
   CLRF   TMR0L
   RETFIE
   
   END

HEXF2

Eğer bir gün bekleyebilirsen sana C18'de yazdığım bir kodu göndereyim.Burdan rahatlıkla ASM'ye çevirebilirsin.

Tom

Beklerim tabiki çok teşekkürler.