Avr studio assemblerdə proqramların nümunələri. Atmel AVR mikrokontrollerlərinin montaj dilində praktiki proqramlaşdırılması

GİRİŞ Mikrokontrollerlər, onların yaranması və tətbiqi
Mikro nəzarətçilərin tarixi
Yunan üslubunda elektronika
Niyə AVR?
Sonra nə var?

BÖLÜM I. ATMEL AVR-nin DİZAYNININ VƏ FƏALİYYƏTİNİN ÜMUMİ PRİNSİPLERİ

Fəsil 1 Atmel AVR Mikronəzarətçilərinə İcmal

AVR ailələri
Xüsusiyyətlər praktik istifadə MK AVR

Fəsil 2. Ümumi tənzimləmə, yaddaşın təşkili, saatlama, sıfırlama

Proqram yaddaşı
Məlumat yaddaşı (RAM, SRAM)
Qeyri-uçucu məlumat yaddaşı (EEPROM)
Saatlama üsulları
Sıfırlayın
Əlavə xarici məlumat yaddaşının qoşulma xüsusiyyətləri

Fəsil 3. Periferik qurğulara giriş

I/O portları
Taymerlər - Sayğaclar
Analoqdan rəqəmsal çevirici
Serial portlar
UART
SPI interfeysi
TWI interfeysi (12C)
Universal serial interfeys USI

Fəsil 4 Kesintilər və Enerjiyə qənaət rejimləri

Ara verir
Fasilələrin növləri
Enerjiyə qənaət rejimləri
MK AVR istehlakı
MK AYR istehlakı və enerjiyə qənaət rejimləri

II HİSSƏ. ATMEL AVR MİKRONƏZƏRLƏRİNİN PROQRAMLANMASI

Fəsil 5. MK ailəsinin AVR-nin proqramlaşdırılmasının ümumi prinsipləri

Assembler yoxsa C?
AVR-nin proqramlaşdırılması yolları və vasitələri
Kod redaktoru
AVR Studio haqqında
Montajçının təşkili
proqramçılar
Hex faylları haqqında
Əmrlər, Təlimatlar və AVR Assambleyasının Qeydi
Rəqəmlər və ifadələr
Direktivlər və funksiyalar
AVR proqramının ümumi strukturu
Müalicəni dayandırın
RESET
Ən sadə proqram
Gecikmə
Əks proqram
Kəsiklərdən istifadə
Taymer gecikməsi
Kəsmə sayğacı proqramı
Konfiqurasiya bitləri haqqında

Fəsil 6 AVR Komanda Sistemi

Nəzarət Köçürmə Əmrləri və SREG Qeydiyyatı
Check-pass əmrləri
Məntiq Əmrləri
Shift Təlimatları və Bit Əməliyyatları
Arifmetik əməliyyatlar üçün əmrlər
Məlumat ötürmə əmrləri
Sistem İdarəetmə Əmrləri
Assemblerdə tipik prosedurların icrası
Yığın, yerli və qlobal dəyişənlər haqqında

Fəsil 7 Arifmetik əməliyyatlar

Standart arifmetik əməliyyatlar
Çoxrəqəmli ədədlərin vurulması
Çoxrəqəmli bölmə
Kəsr ədədlərlə əməliyyatlar
Təsadüfi ədəd generatoru
BCD formatında rəqəmlərlə əməliyyatlar
MK-da mənfi ədədlər

Fəsil 8 Proqramlaşdırma taymerləri

8 və 16 bit taymerlər
formalaşması dəyəri təyin edin tezliklər
Geri sayım
Dəqiq vaxt korreksiyası
Tezlik sayğacı və dövr sayğacı
Tezlik sayğacı
Periodometr
Dinamik göstərici nəzarəti
LED göstəriciləri və onların əlaqəsi
Proqramlaşdırma dinamik göstərici
PWM rejimində taymerlər

Fəsil 9 EEPROM-dan istifadə

EEPROM-da məlumatların təhlükəsizliyi haqqında bir daha
EEPROM yazın və oxuyun
EEPROM-da sabitlərin saxlanması

Fəsil 10 Analoq Comparator və ADC

Analoqdan rəqəmsal əməliyyatlar və onların xətaları
Analoq komparatorla işləmək
ADC-nin komparatora inteqrasiyası
İş prinsipi və hesablama düsturları
ADC proqramının inteqrasiyası
Quraşdırılmış ADC
ADC nümunəsi
Proqram

Fəsil 11 SPI Proqramlaşdırması

SPI vasitəsilə əsas əməliyyatlar
Avadanlıq seçimi
Proqram təminatı seçimi
Qeyri-uçucu yaddaş növləri haqqında
SPI vasitəsilə flash yaddaşı yazın və oxuyun
SPI vasitəsilə yaddaş mübadiləsi proqramı 45DB011B
Fleş kartların yazılması və oxunması
MMS kartlarının qoşulması
Komandaların verilməsi və MMC-nin işə salınması
MMS yazmaq və oxumaq

Fəsil 12. TWI interfeysi (12C) və onun praktik istifadəsi

Əsas protokol 12C
12C protokolunun proqram təminatı emulyasiyası
Xarici uçucu olmayan yaddaşa məlumatların yazılması
AT24 yaddaşı ilə rejimləri dəyişdirin
Proqram
12C interfeysli saat
Məlumat qeydi
Məlumatların oxunması

Fəsil 13 UART/USART Proqramlaşdırması

UART işə salınması
Məlumatların göndərilməsi və qəbulu
UART istifadə edərək DS1307 saatının qurulması nümunəsi
Rabitə xətalarından qorunma üsulları
Hətta paritet
Düzgün mübadiləni necə təşkil etmək olar
Əlavə xüsusiyyətlər USART
RS-232 və RS-485 interfeyslərinin həyata keçirilməsi
RS-232 üçün səviyyə çeviriciləri
RS-485

Fəsil 14 Enerjiyə qənaət rejimləri və gözətçi taymeri

Enerjiyə qənaət proqramlaşdırması
Akkumulyatorla işləyən alət nümunəsi
Proqramın dəqiqləşdirilməsi
Gözətçi taymerindən istifadə

TƏTBİQLƏR

Əlavə 1. Atmel AVR mikrokontrollerlərinin əsas parametrləri

Əlavə 2 Atmel AVR Əmrləri
Arifmetika və məntiq təlimatları
Bit əməliyyatları əmrləri
Müqayisə əmrləri
Nəzarət Transfer Əmrləri
Qeyri-şərtsiz Keç və Alt Proqram Zəng Təlimatları
Yoxlama və Şərti Filial Təlimatlarını keçin
Məlumat ötürmə əmrləri
Sistem İdarəetmə Əmrləri

Əlavə 3 Proqram mətnləri
SPI interfeysi vasitəsilə 45DB011B flash yaddaş rabitə demo proqramı
12C interfeysində mübadilə prosedurları

Əlavə 4 ilə ünsiyyət Şəxsi kompüter və UART vasitəsilə sazlama proqramları
Delphi-də COM portu ilə işləmək
COM portu və Windows API
Hazır komponentlər vasitəsilə COM ilə işləmək
DOS və Windows-da RTS xəttinin quraşdırılması
COM2000 proqramı
Terminal proqramı ilə proqramların sazlanması

Əlavə 5 Ümumi abbreviatura və terminlərin lüğəti
Rus dilində terminlərin ingilis dilinə tərcüməsi ilə uyğunluğu
İngilis dilində terminlərin rus dilinə tərcüməsi ilə uyğunluğu

Ədəbiyyat
Mövzu indeksi


Beləliklə, ümid edirəm ki, vicdanlı bir oxucu artıq bir proqramçı, eksperimental lövhə toplayıb, həmçinin tələb olunan proqram təminatını quraşdırıb konfiqurasiya edib.

İndi seriyadan ilk məqaləni yazdıqdan sonra başa düşürəm ki, bir az həyəcanlandım və "yeni başlayanlar üçün" ifadəsini qoyaraq, sələflərim kimi eyni səhvi etdim. “Assemblerdə proqramlaşdırmaya yeni başlayanlar üçün” mövzusunu formalaşdırmaq daha düzgün olardı, yəni mən hesab edirəm ki, oxucunun artıq heç olmasa mikrokontrolörün nə olduğu barədə səthi təsəvvürü var, əks halda bu, bizə lazım olan bir şeyi aparacaq. bu mövzu ilə tanış olmaq üçün çox vaxt. Onlarla tamamilə tanış olmayanlar üçün S. Ryumik-in Radioamator jurnalında (2005-ci il üçün № 1-11) dərc edilmiş, mənim fikrimcə, tamamilə gözəl olan "AVR Microcontrollers" adlı məqalə silsiləsi tövsiyə edə bilərəm. Bu dövrdə ATmega8 əsas nəzarətçi kimi seçilir, lakin ümumidir funksional vahidlər yuxarıdakı nəzarətçi və ATtiny13 praktiki olaraq eynidir.

ATtiny13 mikro nəzarət cihazı ilə birbaşa tanış olmaq üçün A.V.-nin kitabını tövsiyə edirəm. Evstifeeva "Kiçik ailənin AVR mikrokontrolleri. İstifadəçi təlimatı" (Moskva: Dodeka-XXI nəşriyyatı, 2007. - 432 s.). O, bütün kiçik kontrollerlər üçün tərcümə edilmiş və sistemləşdirilmiş məlumat cədvəllərini ehtiva edir və mənim fikrimcə, mikrokontroller proqramlaşdırması ilə məşğul olanlar üçün iş masası olmalıdır.

Bununla belə, hekayə irəlilədikcə, yazılan proqramlarda istifadə olunacaq həmin nəzarətçi qovşaqları və modulları haqqında bəzi məlumatlar verəcəyəm.

Amma bütün bunlar lirik bir kənarlaşmadır. Gəlin dərhal hekayəyə qayıdaq.

ATtiny13 nəzarətçi, kiçik ölçüsünə baxmayaraq, çox yaxşıdır funksional xüsusiyyətlər. Və az sayda nəticələr, onların hər birinin yerinə yetirdiyi funksiyaların sayı ilə əvəzlənir. Sancaqların pinout və təsviri aşağıda təqdim olunur:

Cədvəl A.V.-nin yuxarıda qeyd etdiyimiz kitabından götürülmüşdür. Evstifeev.

Gördüyünüz kimi, hər bir çıxış ən azı üç funksiyanı yerinə yetirə bilər, hətta daha çox. Əvvəlcə alternativ funksiyaları deyil, yalnız əsas olanı - rəqəmsal giriş / çıxışı nəzərdən keçirəcəyik.

Şəkil və cədvəldən göründüyü kimi, güc çıxışları istisna olmaqla, bütün çıxışlarda PB adı və ardınca seriya nömrəsi. Bu nə deməkdir? Bütün nəzarətçi çıxışları onlarla işləmək rahatlığı üçün 8 ədəd birləşdirilir və hər 8 çıxış qrupu üçün üç xüsusi giriş-çıxış registrləri ayrılır. Ümumiyyətlə, registrlər anlayışı nəzarətçilərlə işləyərkən, xüsusən assemblerdə əsasdır. Yuxarıda qeyd olunan üç reyestrdən hər birinə daha yaxından nəzər salaq. Onların hamısı nəzarətçinin yaddaşında bir baytlıq hüceyrələrdir. Onların hər bir biti nəzarətçi çıxışlarından birinə uyğundur və registrdəki bit nömrəsi çıxış nömrəsinə uyğun gəlir (məsələn, 0-cı bit PB0-ın çıxışına cavabdehdir, 1-ci - PB1 üçün və s.). Bütün registrlərin öz adı var, proqramlar yazarkən onlara istinad edilir. Bu adlar nədir?

1. DDRB reyestri hər bir nəzarətçi çıxışının məlumat ötürülməsi istiqamətinə cavabdehdir. Bu registrin hər hansı biti "0"-a bərabərdirsə, müvafiq pin giriş, "1" olarsa - çıxış olacaqdır. Üstəlik, hər bir çıxış fərdi olaraq və proqramın istənilən yerində konfiqurasiya edilir. Bu o deməkdir ki, müxtəlif şəraitlərdə və ya müxtəlif vaxtlarda eyni pin digər pinlərdən asılı olmayaraq giriş və ya çıxış kimi konfiqurasiya edilə bilər.

2. PINB registrinə daxildir Hazırki vəziyyət bütün çıxışlar: çıxışa gərginlik tətbiq edilirsə, onda müvafiq bitə məntiqi “1”, gərginlik yoxdursa, məntiqi “0” yazılır. Bu registr əsasən giriş rejimində olan pin statusunu oxumaq üçün istifadə olunur.

3. Register PORTB informasiyanın ötürülməsi istiqamətindən asılı olaraq ikili funksiyanı yerinə yetirir. Əgər pin rəqəmsal çıxış kimi işləyirsə, PORTB registrinin istənilən bitinə "1" yazmaq müvafiq pində gərginliyin görünməsinə, "0" yazılması isə gərginliyin yox olmasına səbəb olur. Beləliklə, çıxış rejimində hər bir çıxışın vəziyyətini təyin edən bu registrdir. Rejimdə rəqəmsal giriş hər hansı bir bitə məntiqi "1" yazmaq daxili açılan rezistorun müvafiq pin üzərində bağlanmasına və onu söndürmək üçün "0" yazmasına səbəb olur. Bu nədir - "çəkmə rezistoru" və bu nə üçündür? Əgər pin rəqəmsal giriş kimi çıxış edirsə, o zaman giriş tamponunun müqaviməti kifayət qədər yüksəkdir və giriş cərəyanı çox aşağıdır. Buna görə də, hər hansı bir elektrik müdaxiləsi çıxışın ixtiyari vəziyyətə kortəbii keçidinə səbəb ola bilər. Bunun baş verməsinin qarşısını almaq üçün giriş və enerji mənbəyi arasında bir neçə on kiloohm müqaviməti olan bir rezistor birləşdirilir, giriş potensialını təchizatı gərginliyinə (buna görə də adı) "yuxarı çəkir". Bu rezistordan keçən cərəyan dövrənin qalan hissəsinə müdaxilə etməyəcək qədər kiçikdir, lakin təsadüfən pin keçidinin qarşısını almaq üçün kifayət qədər böyükdür. Düymələrlə işləyərkən tez-tez açılan rezistorlardan istifadə edəcəyik, çünki onlar basılmadıqda, onların qoşulduğu sancaqlar əslində havada "asılır" və uğultuya məruz qalır.

Qeyd etmək lazımdır ki, güc verildikdə bütün registrlər 0-a sıfırlanır və hər bir pin çəkilmə rezistoru olmadan rəqəmsal giriş kimi fəaliyyət göstərir.

İndi nəzarətçi girişləri ilə işləmək üçün NƏLƏR haqqında bir fikrimiz var, onlarla NECƏ işləməyi öyrənməyin vaxtı gəldi.

Gəlin birincimizi yazaq iş proqramı assemblerdə. Əvvəlcə yeni bir layihə yaratmaq üçün tam bir alqoritm verəcəyəm, lakin gələcəkdə yalnız proqram mətninin özündə dayanaraq onu buraxacağam.

1. Asm qovluğuna keçin, orada yeni qovluq yaradın. Adını bizim üçün uyğun olan bir adla dəyişdirin. Dəqiqlik üçün onları addımımızın nömrəsi ilə çağıracağam. Bu vəziyyətdə "addım 2".

2. Sağ klikləyin build.bat faylına klikləyin və mənbə fayl yolunu yeni yaradılmış qovluğa dəyişin (addım 2). Bundan sonra məzmunum belə görünür:

"F:\Prog\AVR\asm\avrasm32 -fI %F:\Prog\AVR\asm\step2\main.asm
fasilə"

Arxivi harada açdığınızdan asılı olaraq sizin üçün fərqli ola bilər.

3. Asmedit qovluğuna keçin və ASM_Ed.exe proqramını işə salın

4. Açılan pəncərədə proqramın mətnini yazın. Bugünkü dərsimizdə də, sonrakı dərslərimizdə də əsas olduğu üçün bu məqam üzərində daha ətraflı dayanacağam.

Montaj proqramının mətni nədir? Müəyyən qaydalara uyğun olaraq yazılmış bir neçə elementdən ibarət ola bilər:

Təlimatın sintaksisindən asılı olaraq operandlı və ya operandsız montaj təlimatları. Komanda adı ilə birinci operand arasında ya boşluq, ya tab, ya da hər ikisinin istənilən sayı olmalıdır. Operandlar vergüllə ayrılır, ondan əvvəl və sonra ixtiyari sayda boşluq və ya nişanlar ola bilər;

Hər biri "." simvolu ilə başlayan direktivlər;

Proqramda istifadəçi tərəfindən özbaşına adlandırılan və naviqasiya edilməli olan yerlər olan etiketlər. Hər bir etiket ":" simvolu ilə bitir;

";" ilə başlayan şərhlər. Şərhin əvvəlindən sətrin sonuna qədər bütün mətn hex faylı yaratarkən nəzərə alınmır və tamamilə ixtiyari ola bilər;

Proqramın daha yaxşı strukturu və oxunaqlılığı üçün boş xətlər.

Hər sətirdə ən çox bir əmr ola bilər. Bununla belə, sonrakı əmr və şərh ilə bir sətirdə etiketin eyni vaxtda olmasına icazə verilir.

Bu qaydalardan istifadə edərək, SB1 düyməsi basıldıqda LED2-ni yandıracaq, düymə buraxıldıqda isə onu söndürəcək proqram yazacağıq. Proqramın mətni aşağıda göstərilir:

.daxil edin "F:\Prog\AVR\asm\Appnotes\tn13def.inc"
sbi DDRB, 4 ;РВ4 - çıxış (LED2)
sbi PORTB, 2; PB2-də açılan rezistoru yandırın (SB1 düyməsi)
sbic PINB, 2 ;Əgər PB2=0 (düymə basılıbsa), sonrakını keçin. simli
sbi PORTB, 4 ;PB4 1-ə təyin edildi (LED sönülü)
sbis PINB, 2 ;Əgər PB2=1 (düymə buraxılıb), növbətini keçin. simli
cbi PORTB, 4 ;PB4-ü 0-a təyin edin (LED aktiv)

Gəlin bunu daha ətraflı təhlil edək. Birinci sətir yuxarıdakı qaydalara uyğun olaraq əvvəlində nöqtə ilə yazılmış "daxil et" direktivindən ibarətdir. Onun məqsədi ondan sonra göstərilən faylı proqram mətninə daxil etməkdir. İlk addımda dediyim kimi, bizə "tn13def.inc" faylı lazımdır. Bu sətirdə, kompüterinizdə Appnotes qovluğunun yerinin yolunu dəyişdirməlisiniz. Niyə bu faylı daxil etməliyik? Maraqlı bir oxucu ona baxa və məzmununu oxuya bilər, lakin çox güman ki, əvvəlcə orada çox az şey başa düşəcəklər. Bu arada onu deyim ki, o, assemblerin default olaraq bilmədiyi registr adlarının kontrollerdəki fiziki ünvanları ilə uyğunluğunu ehtiva edir.

Aşağıdakı sətirlər assembler əmrləridir. Diqqətli oxucu dörd olduğunu görəcək müxtəlif əmrlər. Gəlin hər birinin məqsədinə baxaq.

sbi təlimatının iki operandı var: birincisi registr adı, ikincisi bit nömrəsidir. Onun icrası nəticəsində göstərilən registrdə göstərilən bit "1"-ə təyin olunur.

cbi əmri sintaksis baxımından yuxarıdakılara bənzəyir və tam əks funksiyanı yerinə yetirir - göstərilən registrdə göstərilən biti "0" vəziyyətinə qaytarır.

Sbis əmri də sintaksis baxımından yuxarıdakılara bənzəyir. Lakin onlardan fərqli olaraq, registrlərlə heç bir əməliyyat yerinə yetirmir, yalnız göstərilən registrdə göstərilən bitin vəziyyətini yoxlayır və "1"ə bərabərdirsə, əmrdən sonra sətri keçir. Əks təqdirdə, ondan sonrakı sətir, ondan sonrakı bütün qalanlar yerinə yetirilir.

sbis əmri sbis əmrinin əksidir. Göstərilən registr biti "0" olarsa, o, növbəti sətri keçir.

İndi yuxarıda göstərilənlərin hamısını yekunlaşdıraraq, proqramın alqoritmini anlamağa çalışaq. Başlamaq üçün, mən bunu hərfi mənada sətir-sətir edəcəyəm.

1 xətt. Daxil etmə direktivinə registr təriflərini ehtiva edən tn13def.inc faylı daxildir.

2 xətt. sbi əmri DDRB registrinin 4-cü bitində "1" təyin edir və bununla da PB4 pinini çıxışa keçir. Lövhənin diaqramına baxsanız (əvvəlki addımın 1-ci şəkli), LED2-nin bu pinlə bağlı olduğunu görə bilərsiniz. Əmr və işarədən sonra ";" sətirdə yerinə yetirilən hərəkətlərin mənasını qısaca izah edən şərh yazılır.

3 xətt. Eyni sbi əmri PORTB registrinin 2-ci bitində "1" təyin edir, daxili çəkilmə rezistorunu SB1 düyməsinin qoşulduğu PB2 pininə birləşdirir. DDRB registrinin 2-ci bitinin vəziyyətini dəyişmədiyimizə görə, bu pin giriş olaraq qalacaq, bu da bizə lazım olan şeydir.

4 xətt. sbic əmri PINB registrindən istifadə edərək PB2 girişində məntiqi "0" varlığını yoxlayır. Diaqrama diqqətlə baxsanız, düymələrin basıldıqda müvafiq çıxışı ümumi bir tel ilə bağladığını görə bilərsiniz. Bu, standart bir texnikadır, çünki düyməni buraxdıqda, çəkilmə rezistoru səbəbindən çıxışda məntiqi "1" olur və düyməni basdıqda, məntiqi "0" əlaqəsi səbəbindən görünür. ümumi naqilə çıxış. Belə ki, əgər PB2 çıxışında məntiqi “0” varsa, yəni düymə sıxılırsa, növbəti sətri keçirik, düymə buraxılıbsa, o zaman onu icra edirik.

5 xətt. Orada sbi əmri PORTB registrinin 4-cü bitində məntiqi "1" təyin edir və bununla da LED2-ni söndürür. Aşındırıcı bir oxucu, çıxışa gərginlik tətbiq etsək, LED-in niyə söndüyü ilə maraqlana bilər. Cavab diaqramdadır. LED-in anodu elektrik naqilinə, katod isə nəzarətçinin çıxışına bağlıdır. Buna görə, çıxışa bir gərginlik tətbiq edilərsə, anod və katodun potensialları bərabərləşəcək və LED sönəcəkdir. Çıxışa məntiqi "0" verilirsə, o zaman LED-ə gərginlik tətbiq olunacaq və o, yanacaq. Beləliklə, bir cüt sətir 4 və 5 düyməni buraxdıqda LED2 LED-ni söndürür.

6 xətt. Məna baxımından 4-ün əksinə. Sbis əmri PB2 girişində məntiqi "1"in olub-olmadığını yoxlayır, yəni düymənin buraxılıb-boşalmadığını yoxlayır. Düymə buraxılarsa, növbəti sətir atlanır və növbəti sətirə atlanır. Amma 7-ci sətir sonuncu olduğu üçün 2-ci sıraya keçir. Düymə sıxılırsa, 7-ci sətir yerinə yetirilir.

7 xətt. 5-ci ilə üzbəüz. Cbi əmri ilə PORTB registrinin 4-cü biti "0" vəziyyətinə qaytarılır və bununla da LED2 yandırılır. Beləliklə, SB1 düyməsinə basıldıqda bir cüt xətt 6 və 7 LED2 LED-i yandırır.

Gördüyünüz kimi, biz xüsusilə çətin bir iş görmədik. Yalnız 3 registr və 4 təlimat biliklərindən istifadə edərək ilk proqramımızı yazdıq. Bundan sonra onunla nə etmək lazımdır. Əgər unutmamısınızsa, proqram yaratmaq üçün alqoritm yazmağa davam edirik.

5. Proqramın mətnini redaktor pəncərəsində yazdıqdan sonra “Fayl” menyusunu seçin və açılan siyahıda “Farklı Saxla...” düyməsini sıxın. Saxlama faylı pəncərəsində yaratdığımız step2 qovluğunu seçin və fayl adını "əsas" təyin edin, çünki bu ad bizim tərəfimizdən "build.bat" faylında göstərilmişdir.

Saxladıqdan sonra proqram pəncərəsi belə görünməlidir:

6. Hex faylı yaradın. Bunun üçün alətlər panelində "II" düyməsini sıxmaq lazımdır. Aşağıdakı pəncərə görünməlidir:

Bu, montajın səhvsiz getdiyini və "main.hex" proshivka faylının 6 söz, yəni 12 bayt həcmində yaradıldığını bildirir. Qeyd edim ki, C dilində oxşar proqramın həcmi ən azı 5 dəfə çox olardı.

7. Step2 qovluğuna daxil olduqdan sonra biz orada yeni yaradılmış main.hex faylı şəklində bir əlavə tapırıq ki, onu indi istənilən proqramçı nəzarətçiyə tikə bilər ki, bu da proqramın nəticələrini görmək üçün edilməlidir. yazdığımız proqram. Nəzarətçi yanıb-söndükdən sonra, dövrə düzgün yığılıbsa, hər şey bizim hazırladığımız alqoritmə uyğun işləməlidir: düymələr buraxıldıqda LED2 LED sönməlidir və SB1 düyməsi basıldıqda yanmalıdır.

Növbəti addımdan əvvəl aşağıdakı tapşırıqları yerinə yetirməyi təklif edirəm:

1. Proqrama əks alqoritmlə SB2 düyməsini basmağın işlənməsini əlavə edin: SB2 düyməsi buraxıldıqda LED1 LED-i yanmalı, basıldıqda isə sönməlidir.

2. LED2-ni hər iki düymə ilə idarə etmək üçün proqram yazın. SB1 düyməsinə basıldıqda, LED yanmalı və SB2 düyməsi basılana qədər yanmalı, bu isə növbəti SB1 basılana qədər onu söndürür.

Hər kəs Axşamınız xeyir! “Assembler” adlı rahat dünyadan yayım edirəm. Mövzunun nədən ibarət olduğunu izah edim. AVR mikro nəzarətçiləri- və mən hələ bilmirəm bu yazı assemblerdən başqa iş üçün istifadə etmək istəyənlər üçün faydalı olacaqmı. Fakt budur ki, cəmi bir neçə gün əvvəl assembler-i sıfırdan öyrənməyə başladım - bir cihaz düzəltməlisən - və mən hər şeyi özüm etmək qərarına gəldim. Beləliklə, bir gün mən bunu başa düşdüm assembler öyrənmək tamamilə faydasızdır! Assembler yalnız başa düşülə bilər! Yəni, assemblerdə proqramlaşdırmaq istəyənlərin hamısına mikrokontrollerin FİZİKİ necə işlədiyini ətraflı başa düşməyi və sonra əmrlərin incəliklərini öyrənməyi şiddətlə tövsiyə edirəm.
Beləliklə, yəqin ki, əvvəldən danışacağım kiçik bir sıra məqalələrə başlayacağam necə dəqiq Assembly dili proqramlaşdırmada bəzi şeyləri başa düşdüm - düşünürəm ki, ASM-in nə olduğunu ümumiyyətlə başa düşməyənlər üçün bu məsələdə çox yaxşı qarışanların dilindən belə bir "tərcüməçi" olacağam.

Dərhal deməliyəm ki, mən az-çox bu mövzuya DIHALT-ın təklifi ilə daxil oldum - buna görə də bu məqalələr super-duper-montaj-mikrokontroller dilindən əksər insanlar üçün başa düşülən dilə bir növ tərcümə olacaq. Yaxşı, ümid edirəm ki, gurular tamaşanın gedişində məni düzəldəcəklər və birdən bir şeyi səhv izah etsəm, məni düzəldəcəklər.
Beləliklə, bir neçə gün əvvəl assembler haqqında verdiyim ilk nəticələr məni kökündən sarsıtdı - və mən 23: 00-dan səhər 5-ə qədər DI HALT məqalələrində oturdum - bundan sonra məmnun və xoşbəxt yatağa getdim. mikrokontrollerlər üçün montaj dili proqramlaşdırma.
Bunu daha sadə necə izah etmək olar? Məncə, biz əsasdan başlamalıyıq.
***
Əvvəlcə texniki detallara girməyəcəyik (bunlar haqqında növbəti məqalədə danışacağıq) - sadəcə 3 simvol olduğunu təsəvvür edin:
1. Mikrokontroller - bu rusa gələn ingilis Stivdir. O, mükəmməl bilir Ingilis dili, amma rus dilində heç başa düşmür - bir kəlmə belə. Yalnız ingiliscə. O, mübahisəni uduzdu və rusun ondan tələb etdiyi hər şeyi dolayısı ilə edəcəyinə söz verdi.
2. Montajçı - bu tərcüməçi Vasyadır, anası ingilis, atası rusdur. O, həm ingilis, həm də rus dillərini mükəmməl bilir.
3.Biz - bu bir ingilisin ziyarət etdiyi rusdur. Yaxşı, yəni biz bizik =) Eyni zamanda, biz rus dilini mükəmməl bilirik və (!!!) bir az ingilis dilini - bir az, lüğətlə.
***
Bu vəziyyəti təsəvvür edin - bir ingilis sizin otağınızda stulda oturub. Siz isə kompüterinizin arxasında oturub bu yazını oxuyursunuz, birdən pəncərəniz açıldı! Bu bədbəxtlikdir! Külək əsir, pərdə yelkənə çevrildi... Onu bağlamaq yaxşı olardı! Ancaq stuldan qalxmaq, ayaqlarınızı sistem blokundan çıxarmaq, başmaqlara doldurmaq, bir fincan qəhvə (pivə) kənara qoymaq və elementlərlə mübarizə aparmaq nə qədər tənbəldir. Və sonra birdən başa düşürsən ki, otaqda maşın sürmək vaxtıdır! Və ona çox gözəl deyirsən: “Dostum! Pəncərəni bağlayın, zəhmət olmasa, sonra yenidən stulda əyləşə bilərsiniz!” və oturur, çaşqınlıqla sənə baxır və heç nə etmir! Əlbətdə ki, kələm şorbasını vura bilərsiniz - amma sonra yenə də sizi başa düşməyəcək! Sonra dostunuz-tərcüməçiniz Vasilini çağırırsınız - o, gəlib ingilisin yanında stulda oturur. Və deyirsən - Tərcümə et: "Stiv, get pəncərəni bağla, sonra stulda otur!" Tərcüməçi ingilis dilinə tərcümə edir - ingilis başa düşür və pəncərəni bağlamağa gedir, sonra gəlib stulda oturur.
Bu nöqtədə sadəcə "Biz-Assembler-Nəzarətçi" zəncirində assemblerin rolunu başa düşməlisiniz.
Yəni hamı montajçının nə olduğunu necə başa düşəcək? Sonra oxuyuruq.
***

Beləliklə, belə bir vəziyyəti təqdim edirik. Siz Vasyaya deyirsiniz - "Qulaq as, yaxşı, bir sözlə, belə bir şey var - mən evdə kalkulyatoru unutmuşam, 56983-ü 2-yə bölün və Stivə yumruqlarında dəfələrlə təkan verməsini söyləyin" və Vasya kalkulyatora hesablayır və Stivə ingiliscə deyir: “28491 dəfə yumruqlarınızı itələyin” Bu adlanır "DİREKTİV"- başqa sözlə, direktiv Vasya üçün bir tapşırıqdır, nəticəsi Stivin hərəkətidir.

Başqa bir vəziyyət də var – siz Vasyaya “Stivə 28491 təkan qaldırmasını deyin” deyirsiniz və Vasya sadəcə olaraq sözlərinizi ingilis dilinə çevirir. Bu adlanır OPERATOR

Hər şey sadədir - direktiv var və operator var. Operator sizin Stivə nə etmək barədə birbaşa göstərişinizdir - burada Vasya tələbinizi yalnız ingilis dilinə tərcümə edir. Direktiv Vasyanın özü üçün bir tapşırıqdır - və Vasya əvvəlcə ona dediklərini edir, sonra nəticədən asılı olaraq Stivə nəsə deyir.

İndi ingilisə müntəzəm olaraq işgəncə verəcəyik! Ancaq əvvəlcə tərcüməçimiz Vasyanı daha yaxından tanımalısan. Aşağıdakıları bilməlisiniz - Vasya həmişə sizə üstüörtülü şəkildə tabe olur - ona nə deyilsə, o da edir. Vasyanın kalkulyatorunda onluq yer yoxdur - nümunəyə təkanlarla baxırsınızsa, onda 56983 \ 2 = 28491,5 - ancaq Vasya onluqdan sonra hər şeyi kəsir - və o, yalnız tam ədəd görür - və fərqi yoxdur 28491.000001 olacaq və ya 28491.9999999 olacaq - Vasya üçün bu bir əncir hər iki halda 28491 olacaq. Heç bir şey yuvarlaqlaşdırılmır. Daha çox mühim informasiya Vasya haqqında. Vasya qəddardır - Stivin iyirmi səkkiz min dəfə təkanla qaldırma hərəkətindən yorulmasına əhəmiyyət vermir. Ona dedilər - Vasya tərcümə etdi. Və nəinki tərcümə etdi - həm də xahiş etdiyinizi etməyə məcbur oldu. Beləliklə, əgər Stiv iyirmi üç min beş yüz on üçüncü təkanla ölürsə, bu, tamamilə sizin günahınız olacaq.

Əslində, hələlik bu qədər. Növbəti yazıda daha da dərinləşəcəyik - hələlik bunu başa düşmək kifayətdir. Sadəcə bu vəziyyəti təsəvvür edin və nəyin nə olduğunu, kimin hansı rolu oynadığını və direktivin operatordan nə ilə fərqləndiyini anlayın.
Və sonra biz hər şeyi öz adı ilə çağırmağa çalışacağıq və assemblerin böyüklər kimi mikrokontrollerlə necə işlədiyini təqribən anlamağa çalışacağıq.

Assemblerdə yazılmış məşhur Tetrisin klonu. O, tamamilə 512 bayt yükləmə sektoruna uyğun gəlir (yalnız 446 bayt yer lazımdır, bu MBR-də yükləyicinin maksimum ölçüsüdür).

MBR - əməliyyat sisteminin sonrakı yüklənməsi üçün lazım olan kodu və məlumatları ehtiva edən və ilk fiziki sektorlarda yerləşən bölmə. Diskin ilk 446 baytı yükləyici koduna verilir. Məhz bu yerdə TetrOS qeyd olunur.

Təbii ki, bu cür xüsusiyyətlərə görə hər hansı bir şeydən əvvəl yüklənir əməliyyat sistemi- heç bir OS tələb etmir, özü işləyir. Bəli, düz eşitdiniz, TetrOS özünün yükləyicisidir.

Ekranda belə görünür:

Və açılış sektorundakı mənbə belə görünür:

Və bəli bütün mənbə. Yalnız 446 bayt ağırlığında olduğunu xatırlayırsınız?

Siz bu "möcüzəli əməliyyat sistemini" qemu altında işlədə və ya hətta onu diskin və ya flash sürücünün yükləmə bölməsinə quraşdıra bilərsiniz.

işə salmaq

Sadəcə qemu quraşdırın:

sudo apt-get quraşdırma qemu

və qaç:

Flash sürücüyə yükləyin

Şəkli bir flash sürücüyə kopyalayın. Tutaq ki, əgər flash sürücü /dev/sde kimi quraşdırılıbsa, ona yazmaq üçün aşağıdakı əmri yerinə yetirməlisiniz. açılış sektoru TetrOS:

sudo dd if=tetros.img of=/dev/sde

Oyun Təsviri

Tərtibatçı ən darıxdırıcı dizaynı cəmi 512 bayt yaddaşa yerləşdirməyi bacardı. Oyundakı hər bir kərpicin öz rəngi var, idarəetmə düymələr vasitəsilə həyata keçirilir, məğlubiyyət halında oyun başa çatır, kərpiclər təsadüfi şəkildə əmələ gəlir... BolgenOS hətta yaxın deyildi!

Təəssüf ki, ölçüsünə görə bəzi xüsusiyyətlərdən imtina edilməli oldu. Oyunda heç bir xal yoxdur, oyunu yenidən yükləmədən yenidən başladın və növbəti kərpicin nə olacağını göstərin.

Adı: Assembly dili 2 nəşrində Atmel AVR mikro nəzarətçilərinin praktiki proqramlaşdırılması

Nəşriyyatçı:"BHV-Peterburq"

Nəşr ili: 2011

Səhifələr: 354

Dil: rus

Format: Djvu

Ölçü: 12.2 MB

Atmel AVR mikrokontrollerlərinin işləmə prinsipləri, arxitektura xüsusiyyətləri və proqramlaşdırma üsulları üst-üstə düşür.

Müasir mikroelektronik avadanlıqların əsas funksiyalarının proqramlaşdırılması üçün hazır reseptlər verilmişdir: reaksiyadan düyməni basmağa və ya dinamik göstərici qurmağa qədər məlumatların xarici yaddaşa yazılması üçün mürəkkəb protokollara və ya real vaxt saatının qoşulma xüsusiyyətlərinə qədər. Xüsusi diqqət mikroelektron cihazların fərdi kompüterlə məlumat mübadiləsinə verilir, proqram nümunələri verilir. Kitabın xüsusiyyətləri müasir modellər AVR və son buraxılış illərinin əlaqəli çipləri.
Tətbiqdə AVR mikrokontrollerlərinin əsas parametrləri, əmrlərin və mətnlərin siyahısı var Tətbiqlərdə AVR mikrokontrollerlərinin əsas parametrləri, əmrlərin siyahısı və onlar üçün proqram mətnləri, həmçinin istifadə olunan terminlər və qısaltmaların siyahısı var.
Tələbələr, mühəndislər və radio həvəskarları üçün

7. Mikrokontrollerlər, onların yaranması və tətbiqi
8. Mikrokontrollerlərin tarixi
10. Yunan üslubunda elektronika
12. Niyə AVR?
14. Növbəti nə var?
17. L BÖLÜM ATMEL AVR-nin DİZAYNININ VƏ FƏALİYYƏTİNİN ÜMUMİ PRİNSİPLERİ
19. Fəsil 1. Atmel AVR mikro nəzarət cihazlarının icmalı
21. AVR ailələri
23. MK AVR-nin praktiki istifadəsinin xüsusiyyətləri
23. İstehlak
25. AVR-nin sxemlərdə istifadəsinin bəzi xüsusiyyətləri
27. Fəsil 2. Ümumi aranjıman, yaddaşın təşkili, saatlama, sıfırlama
27. Proqram yaddaşı
29. Məlumat yaddaşı (RAM, SRAM)
31. Qeyri-uçucu məlumat yaddaşı (EEPROM)
32. Zamanlama üsulları
34. Sıfırlayın
37. Fəsil 3. Periferik qurğulara giriş
38. Giriş/çıxış portları
39. Taymerlər-sayıcılar
41. Analoqdan rəqəmsal çevirici
42. Serial portlar
43. UART
46. ​​SPI interfeysi
50. TWI interfeysi (I2C)
50. USI universal serial interfeysi
53. Fəsil 4. Fasilələr və enerjiyə qənaət rejimləri
53. Ara verir
57. Fasilələrin növləri
58. Enerjiyə qənaət rejimləri
61. II HİSSƏ. ATMELAVR MİKRONƏZƏRLƏRİNİN PROQRAMLANMASI
63. Fəsil 5. MK ailəsinin AVR-nin proqramlaşdırılmasının ümumi prinsipləri
63. Assembler yoxsa C?
67. AVR-nin proqramlaşdırılması yolları və vasitələri
67. Kod redaktoru
68. AVR Studio haqqında
70. Montajçının təşkili
71. Proqramçılar
75. Hex faylları haqqında
78. AVR assemblerin əmrləri, göstərişləri və qeydləri
79. Rəqəmlər və ifadələr
80. Direktivlər və funksiyalar
84. AVR proqramının ümumi strukturu
85. Fasilələrin idarə edilməsi
89. RESET
90. Ən sadə proqram
92. Gecikmə
94. Əks proqram
96. Kəsiklərdən istifadə
97. Gecikmə taymeri
98. Kesintilərdən istifadə edən əks proqram
101. Konfiqurasiya bitləri haqqında
105. Fəsil 6, AVR Komanda Sistemi
105. Ötürmə komandalarına nəzarət edin və SREG-i qeyd edin
111. Check-pass əmrləri
113. Məntiqi əməliyyatların əmrləri
114. Shift Təlimatları və Bit Əməliyyatları
116. Arifmetik əməllərin əmrləri
118. Məlumatların ötürülməsi əmrləri
122. Sistemin idarəetmə əmrləri
123. Assemblerdə tipik prosedurların yerinə yetirilməsi
125. Stek, lokal və qlobal dəyişənlər haqqında
127. Fəsil 7. Arifmetik əməllər
128. Standart arifmetik əməllər
129. Çoxrəqəmli ədədlərin vurulması
131. Çoxrəqəmli ədədlərin bölünməsi
134. Kəsir ədədlərlə əməllər
136. Təsadüfi ədədlər generatoru
138. BCD formatında ədədlərlə əməliyyatlar
143. MK-da mənfi ədədlər
147. Fəsil 8. Taymerlərin proqramlaşdırılması
147. 8 və 16 bitlik taymerlər
149. Təyin olunmuş tezlik qiymətinin formalaşması
153. Geri sayım
158. Dəqiq vaxt korreksiyası
160. Tezlik sayğacı və dövr sayğacı
160. Tezlik ölçən
164. Periodometr
167. Dinamik göstəricilərə nəzarət
168. LED göstəriciləri və onların əlaqəsi
171. Dinamik göstəricinin proqramlaşdırılması
174. PWM rejimində taymerlər
179. Fəsil 9. EEPROM-dan istifadə
179. Bir daha EEPROM-da məlumatların təhlükəsizliyi haqqında
181. EEPROM yazın və oxuyun
183. EEPROM-da sabitlərin saxlanması
187. Fəsil 10. Analoq komparator və ADC
187. Analoq-rəqəm əməliyyatları və onların xətaları
190. Analoq komparatorla işləmək
193. ADC-nin komparatorda inteqrasiyası
194. İş prinsipi və hesablama düsturları
198. ADC proqramının inteqrasiyası
201. Daxili ADC
204. ADC-dən istifadə nümunəsi
206. Proqram
215. Fəsil 11 SPI Proqramlaşdırma
215. SPI vasitəsilə əsas əməliyyatlar
216. Aparat variantı
218. Proqram seçimi
219. Qeyri-sabit yaddaşın növləri haqqında
221. SP vasitəsilə flash yaddaşın yazılması və oxunması!
224. SPI vasitəsilə 45DB011B yaddaşı ilə mübadilə proqramı
225. Fleş kartların yazılması və oxunması
225. MMS kartlarının qoşulması
228. Komandaların verilməsi və MMC-nin işə salınması
232. MMC-nin yazılması və oxunması
237. Fəsil 12. TW1 (I2C) interfeysi və onun praktik istifadəsi
237. Əsas Protokol 1 2 C
240. I 2 C protokolunun proqram təminatının emulyasiyası
241. Xarici qeyri-sabit yaddaşa verilənlərin yazılması
241. AT24 yaddaşı ilə mübadilə rejimləri
243. Proqram
247. I 2 C interfeysli saat
255. Məlumatların qeydə alınması
259. Məlumatların oxunması
261. Fəsil 13. UART/USART Proqramlaşdırma
262. UART-ın işə salınması
263. Məlumatların göndərilməsi və qəbulu
266. UART istifadə edərək DS1307 saatının qurulması nümunəsi
271. Rabitə xətalarından qorunma üsulları
271. Paritetin yoxlanılması
273. Mübadiləni düzgün təşkil etmək
274. USART-ın əlavə xüsusiyyətləri
276. RS-232 və RS-485 interfeyslərinin həyata keçirilməsi
280. RS-232 üçün səviyyə çeviriciləri
283.RS-485
285. Fəsil 14. Enerjiyə qənaət rejimləri və gözətçi taymeri
286. Enerjiyə qənaət rejiminin proqramlaşdırılması
287. Akkumulyatorla işləyən alət nümunəsi
289. Proqramın dəqiqləşdirilməsi
293. Gözətçi taymerindən istifadə
299. ƏLAVƏLƏR
301. Əlavə 1. Atmel AVR mikrokontrollerlərinin əsas parametrləri
309 Əlavə 2 Atmel AVR Əmrləri
310. Arifmetik və məntiqi əmrlər
311. Bit əməliyyatı əmrləri
312. Müqayisə əmrləri
313. Nəzarətin ötürülməsi əmrləri
313. Şərtsiz keçid və alt proqramların çağırılması üçün təlimatlar
314. Check-skip əmrləri və şərti keçid əmrləri
315. Məlumatların ötürülməsi əmrləri
316. Sistemin idarəetmə əmrləri
317. Əlavə 3. Proqramların mətnləri
317. SPI interfeysi vasitəsilə 45DB011B flash yaddaşı ilə məlumat mübadiləsi üçün nümayiş proqramı
321. I2C interfeysi üzərindən mübadilə prosedurları
329. Əlavə 4. UART vasitəsilə fərdi kompüter və sazlama proqramları ilə məlumat mübadiləsi
329. Delphi-də COM portu ilə işləmək
335. DOS və Windows sistemlərində RTS xəttinin quraşdırılması
337. COM2000 proqramı
339. Terminal emulyatoru ilə proqramların sazlanması
341. Əlavə 5. Ümumi abbreviatura və terminlərin lüğəti
347. Ədəbiyyat
349. Mövzu indeksi