P16F877A ile Timer1 Kesmesi

timer1 16 bitlik sayıcıdır.
timer1'i 0'dan  65.536 arası saydırabilirsiniz
timer1 zaman hesaplaması = timercounter*(65.536 - TMR1(TMR1H+TMR1L)*Prescalerdegeri*(4/fosc)
Tımer1 kesmesinde  kullanılan registarlar PIE1,PIR1,T1CON,INTCON registerlarıdır.
Sayacsız maksimum kesmenın gelmesi için gecen zaman = (65.636-0)*8*(4/4)=524288 µs 

ben burada timer1 baslangıc degerinı 3CB0,sayacımı 5,frekansım 8 Mhz
formulu kullanırsak = 5*(65.536-15.536)*8*(4/8)=1000000 µs =1000 ms = 1 sn 
programın kodlamasıda su sekildir :



list p = P16F877A
#include <P16F877A.inc>
sayac EQU 0X21
org 0X00
goto Start
org 0X04

interrupt
bcf PIR1,TMR1IF    ;
movlw H'3C'
movwf TMR1H
movwf H'B0'
movwf TMR1L
DECF sayac,1
BTFSS STATUS,Z
retfie
movlw D'5'
movwf sayac
goto LED

LED
comf PORTD,1   
retfie

Start
MOVLW B'11000000' ;GIE AKTIF -Cevresel Kesme Aktif
MOVWF INTCON
bsf STATUS,RP0
movlw b'00000001'
movwf PIE1                     ;timer1 tasma kesmesine izin ver
movlw b'11111110'
movwf TRISD
bcf STATUS,RP0
movlw b'00100001'                       ;Timer kesmesini aktif et ve prescaler degeri 4
movwf T1CON
movlw D'5'
movwf sayac
movlw H'3C'
movwf TMR1H
movlw H'B0'
movwf TMR1L
clrf PORTD
DON
goto DON
end

Yorumlar

Bu blogdaki popüler yayınlar

DevExpress TreeList Kullanımı

Devexpress GridControl SimpleButon Ekleme

DevExpress LookupEdit Veri Gösterimi