PMiK Programowanie Mikrokontrolera 8051

Podobne dokumenty
PMiK Programowanie Mikrokontrolera 8051

CYKL ROZKAZOWY = 1 lub 2(4) cykle maszynowe

Kompilator języka C na procesor 8051 RC51 implementacja

Język programowania C51 dla mikroprocesorów rodziny MCS51

Systemy Wbudowane. Arduino, AVR. Arduino. Arduino. Arduino. Oprogramowanie. Mikrokontroler. Mikrokontroler Platforma Arduino. Arduino IDE: Arduino C:

Start Bity Bit Stop 1 Bit Par Rys. 1

Programowanie mikrokontrolerów AVR

Wstęp. do języka C na procesor (kompilator RC51)

Hardware mikrokontrolera X51

Układy zegarowe w systemie mikroprocesorowym

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

4 Transmisja szeregowa, obsługa wyświetlacza LCD.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

2. Architektura mikrokontrolerów PIC16F8x... 13

Systemy Wbudowane. Arduino, AVR (wersja 2019) Arduino. Arduino. Oprogramowanie. Rys historyczny. Mikrokontroler

Wykład 4. Przegląd mikrokontrolerów 16-bit: - PIC24 - dspic - MSP430

4 Transmisja szeregowa na przykładzie komunikacji dwukierunkowej z komputerem PC, obsługa wyświetlacza LCD.

Szkolenia specjalistyczne

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

PROJEKT I OPTYMALIZACJA STRUKTURY LOGICZNEJ DYDAKTYCZNEGO SYSTEMU MIKROPROCESOROWEGO DLA LABORATORIUM PROJEKTOWANIA ZINTEGROWANEGO

MIKROKONTROLERY I MIKROPROCESORY

Systemy Wbudowane. Arduino, AVR (wersja 2018) Arduino. Arduino. Oprogramowanie. Rys historyczny. Mikrokontroler

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

petla:... ; etykieta określa adres w pamięci kodu (docelowe miejsce skoku) DJNZ R7, petla

Systemy Wbudowane. Arduino, AVR (wersja ) Arduino. Arduino. Arduino. Oprogramowanie. Mikrokontroler

Systemy mikroprocesorowe. Literatura podręcznikowa. Przedmioty związane. Przykłady systemów wbudowanych. Pojęcie systemu wbudowanego embedded system

dokument DOK wersja 1.0

Temat: System przerwań, liczniki i wyświetlacz w STRC51. Ćwiczenie 3.

Temat 7. Programowanie mikrokontrolerów z rodziny PIC16 w języku C przy użyciu HI-TECH C for PIC10/12/16

Technika mikroprocesorowa. W. Daca, Politechnika Szczecińska, Wydział Elektryczny, 2007/08

Zastosowanie procesorów AVR firmy ATMEL w cyfrowych pomiarach częstotliwości

Mikroprocesory i Mikrosterowniki

MIKROPROCESORY architektura i programowanie

Timer T2 - zgodny z Tryb capture. Tryb auto-reload. Rejestr T2CON - adr. bitowo. dr inŝ. Stefan Brock 2008/2009

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Struktura programu w asemblerze mikrokontrolera 8051

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Zewnętrzne układy peryferyjne cz. 1 Wykład 12

Temat: System przerwań, liczniki i wyświetlacz w STRC51. Ćwiczenie 3.

ĆWICZENIE 5. TEMAT: OBSŁUGA PORTU SZEREGOWEGO W PAKIECIE KEILuVISON WYSYŁANIE PORTEM SZEREGOWYM

RODZAJE PAMIĘCI RAM. Cz. 1

Mikroprocesory i Mikrosterowniki

Wykład 3. Przegląd mikrokontrolerów 8-bit: STM8

Mikrokontrolery w mechatronice. Wykład 4


Architektura komputerów

Materiały. Języki programowania II (Java+AVR-GCC) Literatura

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Systemy wbudowane. Wprowadzenie. Struktura. Mikrokontrolery AVR. Wprowadzenie do programowania w C

Technika mikroprocesorowa. W. Daca, Politechnika Szczecińska, Wydział Elektryczny, 2007/08

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Wstęp Architektura... 13

Architektura mikrokontrolera MCS51

Architektura komputerów

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Technika mikroprocesorowa I Wykład 4

Architektura mikrokontrolera MCS51

ZL2ARM easyarm zestaw uruchomieniowy dla mikrokontrolerów LPC2104/5/6 (rdzeń ARM7TDMI-S)

Język C. Wykład 9: Mikrokontrolery cz.2. Łukasz Gaweł Chemia C pokój 307

Programowanie niskopoziomowe

Układy zegarowe w systemie mikroprocesorowym

Inżynieria Wytwarzania Systemów Wbudowanych

Wykład 4. Środowisko programistyczne

ZL5ARM. Zestaw uruchomieniowy dla mikrokontrolerów LPC2119/2129 (rdzeń ARM7TMDI-S) Kompatybilność z zestawem MCB2100 firmy Keil

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Instytut Teleinformatyki

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8

Elementy składoweµc - przypomnienie

Systemy wbudowane. Wprowadzenie. Wprowadzenie. Mikrokontroler 8051 Budowa

1. Wstęp Różnice pomiędzy mikrokontrolerami ST7 a ST7LITE Rdzeń mikrokontrolerów ST7FLITE... 15

High Speed USB 2.0 Development Board

Ćwiczenie 9 Częstościomierz oparty na µc 8051(8052)

WPROWADZENIE Mikrosterownik mikrokontrolery

Ćw. 10 Badanie toru przetwarzania C/A w mikrokontrolerach analogowych

Pośredniczy we współpracy pomiędzy procesorem a urządzeniem we/wy. W szczególności do jego zadań należy:

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Politechnika Warszawska

Schemat blokowy architektury AVR

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

STM32Butterfly2. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

System mikroprocesorowy i peryferia. Dariusz Chaberski

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer

Instytut Teleinformatyki

o Instalacja środowiska programistycznego (18) o Blink (18) o Zasilanie (21) o Złącza zasilania (22) o Wejścia analogowe (22) o Złącza cyfrowe (22)

Instytut Teleinformatyki

WYKORZYSTANIE WEWNĘTRZNYCH GENERATORÓW RC DO TAKTOWANIA MIKROKONTROLERÓW AVR

Instrukcja użytkownika

Wykład 1

Programowanie Mikrokontrolerów

Instytut Teleinformatyki

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

Lista rozkazów mikrokontrolera 8051

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Instytut Teleinformatyki

SML3 październik

Instytut Teleinformatyki

Układy czasowo-licznikowe w systemach mikroprocesorowych

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1. Wprowadzenie Programowanie mikrokontrolerów Sprzęt i oprogramowanie... 33

Transkrypt:

PMiK Programowanie Mikrokontrolera 8051 Wykład 2 Mikrokontroler 8051 PMiK Programowanie mikrokontrolera 8051 - wykład S. Szostak (2006)

Mikrokontroler Czyli - wszystko w jednym (EPROM, FLASH) Central Processing Unit Interfejs RS, USB, PMiK Programowanie mikrokontrolera 8051 S. Szostak 2

Schemat blokowy mikrokontrolera 8051 PRZERWANIA ZEWNĘTRZNE PRZERWANIA WEWNĘTRZNE WEJŚCIA LICZNIKÓW SYSTEM PRZERWAŃ ROM 4kB RAM 128B LICZNIK T1 LICZNIK T0 CPU OSCYLATOR STEROWANIE MAGISTRALĄ 4 PORTY WE/WY PORT SZEREGOWY P0 P1 P2 P3 TXD RXD Źródło: MCS51 Microcontroller Family User s Manual, Intel Corp. PMiK Programowanie mikrokontrolera 8051 S. Szostak 3

Schemat blokowy mikrokontrolera 8051 PRZERWANIA ZEWNĘTRZNE PRZERWANIA WEWNĘTRZNE WEJŚCIA LICZNIKÓW SYSTEM PRZERWAŃ ROM 4kB RAM 128B LICZNIK T1 LICZNIK T0 CPU OSCYLATOR STEROWANIE MAGISTRALĄ 4 PORTY WE/WY PORT SZEREGOWY P0 P1 P2 P3 TXD RXD Źródło: MCS51 Microcontroller Family User s Manual, Intel Corp. PMiK Programowanie mikrokontrolera 8051 S. Szostak 4

Dobór częstotliwości oscylatora Co wziąć pod uwagę? Wymaganą wydajność systemu Współpracę z urządzeniami zewnętrznymi Komunikację z innymi systemami Pobór mocy Koszt systemu Emisję zakłóceń Najlepiej dobrać jak najniższą, ale spełniającą przyjęte założenia częstotliwość sygnału zegarowego. PMiK Programowanie mikrokontrolera 8051 S. Szostak 5

Częstotliwości oscylatora a pobór mocy Źródło Dallas (AN1771.pdf) PMiK Programowanie mikrokontrolera 8051 S. Szostak 6

Czy kształt sygnału zegarowego może mieć jakieś znaczenie Pobór mocy zależy od kształtu sygnału zegarowego (zależność od szybkości narastającego i opadającego zbocza sygnału zegarowego) Źródło Dallas (AN1771.pdf) Jest to uwarunkowane strukturą wewnętrzną układu oscylatora Efekt szczególnie widoczny dla małych częstotliwości zegara Inne rozwiązanie - wewnętrzny oscylator (ring oscillator) np. DS87C520 Rezultat - osiągi klasycznej 8051 taktowanej f = 7MHz przy Icc = 3,6 ma Ale zakres częstotliwości 2-4 MHz i mała stabilność częstotliwości PMiK Programowanie mikrokontrolera 8051 S. Szostak 7

Układ oscylatora Dallas-Maxim Atmel PMiK Programowanie mikrokontrolera 8051 S. Szostak 8

Układ kontroli zegara systemowego w mikrokontrolerach Maxim - Dallas Źródło Maxim -Dallas Ultra- High-Speed Flash Microcontroller User s Guide PMiK Programowanie mikrokontrolera 8051 S. Szostak 9

Układ zegara w mikrokontrolerze C8051F060 PMiK Programowanie mikrokontrolera 8051 S. Szostak 10

Stabilność oscylatora Oscylator o stabilności generowanej częstotliwości ±20 ppm - to dużo czy mało? Taki oscylator w ciągu roku (około 32 miliony sekund) może nas oszukać o ok. 10 minut. Typowy rezonator kwarcowy charakteryzuje się stabilnością na poziomie (5-100 ppm) to daje błąd w ciągu roku rzędu 5-50 minut. Jego stabilność silnie zależy od temperatury. Ponadto jest wrażliwy na wibracje i traci stabilność z czasem. Rozwiązania: TCXO temperaturowo skompensowane oscylatory kwarcowe 0.1 ppm ale koszt ok. 100$. Pomiar temperatury (koszt sensora ok. 2$) i programowe uwzględnienie zmian częstotliwości oscylacji. Rezonatory ceramiczne tańsze od rezonatorów kwarcowych, bardziej odporne na wibracje, mniejsze. Ale stabilność na poziomie 5000 ppm co daje błąd na poziomie ±50 minut na tydzień. PMiK Programowanie mikrokontrolera 8051 S. Szostak 11

Wnioski dla programisty i konstruktora Najlepiej dobrać jak najniższą, ale spełniającą przyjęte założenia częstotliwość sygnału zegarowego. Pisać kod tak, żeby łatwo adaptować program do różnych architektur mikrokontrolera (np. liczby taktów zegarowych potrzebnych do wykonania cyklu maszynowego) i różnych częstotliwości oscylatora. #include <reg51.h> #define OSC_FREQ (12000000UL) // częstotliwość oscylatora w Hz #define OSC_PER_INST (12) // liczba cykli zegarowych na instrukcję #define Time_10ms (65536 (tword) (OSC_FREQ / (OSC_PER_INST * 100))) #define Time_10ms_H (Time_10ms / 256) #define Time_10ms_L (Time_10ms % 256) TH0 = Time_10ms_H; TL0 = Time_10ms_L; PMiK Programowanie mikrokontrolera 8051 S. Szostak 12

Odczyt danych z pamięci programu PMiK Programowanie mikrokontrolera 8051 S. Szostak 13

Układ odczytu danych z zewnętrznej pamięci programu PMiK Programowanie mikrokontrolera 8051 S. Szostak 14

Program w wewnętrznej czy zewnętrznej pamięci programu? Wewnętrzny ROM Wolne porty P0 i P2 Możliwość przeprogramowywania pamięci w systemie (ISP) Mniejszy pobór mocy Zewnętrzny ROM Dostępne 64 KB pamięci, Możliwe bankowanie pamięci Źródło Dallas (AN1771.pdf) PMiK Programowanie mikrokontrolera 8051 S. Szostak 15

Pamięć danych (klasyczna 51) PMiK Programowanie mikrokontrolera 8051 S. Szostak 16

Komunikacja mikrokontrolera z zewnętrzną pamięcią danych PMiK Programowanie mikrokontrolera 8051 S. Szostak 17

Dane w wewnętrznej czy zewnętrznej pamięci danych? Wewnętrzny RAM Wolne porty P0 i P2 Szybszy dostęp Mniejszy pobór mocy Zewnętrzny RAM Dostępne 64 KB pamięci, Możliwe bankowanie pamięci Źródło Dallas (AN1771.pdf) PMiK Programowanie mikrokontrolera 8051 S. Szostak 18

Środowisko µvision firmy Keil PMiK Programowanie mikrokontrolera 8051 S. Szostak 19

Komponenty środowiska Keil PMiK Programowanie mikrokontrolera 8051 S. Szostak 20

Assembler Source File Object File from Cx51 Object File from Intel ASM51 or PL/M-51 Ax51 Macro Assembler Object File Library File Listing File LIBx51 Library Manager Lx51 Linker / Locator MAP File (*.m51) Library File Absolute Object File OHx51 Object HEX Converter mvision2 Debugger In-circuit debugger HEX File PROM Programmer PMiK Programowanie mikrokontrolera 8051 S. Szostak 21

PMiK Programowanie mikrokontrolera 8051 S. Szostak 22

Typy danych i ich zakres PMiK Programowanie mikrokontrolera 8051 S. Szostak 23

8051 dostęp do pamięci w języku C data bdata code: program memory accessed by movc @a + dptr idata xdata PMiK Programowanie mikrokontrolera 8051 S. Szostak 24

PMiK Programowanie mikrokontrolera 8051 S. Szostak 25

Umieszczanie zmiennych w różnych obszarach pamięci Akceptowalne są dwie konwencje deklaracji zmiennych 1. [typ zmiennej] [obszar pamięci] nazwa zmiennej int data var; 2. [obszar pamięci] [typ zmiennej] nazwa zmiennej data int var; Deklaracja wskaźników data int *p; int data *p; xdata int data *p; Preferowana jest konwencja 1 czyli dla deklaracji zmiennej [typ zmiennej] [obszar pamięci] nazwa zmiennej dla deklaracji wskaźnika [typ zmiennej wskazywanej przez wskaźnik] [obszar pamięci w której przechowywana jest zmienna] * [obszar pamięci w której przechowywany jest wskaźnik] nazwa wskaźnika int data * xdata p; PMiK Programowanie mikrokontrolera 8051 S. Szostak 26

Umieszczenie urządzeń zewnętrznych w przestrzeni pamięci danych Źródło http://www.adatronik.com.pl PMiK Programowanie mikrokontrolera 8051 S. Szostak 27

Dostęp do urządzeń I/O umieszczonych w zewnętrznej pamięci danych (xdata) sposób 1 Zastosowanie wskaźnika void main (void) { volatile unsigned char xdata *p = (char xdata *) 0x8000; p[0] = 0xAA; p[1] = 0x55; } ;---- Variable 'p' assigned to Register 'R6/R7' ---- 0000 7F00 MOV R7,#00H 0002 7E80 MOV R6,#080H ; SOURCE LINE # 5 0004 8F82 MOV DPL,R7 0006 8E83 MOV DPH,R6 0008 74AA MOV A,#0AAH 000A F0 MOVX @DPTR,A ; SOURCE LINE # 6 000B A3 INC DPTR 000C 7455 MOV A,#055H 000E F0 MOVX @DPTR,A PMiK Programowanie mikrokontrolera 8051 S. Szostak 28

Dostęp do urządzeń I/O umieszczonych w zewnętrznej pamięci danych (xdata) sposób 2 Zastosowanie makra XBYTE #include <absacc.h> void main (void) { XBYTE[0x8000] = 0xAA; XBYTE[0x8001] = 0x55; } 0000 908000 MOV DPTR,#08000H 0003 74AA MOV A,#0AAH 0005 F0 MOVX @DPTR,A ; SOURCE LINE # 7 0006 A3 INC DPTR 0007 7455 MOV A,#055H 0009 F0 MOVX @DPTR,A PMiK Programowanie mikrokontrolera 8051 S. Szostak 29

Dostęp do urządzeń I/O umieszczonych w zewnętrznej pamięci danych (xdata) sposób 3 Alokacja zmiennej pod ustalonym adresem poprzez użycie dyrektywy _at_ volatile unsigned char xdata mm_dev_reg0 _at_ 0xFC00; volatile unsigned char xdata mm_dev_reg1 _at_ 0xFC01; void main (void) { mm_dev_reg0 = 0xAA; mm_dev_reg1 = 0x55; } 0000 908000 MOV DPTR,#mm_dev_reg0 0003 74AA MOV A,#0AAH 0005 F0 MOVX @DPTR,A ; SOURCE LINE # 7 0006 A3 INC DPTR 0007 7455 MOV A,#055H 0009 F0 MOVX @DPTR,A PMiK Programowanie mikrokontrolera 8051 S. Szostak 30

Zmienne typu volatile unsigned char xdata inp1; // wejście urządzenia #1 unsigned char xdata out1; // wyjście urządzenia #1 void func (void) { while (inp1 & 0x01) // powtarzaj dopóki ustawiony jest najmłodszy bit danej { out1 = 0x00; // zmieniaj bit 0 out1 = 0x01; } } Jak ten kod naprawdę może działać? Deklaracja zmiennej jako volatile oznacza, że jej wartość może być niezależna od wykonywanego kodu programu (np. może być wymuszana przez urządzenia zewnętrzne, system przerwań, itp.) i dla tego typu zmiennych kompilator nie może optymalizować dostępu do niej. Brak takiej deklaracji spowoduje, że kompilator zoptymalizuje do niej dostęp co może spowodować inne niż zamierzaliśmy działanie programu. Rozwiązanie volatile unsigned char xdata inp1; // wejście urządzenia #1 volatile unsigned char xdata out1; // wyjście urządzenia #1 PMiK Programowanie mikrokontrolera 8051 S. Szostak 31

Zmienne typu const /* zmienna pi jest przechowywana w xdata */ const float xdata pi = 3.1415927; ------------------------------------------------------------------------------------------------ const unsigned char mask [] = { 0x01, 0x02, 0x04, 0x08 }; // definiowanie maski const unsigned char *cp = mask; unsigned char *p = mask; /* to samo co cp */.. *p = 'a'; // Taka deklaracje nie spowoduje wygenerowania błędu ale jej wynik jest nieokreślony *cp = 'a'; // To już spowoduje wygenerowanie błędu ------------------------------------------------------------------------------------------------ char text [] = "Witamy na PMiK"; char *const textp = text;... *textp = 'A'; // OK (zmiana text[0]) textp++; // Błąd (textp jest typu const) textp[2] = 'B'; // OK (zmiana text[2]) PMiK Programowanie mikrokontrolera 8051 S. Szostak 32

Rozszerzenia jęcyka C (ANSI C) Dostęp do rejestrów SFR Określają w jakiej pamięci ma być umieszczona dana PMiK Programowanie mikrokontrolera 8051 S. Szostak 33

Przykładowe deklaracje zmiennych Źródło : C51 Compilator Keil Software c51.pdf PMiK Programowanie mikrokontrolera 8051 S. Szostak 34

Format deklaracji funkcji Źródło : C51 Compilator Keil Software c51.pdf PMiK Programowanie mikrokontrolera 8051 S. Szostak 35

Przekazywanie parametrów funkcji Źródło : C51 Compilator Keil Software c51.pdf PMiK Programowanie mikrokontrolera 8051 S. Szostak 36

W jaki sposób funkcja zwraca wyniki Źródło : C51 Compilator Keil Software c51.pdf PMiK Programowanie mikrokontrolera 8051 S. Szostak 37

Obsługa przerwań 8051 Używaj 3-go zestawu rejestrów void timer0 (void) interrupt 1 using 3 { if (++licznik_1 == 2000) { // licz do 2000 licznik_2++; // inkrementuj licznik_2 licznik_1 = 0; // czyść licznik_1 } } Źródło : C51 Compilator Keil Software c51.pdf PMiK Programowanie mikrokontrolera 8051 S. Szostak 38

Przerwania w 8051 Źródło : C51 Compilator Keil Software c51.pdf PMiK Programowanie mikrokontrolera 8051 S. Szostak 39

Funkcje typu intrinsic Żeby używać tych funkcji trzeba dołączyć header <INTRINS.H> Źródło : C51 Compilator Keil Software c51.pdf PMiK Programowanie mikrokontrolera 8051 S. Szostak 40