Mundarija:
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
8051 (MCS-51 nomi bilan ham tanilgan)-bu 80-yillardagi MCU dizayni, bugungi kunda mashhur bo'lib qolmoqda. Zamonaviy 8051-ga mos keladigan mikrokontrollerlar har xil shakl va o'lchamlarda va atrof-muhit birliklarining keng assortimentida bir nechta sotuvchilardan mavjud. Bu yo'riqnomada biz Atmel'dan AT89C2051 MCU ni ko'rib chiqamiz.
AT89C2051 - bu kichik (2Kbaytli Flash, 128 baytli RAM), arzon (chip uchun ~ 1,40 dollar) mikrokontroller.
- 2.7-6V kuchlanish
- 15 kirish/chiqish liniyasi
- 2 taymer (16 bit)
- Ichki va tashqi uzilishlar
- UART
- Chipdagi analog taqqoslagich
- 24 MGts chastotali 2MIPSgacha
1 -qadam: talablar
Talablar:
- Linux kompyuter (kerakli dasturiy ta'minot: Arduino IDE, git, make, sdcc)
- Arduino UNO
- AT89C2051 chipi (DIP20 to'plami)
- 20 pinli ZIF rozetkasi
- Optocoupler (tercihen MOSFET chiqishi)
- Arduino prototipli qalqoni
- 12V quvvat manbai
- 5V quvvat manbai
- 16 MGts kristalli osilator
- 2x30pF kondansatör
- 100nF kondansatör
- Diyot (masalan: 1N400X)
- Rezistorlar (1K, 3K3)
- Protoboard
- Jumperlar
- Mis sim
Kerakli dasturiy ta'minotni tekshiring:
qaysi python3
qaysi sdcc qaysi git
2 -qadam: Dasturchi yaratish
Bu bo'lim qisqa bo'ladi, chunki men bir muncha vaqt oldin dasturlash qalqonini qurganman. Men yig'ilgan taxtaning sxemasi va rasmlarini biriktirdim. Sxemaning PDF -ni omborda topish mumkin.
Siz dasturchi panelini dasturlashingiz kerak bo'ladi:
1. Ma'lumotlar omborini klonlang.
git klon
2. AT89C2051_programmer/AT89_prog/AT89_prog.ino faylini Arduino IDE -da oching.
3. Arduino IDE -dan eskizni yarating va yuklang.
3 -qadam: Dasturchi dasturini o'rnatish
1. Python virtual muhitini yarating.
python3 -m venv venv
. venv/bin/faollashtiring
2. at89overlord -ni o'rnating. at89overlord - bu AT89C2051 chipi uchun ochiq manba kodli dasturchi, uning manba kodini bu erda topishingiz mumkin.
pipni at89overlord -ga o'rnating
3. O'rnatishni tekshiring.
ot89 ustozi -h
4 -qadam: Chipni dasturlash
1. Oddiy miltillash loyihasini klonlang.
CD ~
git klon https://github.com/piotrb5e3/hello-8051.git cd salom-8051/
2. Ilovani yarating.
qilmoq
3. Arduinoni shaxsiy kompyuterga ulang, 12V quvvat manbaiga ulang, AT89C2051 chipini ZIF rozetkasiga joylashtiring.
4. Arduino ketma -ket portini toping.
ls /dev /tty*
5. Chipga o'rnatilgan IntelHex faylini yuklang. Agar sizning Arduino portingiz /dev /ttyACM0 dan farq qilsa, siz to'g'ri qiymatni -p buyruq qatori parametri bilan o'tkazishingiz kerak.
ot89verlord -f./hello.ihx
5 -qadam: yig'ish
Sxemaga muvofiq sxemani yig'ing. PDF -versiyasini omborda topish mumkin.
Siz taxminan 0,5 Gts chastotali yashil LED chiroqni ko'rishingiz kerak.
6 -qadam: Kodni tushuntirish
#qo'shing
#qo'shing
Biz sdcc -dan AT89X051 sarlavhasini qo'shishni boshlaymiz. U o'zgarmaydiganlar kabi registrlar bilan ishlash uchun makrolarni o'z ichiga oladi. Ud8_t va uint16_t tamsayı turlarining ta'riflarini o'z ichiga olgan stdint.h ni ham o'z ichiga oladi.
// Osilator 16 MGts ga teng deb hisoblaymiz
#aniqlang INTERRUPTS_PER_SECOND 5208
Timer0 oshib ketganda uzilish sodir bo'ladi. U bitta 8 bitli taymer sifatida tuzilgan, shuning uchun bu har 2^8 protsessor tsiklida sodir bo'ladi. Bitta protsessor tsikli 12 soatlik tsiklni oladi va biz 16000000/12/2^8 = 5208.33333 ga yetamiz.
uchuvchi uint8_t led_state = 0;
uchuvchi uint16_t timer_counter = INTERRUPTS_PER_SECOND;
Biz boshqariladigan davlat nazoratini e'lon qilamiz va hisoblagich o'zgaruvchilarini to'xtatamiz.
void Timer0_ISR (void) _ uzilish (1) {
timer_counter--; agar (timer_counter == 0) {led_state =! led_state; timer_counter = INTERRUPTS_PER_SECOND; }}
Har safar Timer0 oshib ketganda, hisoblagich kamayadi. Agar u nolga teng bo'lsa, u asl holatiga qaytariladi va LED holati o'zgartiriladi. Bu sekundiga bir marta sodir bo'ladi, natijada ~ 0,5Hz LED yonib -o'chib turadi.
int main () {
TMOD = 0x3; // Taymer rejimi - 8 bit, oldindan hisoblagich yo'q. chastota = OSCFREQ/12/2^8 TL0 = 0; // Hisoblagichni tozalash TH0 = 0; // TR0 = 1 registrini tozalash; // Taymerni ishga tushirish uchun o'rnating. ET0 = 1; // uzilishni o'rnating. EA = 1; // Global uzilishni o'rnating. while (1) {if (led_state) {P1 = 0xFF; } boshqa {P1 = 0x00; }}}
Biz taymer modulini konfiguratsiya qilamiz va o'zgaruvchan holatni nazorat qilamiz. TMM - bu taymer rejimini boshqarish registri. TL0 va TH0 - Timer0 boshqaruv registrlari. ET0-taymerni boshqarish registridagi (TCON) faollashtiruvchi-timer0 biti. TR0 va EA - uzilishlarni yoqish registridagi (IE) bitlar.
7 -qadam: Qo'shimcha manbalar
- AT89C2051 ma'lumotlar jadvali:
- Kichik qurilma C kompilyatori (sdcc):
- 8051 manbalari:
- AT89C2051 dasturchi ombori:
- salom-8051 ombori: