Elektronik / Mikrodenetleyici Projeleri/

PIC16F877 ile açıklamalı assembly örnekleri bilgiler

Sponsorlu Bağlantılar

Bir çok açıklamalı asm kodlarının yanı sıra çeşitli komutların detaylı bilgileri mikrodenetleyici bilgileri bulunmakta hazırlayan emeği geçen kişilere teşekkürler.

KOMUT

AÇIKLAMA

GEREKLİ SÜRE

ETKİLEDİĞİ BAYRAK

ADDWF f,d w ile f dosyasının içeriğini toplar sonucu d’ nin belirttiği yere yazar

1

C,DC,Z

ANLWF f,d w ile f dosyasının içeriğini AND işlemine tabi tutar sonucu d’ nin belirttiği yere yazar

1

Z

CLRF f f ile belirtilen dosyanın (adresin) içeriğini “00” yap

1

Z

COMP f,d f dosyasının tersini alır, sonucu d’ nin gösterdiği yere yazar

1

Z

DECF f,d f dosyasının içeriğini bir azaltır sonucu d’ nin belirttiği yere yazar

1

Z

DECFSZ f,d f dosyasının içeriğini bir azaltır ve sonuç 0’ ise yeni değeri d’ nin belirttiği yere yazar

1 (2)

INCF f,d f dosyasının içeriğini bir azaltır sonucu d’ nin belirttiği yere yazar

1

Z

INCFSZ f,d f dosyasının içeriğini bir azaltır ve sonuç 0’ sa yeni değeri d’ nin belirttiği yere yazar

1 (2)

IORWF f,d w ile f dosyasının içeriğini OR işlemine tabi tutar ve sonucu d’ nin belirttiği yere yazar.

1

Z

MOVF f,d (movfw f) file belirtilen dosyanın içeriğini w’ e kopyala

1

Z

MOVWF f w’ ün içeriğini f ile belirtilen dosyaya kopyala

1

NOP işlem yapmadan geç

1

RLF f,d f dosyasının içindeki tüm bitleri bir sola kaydır ve sonucu d’ nin belirttiği yere yaz

1

C

RRF f,d f dosyasının içindeki tüm bitleri bir sağa kaydır ve sonucu d’ nin belirttiği yere yaz

1

C

SUBWF f,d f dosyasından w dosyasında bulunan sayıyı çıkart ve sonucu d’ nin belirttiği yere yaz

1

C, DC, Z

SWAP f,d f dosyasının alt dört biti ile üst dört bitini yer değiştir.

1

XORWF f,d f dosyasının içeriğini w dosyasında bulunan sayı ile XOR işlemine tabi tut ve sonucu d’ nin belirttiği yere yaz

1

BCF f,d f dosyasındaki b bitini “0” yap

1

BSF f,d f dosyasındaki b bitini “1” yap

1

BTFSZ f,d f dosyasındaki b bitini test et “0” ise bir sonraki komuta git

1 (2)

BTFSS f,d f dosyasındaki b bitini test et “1” ise bir sonraki komuta git

1 (2)

C, DC, Z

ADDLW k w dosyasındaki değer ile k sayısını topla

1

Z

ANDLW k w dosyasındaki değer ile k sayısını AND işlemine tabi tut ve sonucu w’ ye yaz

2

CALL k k ile belirtilen alt programa git

1

CLRWDT watchdog timer’ i temizle

1

TO, PD

GOTO k k ile belirtilen adrese git

2

IORLW k w dosyasındaki değer ile k sayısını OR işlemine tabi tut ve sonucu w’ e yaz

1

Z

MOVLW k k sayısını w’ e yaz

1

RETFIE kesme ile geldiğin yere git

2

RETLW k w’ e k değerini yükleyip call ile geldiğin yere geri dön

2

RETURN w’ nin içeriğini değiştirmeden call ile geldiğin yere geri dön

2

SLEEP PIC’ i bekleme veya uyuma durumuna geçir

1

TO, PD

SUBLW k k sayısından w dosyasındaki değeri çıkart sonucu w’ e yaz

1

C, DC, Z

XORLW k k sayısı ile w dosyasında bulunan sayıyı XOR işlemine tabi tut ve sonucu w’ e yaz

1

Z

Portd bağlı ledleri yakıp söndüren flip-flop programı

Portd bağlı ledleri 4’ er 4‘ er yakıp söndürme

Portd bağlı ledleri sola doğru döndüren program

Portd bağlı ledleri sağa doğru döndüren program

Portd bağlı ledleri binary olarak saydırma

Portd bağlı ledleri desimal olarak saydıran program

Data blok’ a bulunan değerlere göre 7 segment displayi direk olarak portd’ de sürme

Step motor’u sola doğru döndürme

Step motor’u sağa doğru döndüren program

Lcd’ nin tek satıra yazı yazma

Lcd displayde çift satır yazı yazma

Porta’ daki bilgileri portd yazan program

Portc’ deki hexsadesimal bilgiyi portd’ de desimale çeviren program

Rb0/ınt kesmesinin kullanılması

Tımer0 kullanılarak porta.4 ucundan gelen 2 palste 1 sayan program

Kesme kullanılarak t0′ ın zamanlayıcı olarak kullanılması

Karşılaştırma modu ccpr1x ve tmr1x saklayıcılarını karşalaştırım buna göre çıkış verme

Pwm modu pals genişliği modülasyonu

rs232-portundan-bilgi-gonderilmesi

rs232-portundan-bilgi-okunmasi

Analog 0 (porta.0) gelen analog bilginin alt 8 bitini port d yazan program

Kesme kullanılarak yapılmış analog dijital çevirici uygulaması

Seri porta 19200b hızında bilgi gönderen program

Seri porttan 19200b hızında bilgi alan program

Seri port ile aynı anda bilgi alıp veren program

Flash hafızaya ve dahili eeproma program yazma

Flash program hafızanın 30h ardesine 15h sayısı yazan program

Eeprom data hafızanın 5. adresine 15 yazıp okuyan program

Flash program hafıza’ nın 30h adresine 15h yazıp okuyan program

Senkron seri haberlesme spı uygulamaları

93c56 üç tel mantığı ile çalışan harici seri eeprom’ a yazma ve okuma programı

I2c iki tel mantığı ile 24c02 seri eeproma bilgi yazma ve okuma

PORTD’ yi bağlı ledleri yakıp söndüren (flip-flop) programı

      
list      p=16f877            
#include         
__CONFIG 3F71H	
R6  EQU     	H'0020'     
R7  EQU     	21H     
org     	00h   ;Power on güç verildiğinde bu adresten çalışmaya başlar
goto    	START  	
;**********************************************************************************************************************
;	GİRİŞ – ÇIKIŞ AYARI YAPILIYOR
;**********************************************************************************************************************
START  	clrf 	PORTD	; PORTD çıkışları 0  yapıldı 
bsf     	STATUS,RP0   	; bank1’ e geçildi
movlw   	0x00        	; w registerine 0000-0000 yükle
clrf   		TRISD         	; PORTD çıkış yapıldı
bcf  		STATUS,RP0           	; bank0
j1 movlw   	0xff          	; w registerine ff yükle (1 1 1 1 1 1 1 1)
movwf  	PORTD         	; PORTD' ye bağlı LED ler yandı
call    	zaman         	; zaman programına cağır
movlw   	0x0           	; w registerine 00 yükle (0 0 0 0 0 0 0 0)
movwf   	PORTD         	; PORTD' ye bağlı LED ler söndü
call    	zaman         	; zaman programını çağır
goto    	j1            	; j1'e git
;************************************
; 	BEKLETME ZAMAN PROGRAMI
;************************************
zaman   	movlw   	.255    	; desimal olarak 255 sayısını w registerine yükle
        	movwf   	R7    	; w registerindeki sayıyı R7 registerine yükle
z0      	movlw   	.255    	; desimal olarak 255 sayısını w registerine yükle
        	movwf   	R6    	; w registerindeki sayıyı R6 registerine yükle
z1      	decfsz  	R6,F  	; R6 nin değerini bir azalt ve 0 değilse 
        	goto    	z1      	; Z1 ye git
        	decfsz  	R7,F  	; R7 in değerini bir azalt ve 0 değilse
goto    	z0      	; Z0 e git
                retlw   00      	; geldiğin yere geri git

END		

PORTD’ ye bağlı ledleri 4’ er 4‘ er yakıp söndüren program,

       
list      p=16f877            
#include         
__CONFIG 3F71H	
R6   EQU     	H'0020'     
R7   EQU     	21H     
org     	00h     	;Power on güç verildiğinde bu adresten çalışmaya başlar
goto    	START  	
;**********************************
;	GİRİŞ – ÇIKIŞ AYARI YAPILIYOR
;**********************************
START  clrf PORTD		; PORTD çıkışları 0  yapıldı 
bsf     	STATUS,RP0   	; bank1’ e geçildi
movlw   	0x00        	       ; w registerine 0000-0000 yükle
clrf   		TRISD         	; PORTD’ nin çıkış yapıldı
bcf  		STATUS,RP0      ; bank0	
j1 movlw   	0fh          	; w registerine 0f yükle (0 0 0 0 1 1 1 1)
movwf  		PORTD         	; PORTD' ye bağlı LED ler yandı
call    	zaman         	; zaman programına cağır
movlw   	b’111100000’    ; w registerine 00 yükle (1 1 1 1 1 0 0 0 0)
movwf   	PORTD         	; PORTD' ye bağlı LED ler söndü
call    	zaman         	; zaman programını çağır
goto    	j1            	; j1'e git
;*******************************
; 	BEKLETME ZAMAN PROGRAMI
;*******************************
zaman   	movlw   	.255    	; desimal olarak 255 sayısını w registerine yükle
        	movwf   	R7    	; w registerindeki sayıyı R7 registerine yükle
z0      	movlw   	.255    	; desimal olarak 255 sayısını w registerine yükle
        	movwf   	R6    	; w registerindeki sayıyı R6 registerine yükle
z1      	decfsz  	R6,F  	; R6 nin değerini bir azalt ve 0 değilse 
        	goto    	z1      	; Z1 ye git
        	decfsz  	R7,F  	; R7 in değerini bir azalt ve 0 değilse
		goto    	z0      	; Z0 e git
        	retlw   00      	; geldiğin yere geri git
END			

PORTD’ ye bağlı ledleri sağa doğru döndüren program

list      p=16f877            
#include         
__CONFIG 3F71H	

R0  EQU     	H'0020'     
R6  EQU     	21H
R7  EQU     	22h     
org     	00h     	;Power on güç verildiğinde bu adresten çalışmaya başlar
goto    	START  	
;******************************************
;	GİRİŞ – ÇIKIŞ AYARI YAPILIYOR
;*****************************************
START  	clrf 	PORTD	; PORTD çıkışları 0  yapıldı 
bsf     		STATUS,RP0   	; bank1’ e geçildi
movlw   		0x00        	; w registerine 0000-0000 yükle
clrf   			TRISD         	; PORTD’ nin çıkış yapıldı
bcf  			STATUS,RP0           	; bank0	
movlw   		01h          	; w registerine 00 yükle 0 0 1)
movwf 		R0
j1			movfw  	R0
movwf		PORTD         	; 
call    		zaman         	; zaman programına çağır
rrf	R0,f
btfss			STATUS,0	;carr biti 1 oldu mu ?
goto    		j1            	; j1'e git
rrf	R0,f		;
goto 			j1
;*******************************
; 	BEKLETME ZAMAN PROGRAMI
;*******************************
zaman   	movlw   	.255    	; desimal olarak 255 sayısını w registerine yükle
        	movwf   	R7    	; w registerindeki sayıyı R7 registerine yükle
z0      	movlw   	.255    	; desimal olarak 255 sayısını w registerine yükle
        	movwf   	R6    	; w registerindeki sayıyı R6 registerine yükle
z1      	decfsz  	R6,F  	; R6 nin değerini bir azalt ve 0 değilse 
        	goto    	z1      	; Z1 ye git
        	decfsz  	R7,F  	; R7 in değerini bir azalt ve 0 değilse
       	goto    	z0      	; Z0 e git
        	retlw   00      	; geldiğin yere geri git
        	END	

Yukarıda özetler verildi anlatımın tamamı: PIC16F877 ile açıklamalı assembly örnekleri bilgiler

Dosya indirme LINK listesi (TXT formatında) link-7063.zip şifre-pass: 320volt.com