Açıklamalı atmel avr attiny2313 uygulama kodları asm

| Mayıs 27, 2023 Tarihinde güncellendi
Açıklamalı atmel avr attiny2313 uygulama kodları asm

Altaş Yayıncılık ve Elektronik satışa sunduğu “Atmel AVR (ATtiny2313) Programlama” adlı kitabın ücretsiz dağıtılan uygulama devrelerine ait kaynak asm yazılımları ayrıca projelerin .bat, .tmp, aps, .awm, .hex,. lst, .map, .obj dosyalarıda bulunmakta. Tüm komutların açıklamaları yapılmış deneme devreniz yada isis üzerinde testleri yapabilirsiniz ayrıca “ATtiny2313 AT90S2313 Uygulamaları” yazısında ki devreler ile uygulanabilir

Hazırlayan : Abdurrahman TAŞBAŞI Emeği geçen kişilere teşekkürler

Atmel AVR ATtiny2313 Proje listesi

PROGRAM49; Basılan PC klavye tuşunun ASCIIkarşılığını PORTB ;pinlerindeki LED’lerde binary olarak gösteren program. USART ;veri alma program uygulaması.

PROGRAM50; Dahili EEPROM belleğe yazma, EEPROM bellekten okuma ve EEPROM belleği silmeye örnek program

PROGRAM48; PD6 butonuna her basışta AVR ÖĞRENİYORUM mesajını USART ile ;gönderen program kristal sistem osilatörü 4Mhz, Baud rate 9600,URRB ;saklayıcısı değeri 25 desimal

PROGRAM47; Analog karşılaştırıcı kesmesi örnek program

PROGRAM46; Analog karşılaştırıcı için örnek program

PROGRAM45; PD0 butonu ile UYKU moduna giren, INT1 kesmesi ile UYKU modundan çıkan örnek program

PROGRAM44; Watchdog Zamanlayıcının durdurulması (Programın hatalı çalışmasının WDT ile korunması)

PROGRAM43; Watchdog Zamanlayıcı kesmesi ve sistem reseti moduna örnek ;program

PROGRAM42; Zamanlayıcı/Sayıcı1 Faz Düzeltme PWMörnek program değişken duty cycle

PROGRAM41; Zamanlayıcı/Sayıcı1 Hızlı PWMörnek program %30 duty cycle

PROGRAM40; Zamanlayıcı/Sayıcı1 çıkış karşılaştırması ve karşılaştırma kesmesine örnek program

PROGRAM39; Giriş Yakalamaya örnek program

PROGRAM38; Zamanlayıcı/Sayıcı1 kullanımına örnek program

PROGRAM37; PWM modunda WGM2=1 için örnek program

PROGRAM35; Zamanlayıcı/Sayıcı0 Hızlı PWM modu için örnek program

PROGRAM36; Zamanlayıcı/Sayıcı0 Faz Düzeltme PWM modu için örnek ;program

PROGRAM33; Zamanlayıcı/Sayıcı0 ile zaman geciktirmesi yapılması

PROGRAM34; Zamanlayıcı/Sayıcı0 çıkış karşılaştırması ve karşılaştırma kesmesine örnek program

PROGRAM32; Timer/Conter0 Zamanlayıcı/Sayıcı kullanımına örnek program (Normal mod)

PROGRAM31; Kesme servis programında SREG ve saklayıcı içeriğinin korunmasına yönelik örnek program

PROGRAM4; Saklayıcının 4. bit değerine göre PORTB’nin çıkış değerini ;değiştiren program.

PROGRAM23; PORTD pinlerindeki veriyi kullanarak 8 bit çıkarma yapan ;program

PROGRAM25; PORTD pinlerindeki veriyi, veri belleğine kaydeden daha sonraPA0 butonu ile okuyan program

PROGRAM27; Program belleğindeki veriyi kullanarak 0-F arası sayan ve 7segment displayde gösteren program

PROGRAM21; Saklayıcıdaki veri ile PORTD pinlerindeki veriyi toplayan ;program

PROGRAM19; PD6 butonuna basılana kadar veriye SWAP işlemi uygulayarak ;PORTB’ye bağlı LED’lerde gösteririr.

PROGRAM26; Program belleğindeki tablo verilerini PORTB LED’lerinde ;gösteren program

PROGRAM17; Portb’ye bağlı LED’leri sağdan sola ve soldan sağa ;kaydırarak yakan program

PROGRAM15; PORTB’ye bağlı LED’leri sağdan sola kaydırarak yakan program

PROGRAM7; Sekiz kez PD0’a bağlı butona bastıktan sonra PORTB’ye bağlı LED’lerden 3. ve 4. bit yerine tümünü yakan program

PROGRAM5; PORTD’nin iki bitine göre programın akışını değiştiren ;program

PROGRAM11; GECICI

PROGRAM9; PD2’ye bağlı butona her basıştan sonra PORTB’deki veriyi bir sayı artıran ve PD2’nin set olmasını takip eden program

PROGRAM14; PD0 ve PD6’ya bağlı butonlardan birine basıldığında tanımlanan şartlarda PORTB’ye bağlı LED’leri yakan program.

PROGRAM22; PORTD pinlerindeki veriyi kullanarak 16 bit toplama yapan ;program

PROGRAM8; Her PD2’ye bağlı butona basıştan sonra PORTB’deki veriyi;bir sayı artıran ve LED’leri bu sıraya göre yakan program

PROGRAM24; PORTD pinlerindeki veriyi kullanarak 16 bit çıkarma yapan ;program

PROGRAM20; PB0=((/A*B)+(/B*A))*(C*/D) Mantıksal ifadesinin çözümü

PROGRAM15; PORTB’ye bağlı LED’leri sağdan sola kaydırarak yakan program

PROGRAM18; PORTD pinlerindeki verinin tersini PORTB pinlerindeki ;LED’lerde gösteren program

PROGRAM10; Saklayıcı değerinden , sabit değerini çıkarttıktan sonra sonuca göre PORTB’ye bağlı LED’leri yakan program

PROGRAM13; PD2 butonuna basıldığında PORTB’deki LED’leri sırasıyla ;birer artırarak yakan program.

PROGRAM6; PORTA pinlerinin durumuna göre PORTB’ye bağlı LED’leri yakıp ;söndüren program

PROGRAM1; PORTB portunu çıkış olarak yönlendiren ve 10101010 verisini ;PORTB ;pinlerinde gösteren program

PROGRAM30; INT1 harici kesmeye örnek program.

PROGRAM29; Program belleğindeki veriyi kullanarak PD0 ve PD1 butonları ile bir step motoru sağa ve sola döndüren program

PROGRAM28; Program belleğindeki veriyi kullanarak PA0 butonu ile 0-F arası ileri,PA1 butonu ile F-0 arası geri sayan ve 7segment display’de gösteren program

PROGRAM2; PORTD pinlerinin okunarak PORTB’ye bağlı LED’lerinde ;gösteren program.

;PROGRAM ADI: PROGRAM18     Tarih: 09.04.2008   
;PORTD pinlerindeki verinin tersini PORTB pinlerindeki ;LED'lerde gösteren program 
.include "tn2313def.inc"	;Entegreyi tanımla
.def        	GECICI=R16	;Çalışma saklayıcısı tanımla
.def        	SAYAC1=R17	;sayaç saklayıcıları 
.def		SAYAC2=R18	; tanımla

;======================DÜZENLEMELER=======================
.cseg                      	;Code segmenti başlat
.org  0
	RJMP	RESET	;Enerji bağlandığında RESET'e git
RESET:
	SER	GECICI	;GECICI saklayıcısını Set(11111111)yap   
	OUT	DDRB,GECICI	;PORTB'yi çıkış olarak düzenle
	OUT PORTD, GECICI 	;PORTD Pul-up'larını aktif yap
 	CLR GECICI	;PORTD'yi 
    OUT DDRD, GECICI	;giriş olarak düzenle
	
;==================  ANA PROGRAM =======================
BASLA:
   	IN	GECICI, PIND   	;PORTD pinlerini GECICI'ye yükle
   	COM	GECICI         	;GECICI'nin Bir'e  tatmamlayıcısını al
	OUT	PORTB,GECICI  	;Terslenmiş veriyi PORTB'ye yükle	
	RJMP BASLA          	;BASLA etiketine git.

;PROGRAMIN ADI: PROGRAM24.ASM              Tarih: 11.05.2008    
;PORTD pinlerindeki veriyi kullanarak 16 bit çıkarma yapan ;program
.include "2313def.inc"	;Entegreyi tanımla
. def    GECICI=R16	;Çalışma saklayıcısını tanımla
. def    AL  	=R17	;16 bit sayılar
. def    AH  	=R18	;için
. def    BL  	=R19	;saklayıcıları
. def    BH  	=R20	;ata.
. def    SAYAC1=R21	;Sayaç1 için saklayıcı ata.
. def    SAYAC2=R22	;Sayaç2 için saklayıcı ata.

;=======================DÜZENLEMELER=========================
.cseg
.org	0
	RJMP	RESET		;Entegreye enerji geldiğinde RESET'e git
RESET:	
    	LDI     	GECICI, RAMEND		;Yığın göstericisi
    	OUT     	SPL, GECICI		;başlangıcını düzenle
    	LDI 	GECICI,0xFF		;PortB'nin  
	OUT	DDRB,GECICI         ;tüm bitlerini çıkış olarak düzenle
    	LDI 	GECICI,0x00		;PortD'nin  tüm bitlerini 
	OUT	DDRD,GECICI  		;giriş olarak düzenle    
    	LDI 	GECICI,0x7F		;PortD'nin  pull-up direnç
	OUT	PORTD,GECICI		;özelliğini aktif yap.      
;====================  ANA PROGRAM ==========================
BASLA:
   	IN      	AL,PIND		;PORTD'i oku, A  low byte'a yükle
    	LDI 	BL,0xEF		;B sayısı low byte yükle
    	LDI     	AH,0X1F		;A sayısı high byte yükle
    	LDI     	BH,0XAA		;B sayısı high byte yükle
    	SUB     	AL,BL		;AL-BL işlemini yap
    	SBC     	AH,BH		;AH-Bh işlemini taşma  ilr birlikte yap
    	BRBS    	0,TASMA_VAR		;SREG 0. biti "1" ise TASMA_VAR'a git
    	OUT     	PORTB,AL		;Sonucun alt byte'nı PORTB LED'lerde göster
    	RCALL  	GECIKME		;GECIKME alt programını çağır.
    	OUT 	PORTB, AH		;Sonucun üst byte'nı PORTB LED'lerde göster
	RCALL    	GECIKME		;GECIKME alt programını çağır.
    	RJMP    	BASLA		;BASLA etiketine git

TASMA_VAR:
 	COM AL			;Sonuç alt byte'nın 1'e tamamlayıcısını al 
   	COM AH			;Sonuç üst byte'nın 1'e tamamlayıcısını al
    	INC AL			;Sonuç alt byte'na 1' ekle
    	OUT 	PORTB,AL		; Sonucun alt byte'nı PORTB LED'lerde göster
    	RCALL   	GECIKME		; GECIKME alt programını çağır.
    	OUT 	PORTB, AH		; Sonucun üst byte'nı PORTB LED'lerde göster
    	RCALL 	GECIKME		; GECIKME alt programını çağır.
    	RJMP    	BASLA		; BASLA etiketine git
GECIKME:   
    	LDI    	SAYAC2, 255 	;SAYAC2'ye 255 desimal yükle.
GECIK1:
    	LDI   	SAYAC1, 255   	;SAYAC1'e 255 desimal sayısını yükle. 
GECIK2:
   	DEC    	SAYAC1           	;SAYAC1 sayacını bir azalt
    	BRNE   	GECIK2          	 ;SAYAC1>0 ise GECIK2 etiketine git
  	DEC    	SAYAC2           	;SAYAC2 sayacını bir azalt
    	BRNE   	GECIK1           	;SAYAC2>0 ise GECIK1etiketine git             
	RET           	          	 ;Ana programa dön.
;PROGRAMIN ADI: PROGRAM34.ASM              Tarih:10.08.2008    
;Zamanlayıcı/Sayıcı0 çıkış karşılaştırması ve 
;karşılaştırma kesmesine örnek program
.include "tn2313def.inc"	; Entegreyi tanımla
.def GECICI 	=R16  	;Çalışma saklayıcısı tanımla.
.def	LED   	=R17	;Sayaç saklayıcısı tanımla

;=========================DÜZENLEMELER=======================
.cseg
.org	0
    RJMP	RESET	;Entegreye enerji geldiğinde RESET'e git.
.org 0X0D		;Karşılaştırma kesmesi geldiğinde
    RJMP  	KARSL_KESME	;KARSL_KESME alt programına git
RESET:
	LDI   	GECICI,RAMEND  ;Yığın saklayıcısı başlangıcını    
   	OUT  	SPL,GECICI     ;belirle.

  	LDI 	GECICI, 0b11111111;PortB'yi çıkış    
 	OUT   	DDRB, GECICI  		;olarak düzenle
      
;======================== ANA PROGRAM =======================
BASLA:
	SEI		;Tüm kesmelere izin ver
	LDI 	GECICI,0B01000010; OC0A toggle çıkış(COM01:0=1)
	OUT 	TCCR0A, GECICI	; ve WGM1:0=2
	LDI 	GECICI,167	;Karşılaştırılacak 
  	OUT 	OCR0A,GECICI	;sayıyı saklayıcıya gir
	LDI 	GECICI,0B00000101 ;Frekans bölme faktörü 
	OUT 	TCCR0B, GECICI	; (prescaler)=1024 olarak düzenle.
	LDI 	GECICI,0x01	;TCNT0'ın karşılaştırma eşleşmesi 
	OUT 	TIMSK,GECICI	; kesme bitini aktif yap.
BEKLE:
	RJMP 	BEKLE	;Eşleşme (kesme) olana kadar burada bekle
KARSL_KESME:
	LDI	LED,0X50	; 01010000 verisini
	OUT 	PORTB,LED	; PORTB'ye yükle
	IN	GECICI,TCNT0	;TCNT0 .çeriğini, GECICI saklayıcısına yaz
	SBRS 	GECICI,7	;GECICI'nin 7. biti1 ise komut atla
	RJMP 	KARSL_KESME	;GECICI'nin 7. biti1 0 ise KARSL_KESME'ye git.
	LDI	GECICI,0X00	;TCNT0 Zamanlayıcı/Saklayıcı 
	OUT	TCNT0,GECICI	;içeriğini sil.
	LDI	LED,0XA0	;0xA0 verisini
	OUT 	PORTB,LED	;PORTB'ye yükle
	RETI		;Ana programa dön.
;PROGRAMIN ADI: PROGRAM50.ASM             Tarih: 19.10.2008    
;Dahili EEPROM belleğe yazma, EEPROM bellekten okuma ve 
;EEPROM belleği silmeye örnek program
.include "tn2313def.inc"	;Entegreyi tanımla
.def  	GECICI =R16  	;Çalışma 
.def	ADRES	=R17	;saklayıcılarını
.def	VERI	=R18	;tanımla
.def	SAYAC1 =R19	;Sayaç
.def	SAYAC2 	=R20   	;saklayıcılarını tanımla

;===DÜZENLEMELER ======
.cseg
.org	0X0000
	RJMP	RESET	;Enerji geldiğinde RESET etiketine git.	
RESET:
	LDI	GECICI,LOW(RAMEND); Stack adresini 
	OUT	SPL,GECICI	; RAM sonuna düzenle

	LDI	GECICI,0x00	; PORTD 'nin  
	OUT	DDRD,GECICI	; pinlerini giriş olarak düzenle 
	LDI 	GECICI,0XFF	;PORTB 'nin 
	OUT 	DDRB,GECICI	;pinlerini çıkış olarak düzenle 
	OUT 	PORTD,GECICI	;PORTD pull-up dirençleri aktif yap
	CLR	GECICI	;PORTB pinlerini
	OUT 	PORTB, GECICI	;sil

;=======ANA PROGRAM ======
BASLA:
TEST_PD6:	
	SBIC 	PIND,6	;PD6 butonuna basılı ise bir satır atla
	RJMP 	TEST_PD5	;PD6 basılı değilse TEST_PD5 etiketine git
	RCALL 	GECIKME	;Buton arkı önleme alt programını çağır.
	LDI 	ADRES,0X01	;EEPROM 1 adresini ADRES'e ata
	LDI	VERI,0B11001100 ;0XCC EEPROM verisini VERI'ye ata
	RCALL 	EEPROM_YAZ	;EEPROM'a yazma alt programını çağır.
TEST_PD5:
	SBIC	PIND,5	;PD6 butonuna basılı ise bir satır atla
	RJMP	TEST_PD0	;PD6 basılı değilse TEST_PD5 etiketine git
	RCALL GECIKME	;Buton arkı önleme alt programını çağır.
	LDI	ADRES,0X2	;EEPROM 2 adresini ADRES'e ata
	LDI	VERI,0B10101010 ;0XAA EEPROM verisini VERI'ye ata
	RCALL EEPROM_YAZ	; EEPROM'a yazma alt programını çağır.
TEST_PD0:
	SBIC	PIND,0	;PD0 butonuna basılı ise bir satır atla.
	RJMP	TEST_PD1	;PD0 basılı değilse TEST_PD1 etiketine git
	RCALL GECIKME	;Buton ark önleme programını çağır.
	LDI	ADRES,0X1	;EEPROM 1 adresini ADRES'e ata
	RCALL EEPROM_OKU	;EEPROM'dan okuma alt programını çağır. 
	RCALL GOSTER	;GOSTER alt programını çağır.

TEST_PD1:
	SBIC	PIND,1	;PD1 butonuna basılı ise bir satır atla.
	RJMP	TEST_PD2	;PD1 basılı değilse TEST_PD2 etiketine git
	RCALL GECIKME	;Buton ark önleme programını çağır.
	LDI	ADRES,0X2	;EEPROM 2 adresini ADRES'e ata
	RCALL EEPROM_OKU	;EEPROM'dan okuma alt programını çağır.	
	RCALL	GOSTER	;GOSTER alt programını çağır.

TEST_PD2:
	SBIC	PIND,2	;PD2 butonuna basılı ise bir satır atla.
	RJMP	BASLA	;PD6 basılı değilse BASLA etiketine git.
	RCALL GECIKME	;Buton ark önleme programını çağır.
	LDI	ADRES,0X1	;EEPROM verisi silinecek adresi gir.
	RCALL EEPROM_SIL	;EEPROM'dan veri silme alt programını çağır.
	RJMP BASLA	;BASLA etiketine git
	
;==================== EEPROMA YAZMA ALT PROGRAMI ============
EEPROM_YAZ:
	SBIC 	EECR,EEPE 	; Önceki yazılımın 
	RJMP 	EEPROM_YAZ	; tamamlanmasını bekle
	OUT 	EEAR, ADRES 	; EEPROM adresini ADRES ile belirle. 
	OUT 	EEDR,VERI	; EEPROM veri saklayıcısına VERI'yi yükle 
	SBI 	EECR,EEMPE 	; EEMPE bitini lojik 1 yap
	SBI 	EECR,EEPE 	; EEPE''yi lojik 1  yap. EEPROM'a yaz
	RET		;Alt programdan çık

;=============== EEPROM'DAN OKUMA ALT PROGRAMI ==============
EEPROM_OKU:
	SBIC 	EECR,EEPE	; Önceki yazma işleminin 
	RJMP  	EEPROM_OKU	; tamamlanmasını bekle
	OUT 	EEAR, ADRES	; EEPROM adresini ADRES ile belirle
	SBI 	EECR,EERE	; EERE''yi lojik 1  yap EEPROM'u oku	
	IN 	VERI,EEDR	; EEPROM veri saklayıcısını VERI'ye yükle 
	RCALL	GOSTER	;Veriyi göstermek için GOSTER alt prog. git
	RET

;===================== EEPROM SİLME ALT PROGRAMI ===========
EEPROM_SIL:
	LDI	GECICI,(1<0 ise GECIK2 etiketine git
  	DEC    	SAYAC2       	;SAYAC2 sayacını bir azalt
    	BRNE   	GECIK1        ;SAYAC2<>0 ise GECIK1etiketine git             
    	RET           	;Ana programa dön.

Kaynak http://www.altaskitap.com/dosya/ZIPLAR/atmel_programlar.rar

aciklamali-atmel-avr-attiny2313-uygulama-kodlari-asm

Şifre-Pass: 320volt.com

Yayım tarihi: 2009/06/09 Etiketler: , , , ,



Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir