Język programowania C51 dla mikroprocesorów rodziny MCS51

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

Kompilator języka C na procesor 8051 RC51 implementacja

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

PMiK Programowanie Mikrokontrolera 8051

Język ludzki kod maszynowy

2 Przygotował: mgr inż. Maciej Lasota

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

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

PMiK Programowanie Mikrokontrolera 8051

Programowanie strukturalne i obiektowe

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

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

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Część 4 życie programu

Język C - podstawowe informacje

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

I - Microsoft Visual Studio C++

Podstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe:

Podstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++

OSP. Oprogramowanie Ssystemów Pomiarowych. Materiały do wykładu.

CPU architektura i rejestry

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Zmienne, stałe i operatory

1 Podstawy c++ w pigułce.

Język C zajęcia nr 11. Funkcje

Wykład 1

Program w C. wer. 12 z drobnymi modyfikacjami! Wojciech Myszka :59:

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

Podstawy programowania. Wykład Co jeszcze... Przypomnienia, uzupełnienia. Krzysztof Banaś Podstawy programowania 1

Microsoft IT Academy kurs programowania

Programowanie mikrokontrolerów (CISC)

Co nie powinno być umieszczane w plikach nagłówkowych:

Podstawy programowania w języku C

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Lista rozkazów mikrokontrolera 8051 część pierwsza: instrukcje przesyłania danych, arytmetyczne i logiczne

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

Mikrokontroler ATmega32. Język symboliczny

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Języki i metodyka programowania. Wprowadzenie do języka C

Podstawy programowania w języku C i C++

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

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

Funkcja (podprogram) void

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

( wykł. dr Marek Piasecki )

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Wstęp do programowania 1

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

1 Podstawy c++ w pigułce.

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

Programowanie w elektronice: Podstawy C

Lista rozkazów mikrokontrolera 8051

Programowanie strukturalne język C - wprowadzenie

Program w C. wer. 10 z drobnymi modyfikacjami! Wojciech Myszka :28:

tablica: dane_liczbowe

Programowanie obiektowe

Programowanie Proceduralne

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

Algorytmy i struktury danych. wykład 1

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

1. Brian W. Kernighan, Dennis M. Ritchie, Język ANSI C, WNT, Warszawa 1998.

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

Różności w C++ Marek Pudełko

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

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

KURS C/C++ WYKŁAD 7. struct Punkt { int x, y; int kolor; };

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Języki programowania - podstawy

Inżynieria Wytwarzania Systemów Wbudowanych

Lista instrukcji procesora 8051 część 2 Skoki i wywołania podprogramów, operacje na stosie, operacje bitowe

Podstawy programowania w języku C++

Podstawy programowania. Wykład 2 Zmienne i obsługa wejścia/wyjścia. Krzysztof Banaś Podstawy programowania 1

Wstęp do assemblera MA51

Podstawy programowania skrót z wykładów:

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

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

PROGRAMOWANIE w C prolog

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

KURS C/C++ WYKŁAD 6. Wskaźniki

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

PODSTAWOWE ELEMENTY ASEMBLERA TRYBY ADRESOWANIA. OPERATORY ASEMBLERA

Wprowadzenie do programowania w języku C

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Wstęp do programowania. Różne różności

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

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

C++ wprowadzanie zmiennych

Pytania sprawdzające wiedzę z programowania C++

external Data Representation

Podstawy programowania C. dr. Krystyna Łapin

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

Transkrypt:

Język programowania C51 dla mikroprocesorów rodziny MCS51 Typy danych Typ danej Rozmiar Zakres wartości bit 1 bit 0 lub 1 signed char 1 bajt -128 do +127 unsigned char 1 bajt 0 do 255 signed int 2 bajty -32768 do +32767 unsigned int 2 bajty 0 do 65535 signed long 4 bajty -2147483648 do +2147483647 unsigned long 4 bajty 0 do 4294967295 float 4 bajty ±1.176e-38 do ±3.40e+38 pointer 1 3 bajty adres objektu Typy danych dla dostępu do SFR sbit 1 bit 0 lub 1 sfr 1 bajt 0 do 255 sfr16 2 bajty 0 do 65535 Typy pamięci Typ pamięci data bdata idata pdata xdata code Opis pamięć wewnętrzna bezpośrednio adresowalna, najszybszy dostęp do zmiennej (128 bajtów) pamięć wewnętrzna adresowana bitowo, umożliwia dostęp bitowy i bajtowy pamięć wewnętrzna adresowana pośrednio, dostęp do całej przestrzeni wewnętrznej pamięci (256 bajtów) stronicowana (256 bajtów) pamięć zewnętrzna, dostępna przy pomocy instrukcji MOVX @Ri, zewnętrzna pamięć danych (64k), dostępna przy pomocy instrukcji MOVX @DPTR, pamięć programu (64k); dostępna tylko do odczytu instrukcją MOVC @A+DPTR Zmienne deklaracja zmiennych, inicjalizacja zmiennych (zmienne po zadeklarowaniu mogą zawierać przypadkowe wartości) int x, y; int z = 10; x= y +10; // jaką wartość ma teraz x=??? z = 3; // inicjalizacja w trybie wykonywania Przykłady deklaracji zmiennych: char data var1, var2; char code text[]= WPROWADZ PARAMETR: ; unsigned long xdata array [100]; float idata x,y,z; unsigned int pdata rozmiar; unsigned char xdata vector[10][4][4]; sfr P0=0x80; sbit RI=0x98; char bdata znaczniki; sbit fl0=znaczniki^0;

Modele pamięci: Model Opis SMALL parametry i zmienne automatyczne są umieszczane w wewnętrznej pamięci danych, jeśli rejestry robocze nie są dostępne (max. 120 bajtów pamięci typu DATA) COMPACT parametry i zmienne automatyczne są umieszczane w stronicowanej zewnętrznej pamięci danych, jeśli rejestry robocze nie są dostępne (max. 256 bajtów pamięci typu PDATA), LARGE parametry i zmienne automatyczne są umieszczane w zewnętrznej pamięci danych, jeśli rejestry robocze nie są dostępne (max. 64K pamięci typu XDATA) Do adresowania wykorzystywane są rejestry DPTRx Wskazania (pointers): Deklaracja Rozmiar Wskaźnik wskazuje na... float *p; 3 bajty... float we wszystkich typach pamięci char data *p; 1 bajt... char w pamięci typu data int idata *ip; 1 bajt... int w pamięci typu idata long pdata *pp; 1 bajt... long w pamięci typu pdata char xdata *xp; 2 bajty... char w pamięci typu xdata int code *cp; 2 bajty... int w pamięci typu code Reprezentacja zmiennych bit signed/unsigned char; data/idata/pdata pointer signed/unsigned int; xdata/code pointer przykład wartości typu integer 0x1234 adres +0 +1 zawartość 0x12 0x34 signed/unsigned long przykład wartości typu long integer 0x12345678 adres +0 +1 +2 +3 zawartość 0x12 0x34 0x56 0x78 wskaźnik główny adres +0 +1 +2 zawartość typ pamięci High-offset Low-offset typy pamięci są kodowane następująco: typ pamięci idata xdata pdata data code wartość 1 2 3 4 5 przykład: #define XBYTE ((char *) 0x20000L) XBYTE[0x8000]=0x41; operacje na wskaźnikach: operacja przykład operacja porównania if (p0==p1)...; if (p0!=p1)...; if (p0<=p1)...; dodawanie (wsaźnik+int) p0+=5; p1+=i; p1=p0+(2*i); odejmowanie(wsk.-int) p0-=8; p1-=i; p0=p1-100; przeniesienie p0=p1; p5=0x50100l; zwiększenie p0++; ++p1; zmniejszenie p1--; --p0;

float (4 bajty, standardu IEEE-754, 24 bit. precyzji, najst. bit mantysy zawsze równy 1) 1 Bit znaku (S, 1-ujemny, 0-dodatni) 8 Bit wykładnik (E liczba 23 Bit mantysa adres +0 +1 +2 +3 zawartość MMMM MMMM MMMM MMMM E MMM MMMM S EEE EEEE przykład weryfikacji błędów w arytmetyce zmiennopozycyjnej: #define NaN 0xFFFFFFFF /* blad - to nie jest liczba */ #define plusinf 0x7F800000 /* dodatnie przepelnienie */ #define minusinf 0xFF800000 /* ujemne przepełnienie */ union f { float f; /* wartość zmiennorzecinkowa */ unsigned long ul; /* wartość całkowitoliczbowa długa */ main() { float a, b; union f x; x.f = a*b; if (x.ul==nan x.ul==pusinf x.ul==minusinf) { /* obsluga bledu */ else { /* rezultat obliczenia poprawny */ Tablice Alokacja tablic w przestrzeni pamięci RAM lub ROM: float mtab[5]; mtab[0] mtab[1] mtab[2] mtab[3] mtab[4] basseaddr basseaddr+4 basseaddr+8 basseaddr+12 basseaddr+16 float mdtb[3][5]; mdtb[][0] mdtb[][1] mdtb[][2] mdtb[][3] mdtb[][4] mdtb[0][] baseaddr baseaddr+4 baseaddr+8 baseaddr+12 baseaddr+16 mdtb[1][] BaseAddr+20 BaseAddr+24 BaseAddr+28 BaseAddr+32 BaseAddr+36 mdtb[2][] BaseAddr+40 BaseAddr+44 BaseAddr+48 BaseAddr+52 BaseAddr+56 Tablice znakowe char text[]= To jest string. ; T o j e s t s t r i n g. \0 Operatory języka C51 Operator Opis Przykład Operatory matematyczne + Dodawanie x=y+z; - Odejmowanie x=y-z; * Mnożenie x=y*z; / Dzielenie x=y/z;

Operatory przydzielenia wartości = przedziel wartość z=10; += sumuj i przydziel x+=10; (równoważne: x=x+10;) -= odejmij i przydziel x-=8; *= mnóż i przydziel x*=10; /= podziel i przydziel x/=10; &= iloczyn log. bitów i przydziel x&=10; (ANL x,#0ah) = suma log. bitów i przydziel x =10; (ORL x,#0ah) ^= różn. sym. bitów i przydziel x^=10; (XRL x,#0ah) Operatory wyrażeń logicznych && iloczyn logiczny wyrażeń if (x && 0x07) {... suma logiczna wyrażeń if (x 0x0F) {... Operatory porównań == Równe if (x<10) {...!= nie równe if (x!=10) {... < Mniejsze if (x<10) {... > Większe if (x>10) {... <= mniejsze lub równe if (x<=10) {... >= większe lub równe if (x>=10) {... Operatory * wskazanie pośrednie char *p; x=*p; & Adres p=&x; ~ negacja bitów x &= ~0x02! logiczne nie if (!valid) {... ++ Zwiększenie x++; (tak samo jak: x=x+1;) -- Zmniejszenie x--; --x; Operatory -> x->s. x.w.lo Ogólna postać funkcji w C51: typ_powrotu nazwa_fukcji ( [par[,... ]] ) [model] [reentrant] [interrupt n] [using n] przykład: void rb_func(void) using 3 { /*... ciało funkcji... */ Zawsze przed użyciem funkcji musi wystąpić deklaracja funkcji lub deklaracja jej prototypu.

przykład użycia using stmt level source 1 extern bit alarm; 2 int alarm_count; 3 extern void alfunc (bit b0); 4 5 void flarm(void) using 3 { 6 1 alarm_count++; 7 1 alfunc(alarm=1); 8 1 ASSEMBLY LISTING OF GENERATED OBJECT CODE ; FUNCTION flarm (BEGIN) 0000 C0D0 PUSH PSW 0002 75D018 MOV PSW,#018H 0005 0500 R INC alarm_count+01h 0007 E500 R MOV A,alarm_count+01H 0009 7002 JNZ?C0002 000B 0500 R INC alarm_count 000D?C0002: 000D D3 SETB C 000E 9200 E MOV alarm,c 0010 9200 E MOV?alfunc?BIT,C 0012 1100 E ACALL alfunc 0014 D0D0 POP PSW 0016 22 RET ; FUNCTION flarm (END) Deklaracja struktury struct nazw_typ dekl_skł_1; dekl_skł_2;. dekl_skł_n; nazwa; ; SOURCE LINE # 5 ; SOURCE LINE # 6 ; SOURCE LINE # 7 ; SOURCE LINE # 8 Łączenie programów C51 z programami w j. assemblera przekazywanie parametrów Typ parametru char, 1-bajt ptr int, 2-bajt ptr long, float generic ptr 1. Parametr R7 R6,R7 R4 R7 R1, R2, R3 2. Parametr R5 R4,R5 R4 R7 R1, R2, R3 3. Parametr R3 R2,R3 ----- R1. R2, R3

Syntaktyka wyrażeń języka C51 if (wyr_war) { wyrażenia_prawdy; else { wyrażenia_fałszu; for (inicjowanie; wyr_war; adjustacja) { wyrażenia; while (wyr_war) { wyrażenia; do { wyrażenia; while (wyr_war); goto label;. label: switch (wyrażenie) { case wartość_1: wyrażenia_1; break;. case wartość_n: wyrażenia_n; break; default: wyrażenia;

Biblioteki C-51 stdio.h extern char _getkey(); extern char getchar(); extern char *gets(char *s, int n); extern char ungetchar(char); extern putchar(char); extern int printf(const char *,...); %[flags][width][.precision]type flags: -,+,, #, b, B, l, L, * type: d, u, o, x, X, f, e, E, g, G, c, s, p extern int sprintf(char s, const char *,...); extern int puts(const char *s); extern int scanf(const char *,...); %[flags][width]type flags: *, b, h, l type: d, i, u, o, x, f, e, g, c, s

Opcja CODE COMPACT DEBUG DEFINE LARGE LISTINCLUDE NOAREGS NOCOND NOEXTEND NOINTVECTOR Funkcja dołącza kod assemblera do pliku listingu wybiera model pamięci typu COMPACT dołącza informacje symboli do pliku wynikowego (obj) definiuje symbol preprocesora wybiera model pamięci typu LARGE dołącza do pliku listingu zawartość plików dołączanych (INCLUDE) zabrania generowania typu dostępu do rejestrów roboczych ARx Zakazuje zabrania stosowania rozszerzeń języka C51 zabrania generować wektor przerwań

Rozszerzenia standardu języka ANSI C (Cx51) związane bezpośrednio z architekturą mikroprocesorów rodziny 8951 Rodzaj pamięci i obszarów specjalnych w 8051 Modele pamięci Specyfikacja rodzajów pamięci Specyfikacja typów danych Dane bitwe i adresowanie obszarów bitowych Rejestry funkcji specjalnych (SFR - Special Function Register) Wskaźniki Atrybuty funkcji Słowa kluczowe _at_ alien bdata bit code compact data far idata interrupt large pdata _priority_ reentrant sbit sfr sfr16 small _task_ using xdata (dyrektywa NOEXTEND procesu kompilacji może zabronić stosowania rozszerzeń języka) Obszary pamięci 8051 Pamięć programu modyfikator code Pmięć danych wewnętrzna (internal data menory) 128 (256) bajtów, modyfikatory: data data bdata Pamięć danych zewnętrzna (external) modyfikatory: xdata pdata