Site icon Mühendis Alemi

PIC16F877A Micro Cipinde Usart(Seri İletişim) Deneyi

Assembly Dili ile PIC16F877A Programlama

Assembly Dili ile PIC16F877A Programlama

PİC16F877A SERİSİ

Bu örneğimiz de PİC16F877A serisinde seri iletişim(usart) ile LCD ekrana veri göndermeyi göreceğiz.

Örnekte gerçekleştirmek istediğimiz Ternminal Ekranına yazdığımız ifadenin LCD ekranında eş zamanlı olarak gözükmesini sağlayacaz. Bu işlem için öncelikli olarak yapmamız gereken Proteusta INSTRUMENTS sekmesinden VIRTUAL TERMİNAL’i , DEVİCES sekmesinde de PİC16F877A mikcro çipini ve LM016L kodlu LCD ekran kullanacaz.

Gerekli devreyi kurduktan sonra öncelikle seri iletişim için kullanacağımız SPRG değerini alttaki tabloya göre hesaplamasını yapıyoruz.

baud rate formülü

VIRTUAL TERMINAL için kullanacağımız Baud Rate değerimiz 9600.

FOSC değerimiz işlemcimizin Frenaks değeri.

Bulacağımız X değeride SPBRG değerimiz olacak ve kod kısmında bu değeri SPBRG registerına atayacağız.

Gerekli hesaplamayı yaptıktan sonra kodumuzu yazalım. (Benim yazdığım kod için İşlemcinin hızı 8 MHZ olup X değerimizi decimal olarak 12 bulduk).

INCLUDE<P16F877A.INC>

 

               SAYAC                  EQU       0X20

                SAYAC1               EQU       0X21

                TERMINAL           EQU       0X22

                LCD_DATA          EQU       0X23

                ORG                       0X00

                GOTO    AYARLAR

AYARLAR   

                BANKSEL              TRISB    

                CLRF                      TRISB  

                MOVLW               D’12’

                MOVWF               SPBRG

                MOVLW               0X00

                MOVWF               TXSTA

                BANKSEL              PORTB

                CLRF                      PORTB

                CALL                      LCD_AYAR

                MOVLW               H’90’

              MOVWF               RCSTA

OKU

                 BTFSC                    PIR1,5

                CALL                      TERMINAL_OKU

                GOTO                    OKU

TERMINAL_OKU

                  MOVF                   RCREG,W

                MOVWF               TERMINAL

                CALL                      VERI_YAZ

                BCF                        PIR1,5

                RETURN

VERI_YAZ

                MOVWF               LCD_DATA

                SWAPF                 LCD_DATA,W

                CALL                      VERI_GONDER

                MOVF                   LCD_DATA,W

                CALL                      VERI_GONDER

                RETURN

VERI_GONDER

                ANDLW                0X0F

                MOVWF               PORTB

                BSF                         PORTB,5

                BSF                         PORTB,4

                CALL                      GECIKME

                BCF                        PORTB,5

                RETURN

LCD_AYAR

                 MOVLW               H’80’

                CALL                      KOMUT_YAZ

                MOVLW               H’02’

                CALL                      KOMUT_YAZ

                MOVLW               H’0C’

                CALL                      KOMUT_YAZ

                MOVLW               H’28’

                CALL                      KOMUT_YAZ

                RETURN

 

KOMUT_YAZ

                 MOVWF               LCD_DATA

                SWAPF                 LCD_DATA,W

                CALL                      KOMUT_GONDER

                MOVF                   LCD_DATA,W

                CALL                      KOMUT_GONDER

                RETURN

KOMUT_GONDER

                ANDLW                0X0F

                MOVWF               PORTB

                BCF                        PORTB,4

                BSF                         PORTB,5

                CALL                      GECIKME

                BCF                        PORTB,5

                RETURN

GECIKME

                 MOVLW               H’60’

                MOVWF               SAYAC

D1

               MOVLW               H’60’

                MOVWF               SAYAC1

D2

                DECFSZ                 SAYAC1,F

                GOTO                    D2

                DECFSZ                 SAYAC,F

                GOTO                    D1

                RETURN

END

Kodu kısaca anlatacak olursak AYARLAR kısmında hesaplama sonucu bulduğumuz X değerimizi SPBRG registerına atıyoruz ve programlar için gerekli olan TXSTA ve RCSTA registerları için değerleri Datasheetten bakarak giriyoruz. Ayrıca LCD için gerekli olan ayarlarıda bu bölümde gerçekleştiriyoruz.Daha sonra PIR1 registerın 5. Biti ile veri gelip gelmediğini kontrol edip eğer veri geliyorsa veriyi okuyup LCD ekrana yazmasını sağlıyoruz.

proteus devre çizimi

 

Pic 16F877A serisinde 8 Bit İleri/Geri sayaç deneyini görmek istiyorsanız tıklayınız…

Bilgisayar Mühendisliği ile ilgili diğer yazıları incelemek istiyorsanız tıklayınız…

Exit mobile version