Wednesday, June 10, 2009

PIC 16F84A İLE 7 SEGMENT SAYICI


PIC 16F84 İle oldukça pratik sayıcılar yapmak mümkündür. Örnek olarak aşağıdaki devrede mikrodenetleyiciye besleme, XT osilatör eklenmiştir. Bundan sonra ortak anotlu 7 segment displayin 8 bacağına PIC’in B Portları bağlanmıştır.

Sayıcının gerçekleştirilmiş hali



Sayıcının Devre Şeması

Sayıcının Assembly Programı

; ======================================================
; Program: 7 segment 0-9 Sayici
; Author: Umut SIMSEK
; Date: 19.05.2009
; Version: 1.0
; MCU: PIC16F84A
; ======================================================


     PROCESSOR 16F84A
     #include "p16f84a.inc"

     __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

;=== Degisken Tanimlamalari ===

     Cblock    0x0C ; RAM starting address
     endc            ; end of variable declerations
     COUNT1 equ h'30'
     N equ h'249'

    
;=== Program Hafiza Yapilandirmasi ===

     ORG 0x00 ; Reset vector
     goto Main
         
     ORG 0x04 ; Iterupt vector
     goto Main


;=== Ana Program ===
    
Main
    
     banksel   TRISB
     clrf TRISB
     banksel PORTB

Loop

     movlw 0xFF
     movwf PORTB
     call Bekle_1sn
     call Bekle_1sn
     call Bekle_1sn

     movlw 0xC0
     movwf PORTB
     call Bekle_1sn

     movlw 0xF9
     movwf PORTB
     call Bekle_1sn

     movlw 0xA4
     movwf PORTB
     call Bekle_1sn

     movlw 0xB0
     movwf PORTB
     call Bekle_1sn

     movlw 0x99
     movwf PORTB
     call Bekle_1sn

     movlw 0x92
     movwf PORTB
     call Bekle_1sn

     movlw 0x82
     movwf PORTB
     call Bekle_1sn

     movlw 0xF8
     movwf PORTB
     call Bekle_1sn

     movlw 0xF8
     movwf PORTB
     call Bekle_1sn

     movlw 0x80
     movwf PORTB
     call Bekle_1sn

     movlw 0x98
     movwf PORTB
     call Bekle_1sn

     goto Loop

Bekle_1sn
     call Delay_100ms
     call Delay_100ms
     call Delay_100ms
     call Delay_100ms
     call Delay_100ms
     call Delay_100ms
     call Delay_100ms
     call Delay_100ms
     call Delay_100ms
     call Delay_100ms
     return

Delay_100ms
     movlw d'120'
     movwf COUNT1

Delay_1ms
     movlw N

D_Loop
     addlw -1
     btfss STATUS,Z
     goto D_Loop
    
     decfsz COUNT1,f
     goto Delay_1ms

     return


     End

No comments: