Mündəricat:
2025 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2025-01-13 06:56
8051 (MCS-51 olaraq da bilinir) 80-ci illərin MCU dizaynıdır və bu gün də populyar olaraq qalır. Müasir 8051-ə uyğun mikrokontrollerlər, hər cür forma və ölçüdə və bir çox periferik qurğuya malik bir çox satıcıdan əldə edilə bilər. Bu təlimatda Atmel -dən AT89C2051 MCU -ya baxacağıq.
AT89C2051 kiçik (2Kbayt Flash, 128bayt RAM), ucuz (çip başına ~ 1,40 dollar) mikro nəzarətçidir.
- 2.7-6V işləmə
- 15 I/O xətti
- 2 taymer (16 bit)
- Daxili və xarici fasilələr
- UART
- Çipdəki analog müqayisə cihazı
- 24MHz saat ilə 2MIPS -ə qədər
Addım 1: Tələblər
Tələblər:
- Linux PC (tələb olunan proqram: Arduino IDE, git, make, sdcc)
- Arduino UNO
- AT89C2051 çipi (DIP20 paketi)
- 20 pinli ZIF yuvası
- Optocoupler (tercihen MOSFET çıxışı)
- Arduino prototip qalxan
- 12V enerji təchizatı
- 5V enerji təchizatı
- 16MHz kristal osilator
- 2 x 30pF kondansatör
- 100nF kondansatör
- Diod (məsələn: 1N400X)
- Rezistorlar (1K, 3K3)
- Protoboard
- Tullananlar
- Mis tel
Lazımi proqramı yoxlayın:
hansı python3
hansı sdcc hansı git
Addım 2: Proqramçı qurmaq
Bir müddət əvvəl proqramlaşdırma qalxanımı qurduğum üçün bu bölmə qısa olacaq. Quraşdırılmış lövhənin sxemini və şəkillərini əlavə etdim. Şematik PDF -ni depoda tapa bilərsiniz.
Proqramçı lövhəsini proqramlaşdırmalısınız:
1. Anbarı klonlaşdırın.
git klonu
2. Arduino IDE -də AT89C2051_programmer/AT89_prog/AT89_prog.ino faylını açın.
3. Arduino IDE -dən eskiz yaradın və yükləyin.
Addım 3: Proqramçı Proqramının Qurulması
1. Python virtual mühiti yaradın.
python3 -m venv venv
. venv/bin/aktivləşdirin
2. at89overlord qurun. at89overlord, mənim yazdığım AT89C2051 çipi üçün açıq mənbə proqramçısıdır. Mənbə kodunu burada tapa bilərsiniz.
pip at89overlord -a quraşdırın
3. Quraşdırmanı yoxlayın.
at89 ağası -h
Addım 4: Çipin proqramlaşdırılması
1. Sadə bir göz qırpma layihəsini klonlayın.
cd ~
git klonu https://github.com/piotrb5e3/hello-8051.git cd hello-8051/
2. Tətbiqi qurun.
etmək
3. Arduino -nu PC -yə qoşun, 12V -luq şəbəkəyə qoşun, AT89C2051 çipini ZIF yuvasına yerləşdirin.
4. Arduinonun seriyalı limanını tapın.
ls /dev /tty*
5. Qurulmuş IntelHex faylını çipə yükləyin. Arduino portunuz /dev /ttyACM0 -dan fərqlidirsə, -p əmr satırı parametri ilə düzgün dəyəri verməlisiniz.
at89verlord -f./hello.ihx
Addım 5: Montaj
Dövrəni sxematik şəkildə yığın. PDF versiyasını depoda tapa bilərsiniz.
Təxminən 0,5 Hz tezlikli yaşıl LED flaşını görməlisiniz.
Addım 6: Kodun izahı
#daxil edin
#daxil edin
Sdcc -dən AT89X051 başlığını daxil etməklə başlayırıq. Qeydlər ilə sanki dəyişən kimi qarşılıqlı əlaqə qurmaq üçün makrolar var. Uint8_t və uint16_t tam ədəd növlərinin təriflərini ehtiva edən stdint.h də daxildir.
// Osilatörün 16 MHz olduğunu düşünürük
5208
Timer0 daşdıqda bir fasilə yaranır. Tək 8 bitlik bir taymer kimi qurulmuşdur, buna görə də hər 2^8 prosessor dövrü olur. Bir prosessor dövrü 12 saat dövrü alır və beləliklə 16000000/12/2^8 = 5208.33333 -ə çatırıq.
uçucu uint8_t led_state = 0;
uçucu uint16_t timer_counter = INTERRUPTS_PER_SECOND;
Lider dövlət nəzarətini elan edirik və sayğac dəyişənlərini kəsirik.
boş Timer0_ISR (void) _ ara vermə (1) {
timer_counter--; əgər (timer_counter == 0) {led_state =! led_state; timer_counter = INTERRUPTS_PER_SECOND; }}
Timer0 hər dəfə aşanda sayğac azalır. Sıfıra bərabərdirsə, sıfırlanır və led vəziyyəti dəyişdirilir. Bu, saniyədə təxminən bir dəfə baş verir, nəticədə ~ 0.5Hz LED yanıb -sönmə tezliyi ilə nəticələnir.
int main () {
TMOD = 0x3; // Taymer rejimi - 8 bit, əvvəlcədən ölçən yoxdur. freq = OSCFREQ/12/2^8 TL0 = 0; // Təmiz sayıcı TH0 = 0; // Təmiz qeyd TR0 = 1; // Taymeri işə salın. ET0 = 1; // Fasiləni təyin edin. EA = 1; // Qlobal fasiləni təyin edin. while (1) {if (led_state) {P1 = 0xFF; } başqa {P1 = 0x00; }}}
Taymer modulunu konfiqurasiya edirik və led vəziyyət nəzarət dəyişikliyində dəyişikliklər gözləyirik. TMOD, timer rejimi nəzarət qeydidir. TL0 və TH0 Timer0 nəzarət qeydləridir. ET0, timer nəzarət reyestrində (TCON) aktivləşdirmə-timer0 bitidir. TR0 və EA, kəsilmə aktivləşdirmə reyestrinin (IE) bitləridir.
Addım 7: Əlavə mənbələr
- AT89C2051 məlumat cədvəli:
- Kiçik Cihaz C Tərtibçisi (sdcc):
- 8051 mənbələri:
- AT89C2051 proqramçı deposu:
- salam-8051 anbarı: