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
Şifre-Pass: 320volt.com
Yayım tarihi: 2009/06/09 Etiketler: atmel avr projeleri, atmel eeprom, attiny2313 proje, avr attiny uygulama, avr zamanlayıcı