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

C# Dosya İşlemleri

ProperyGridControl DevExpress 11.2

C# Resim Kırpma İslemi