Vxl Ch06 Laptrinhc8051 p1

Embed Size (px)

Citation preview

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    1/75

    I HC QUC GIA TP.H CH MINHTRNG I HC BCH KHOA

    KHOA IN-IN T

    B MN K THUT IN T

    11

    CHNG 5

    Lp trnh C cho 8051(Phn 1)

    Bi Minh Thnh

    B mn K thut in t -HBK Tp. HCM

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    2/75

    B mnK Thut in T -HBK 2

    Ni dung

    1. C bn v ngn ng C2. Cc lnh r nhnh v vng lp3. S dng con tr v mng trong C4. Cc hm v chng trnh con5. Chn assembly code trong C

    6. M hnh b nh Keil C51

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    3/75

    B mnK Thut in T -HBK 3

    Ni dung

    1. C bn v ngn ng C2. Cc lnh r nhnh v vng lp3. S dng con tr v mng trong C4. Cc hm v chng trnh con5. Chn assembly code trong C

    6. M hnh b nh Keil C51

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    4/75

    B mnK Thut in T -HBK

    Gii thiu

    C l ngn ng gn ngn ng assembly nht trong tt ccc ngn ng cp cao Lnh tnh ton trn bit

    Con tr (nh a ch gin tip)

    Phn ln cc vi iu khin u c C compiler Vic pht trin cc ng dng dng C s nhanh chng v

    thun li hn assembly.

    C l ngn ng lp trnh cu trc (khng phi l hngi tng)

    Mi tc v c th c ng gi trong mt hm

    Chng trnh chnh c ng gi trong hm main. 4

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    5/75

    B mnK Thut in T -HBK

    C v Assembly

    Advantages High-level, structured programming language Compiler relieves programmer from some of the hardware

    details

    Easier to write large, complex software Programs more readable

    Disadvantages Generally larger machine code.

    Less control and ability to interact with hardware.

    Unclear number of cycles to do something.

    5

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    6/75

    B mnK Thut in T -HBK

    Cu trc mt chng trnh trong C

    Cc cu lnh trong C ktthc bng du ;

    C phn bit ch hoa v ch

    thng Khi vit chng trnh cn

    ch vit ch thch

    6

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    7/75B mnK Thut in T -HBK

    Cc loi bin trong C

    7

    Dng bin S bit S byte Min gi trChar 8 1 -128 n 127

    Unsigned char 8 1 0 n 255Enum 16 2 -32.768 n 32.767Short 16 2 -32.768 n 32.767

    Unsigned short 16 2 0 n 65.535

    Int 16 2 -32.768 n 32.767Unsigned int 16 2 0 n 65.535

    Long 32 4 -2.147.483.648 n 2.147.483.647Unsigned long 32 4 0 n 4.294.697.295

    Dng bin S bit S byte Min gi trBit 1 0 0 n 1Sbit 1 0 0 n 1Sfr 8 1 0 n 255

    Sfr16 16 2 0 n 65.535

    Ngoi ra keil C cn

    h tr cc loi bin truy xut ccthanh ghi c chc

    nng c bit:

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    8/75B mnK Thut in T -HBK

    Cc bin m rng trong Keil C

    8

    8051 extension types

    bit 8051 bit addressable memory 20h to 2Fh

    sbit A bit inside an SFR (e.g. P1.0)

    sfr Entire byte of an SFR sfr16

    16-bit SFRs (e.g. DPTR) These are special types for accessing 1-bit, 8-bit, and 16-bit special

    function registers

    Declaration sbit, sfr, and sfr16

    Declare outside of main() program Essentially a friendly EQU for an SFR or SFR bit

    bit

    Declare anywhere a normal variable can be declared

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    9/75B mnK Thut in T -HBK

    V d

    9

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    10/75B mnK Thut in T -HBK

    Bng hng k t

    10

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    11/75B mnK Thut in T -HBK

    Cc ton t c bn ca C Multiplicative operators: a*b, a/b, a%b (remainder after division,

    e.g. 10 modulo 4 = 2)

    Additive operators: a+b, a-b

    Equality operators (boolean return): a==b (is equal?), a!=b (is notequal?)

    Relational operators (boolean) a=b

    Logical operators a==b && a==c (AND), a==c||a (right shift), & (bit-wise AND),^ (bit-wise XOR), | (bit-wise OR), ~ (bit complement)

    11

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    12/75B mnK Thut in T -HBK

    Cc ton t c bn ca C Increment and decrement a++, a--, ++a, --a

    Unuary operators -a (negative of a), +I, (i), ! (negative logicalvalues), !(a==b) same as (a!=b)

    Sizeof operator sizeof(type) (number of bytes of type is returned)sizeof expression (number of bytes of expression returned)

    Conditional operator ?. It has the form:

    conditionalExpression ? trueExpression1 : falseExpression2

    12

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    13/75B mnK Thut in T -HBK

    Th t u tin

    13

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    14/75B mnK Thut in T -HBK 14

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    15/75B mnK Thut in T -HBK 15

    Ni dung

    1. C bn v ngn ng C2. Cc lnh r nhnh v vng lp3. S dng con tr v mng trong C4. Chn assembly code trong C

    5. M hnh b nh Keil C516. Cc hm v chng trnh con

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    16/75B mnK Thut in T -HBK

    Cc lnh r nhnh

    Cu trc if

    Cu trc If else

    16

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    17/75B mnK Thut in T -HBK

    Cc lnh r nhnh

    Cu trc switch

    17

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    18/75B mnK Thut in T -HBK

    Cc lnh vng lp Lnh While

    Lnh do while

    18

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    19/75B mnK Thut in T -HBK

    Cc lnh vng lp

    Lnh for

    19

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    20/75B mnK Thut in T -HBK 20

    Ni dung

    1. C bn v ngn ng C2. Cc lnh r nhnh v vng lp3. S dng con tr v mng trong C4. Chn assembly code trong C

    5. M hnh b nh Keil C516. Cc hm v chng trnh con

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    21/75

    B mnK Thut in T -HBK

    Con tr trong Assembly

    i vi ngn ng assembly, th con tr trong C gn nhtng ng vi nh a ch gin tip v n tngng vi vic s dng cc thanh ghi R0 v R1 lm contr trong vng b nh trong hoc gi tr 2bytes t

    trong DPTR tr n vng RAM ngoi MOV R0,#40 R0 cha gi tr 40

    MOV R0,#40

    MOVX A,@R0 R0 tr n a ch 40 b nh ngoi

    Ta cng c th s dng DPTR ch n 64kB b nh ngoi MOVX A,@DPTR c b nh ngoi

    21

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    22/75

    B mnK Thut in T -HBK

    Pointer trong C

    Mi bin trong C c 2 thnh phn: Gi tr c lu trong bin

    a ch ca bin trong b nh

    Pointer l mt bin dng lu gi a ch ca mt

    bin khc, v bin m pointer tr n l mt bin cbn.

    C php ca con tr:

    unsigned char *pointer0;

    Du hoa th pha trc c ngha l ni dung cha trong contr l mt a ch ch khng phi l phn d liu s dngtnh ton. Kiu d liu ca bin m pointer0 tr n lunsigned char

    22

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    23/75

    B mnK Thut in T -HBK

    Pointer trong C

    23

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    24/75

    B mnK Thut in T -HBK

    Mng trong C

    Mng l mt bin cu trc trong c nhiu phn t cng kiu,mi phn t l mt bin thnh phn ca mng. Mi bin thnhphn ny l mt bin bnh thng v c c s (subscript) phn bit gia phn t ny v phn t kia.

    C php ca mngMng mt chiu:

    kiu tn_mng*kch_thc+;

    Mng hai chiu:

    kiu tn_mng*kch_thc_chiu1+*kch_thc chiu2];

    V d:unsigned char a[10];

    unsigned char a[]={0x00, 0x40, 0x88, 0xC0};

    24

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    25/75

    B mnK Thut in T -HBK

    Con tr v Mng

    25

    temp_array[0]

    temp_array[1]

    temp_array[2]temp_array[3]

    Note: the name of an array is a pointer to the first element:

    *temp_array is the same as temp_array[0]

    So the following are the same:

    n = *temp_array;

    n = temp_array[0];

    and these are also the same:

    n = *(temp_array+5);

    n = temp_array[5];

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    26/75

    B mnK Thut in T -HBK

    Cc v d

    26

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    27/75

    B mnK Thut in T -HBK 27

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    28/75

    B mnK Thut in T -HBK 28

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    29/75

    B mnK Thut in T -HBK 29

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    30/75

    B mnK Thut in T -HBK 30

    Ni dung

    1. C bn v ngn ng C2. Cc lnh r nhnh v vng lp3. S dng con tr v mng trong C4. Cc hm v chng trnh con5. Chn assembly code trong C

    6. M hnh b nh Keil C51

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    31/75

    B mnK Thut in T -HBK

    Hm v chng trnh con

    Cc hm thng s c gi tr tr v:

    V d:unsigned char tinh_tong(unsigned char a, unsigned char b) {

    unsigned char tong;

    tong=a+b;

    return tong;

    }

    Cn cc chng trnh con th khng c gi tr tr v, m n chthc hin cc lnh bn trong chng trnh v sau quay v li

    chng trnh chnh:

    31

    void delay(int time) {

    while(time--) {

    ; /*Khong lam gi ca*/

    }

    }

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    32/75

    B mnK Thut in T -HBK

    Vit chng trnh cho led chp tt

    32

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    33/75

    B mnK Thut in T -HBK

    S dng hm

    33

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    34/75

    B mnK Thut in T -HBK

    Function prototype

    34

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    35/75

    B mnK Thut in T -HBK

    Function prototype

    35

    //Khai bo ri nh ngha hm sau.

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    36/75

    B mnK Thut in T -HBK

    Truyn i s bng gi tr v bng tham kho

    36

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    37/75

    B mnK Thut in T -HBK 37

    Ni dung

    1. C bn v ngn ng C2. Cc lnh r nhnh v vng lp3. S dng con tr v mng trong C4. Cc hm v chng trnh con5. Chn assembly code trong C

    6. M hnh b nh Keil C51

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    38/75

    B mnK Thut in T -HBK

    Inline assembly

    When it is more efficient, or easier, can insertassembly code in C programs.

    #pragma asm//put your assembly code here

    #pragma endasm

    38

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    39/75

    B mnK Thut in T -HBK 39

    Chng trnh switch

    v led:

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    40/75

    B mnK Thut in T -HBK 40

    Ni dung

    1. C bn v ngn ng C2. Cc lnh r nhnh v vng lp3. S dng con tr v mng trong C4. Cc hm v chng trnh con5. Chn assembly code trong C

    6. M hnh b nh Keil C51

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    41/75

    B mnK Thut in T -HBK

    C51 Memory Models

    Small

    All variables stored in internal data memory Be carefulstack is placed here too

    Generates the fastest, most efficient code

    Default model for Keil uVision Projects

    Compact All variables stored in 1 page (256 bytes) of external data memory

    Accessed using MOVX @R0

    Slower than small model, faster than large model

    Large

    All variables stored in external data memory (up to 64KByte)

    Accessed using MOVX @DPTR

    Generates more code than small or compact models

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    42/75

    B mnK Thut in T -HBK

    C51 Memory Models (cont)

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    43/75

    B mnK Thut in T -HBK

    C51 Memory Models (cont)

    Memory type extensions allow access to all 8051 memory types.

    A variable may be assigned to a specific memory space The memory type may be explicitly declared in a variable declaration

    variable_type variable_name; e.g. int data x;

    Program Memory

    CODE memory type Up to 64Kbytes (some or all may be located on 8051 chip)

    Data Memory 8051 derivatives have up to 256 bytes of internal data memory Lower 128 bytes can be directly or indirectly addressed

    Upper 128 bytes shares the same address space as the SFR registers andcan only be indirectly addressed

    Can be expanded to 64KBytes off-chip

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    44/75

    B mnK Thut in T -HBK

    C51 Memory Models (cont)

    code Program memory (internal or external).

    unsigned char code const1 = 0x55;//define a constant

    char code string1*+ = hello;//define a string

    data Lower 128 bytes of internal data memory

    Accessed by direct addressing (fastest variable access)

    unsigned intdata x;//16-bit variable x

    idata All 256 bytes of internal data memory (8052 micro)

    Accessed by indirect addressing (slower)

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    45/75

    B mnK Thut in T -HBK

    C51 Memory Models (cont)

    bdata Bit addressable area of internal data memory (addresses 20H

    to 2FH)

    Allows data types that can be accessed at the bit level

    unsigned char bdatastatus; sbit flag1 = status^0;

    xdata External data memory

    Slower access than internal data memory

    unsigned char xdata var1;

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    46/75

    B mnK Thut in T -HBK

    8051 Memory Usage

    In a single chip 8051 application data memory isscarce 128 or 256 bytes on most 8051 derivatives

    Always declare variables as the smallest possibledata type Declare flags to be of type bit

    Use chars instead of intswhen a variables magnitudecan be stored as 8 bits

    Use code memory to store constants and strings

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    47/75

    B mnK Thut in T -HBK

    I/O PROGRAMMING

    47

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    48/75

    B mnK Thut in T -HBK

    Byte Size I/O

    48

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    49/75

    B mnK Thut in T -HBK 49

    Byte Size I/O (cont)

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    50/75

    B mnK Thut in T -HBK 50

    Byte Size I/O (cont)

    /O

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    51/75

    B mnK Thut in T -HBK

    Bit-addressable I/O

    51

    Bi dd bl I/O ( )

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    52/75

    B mnK Thut in T -HBK 52

    Bit-addressable I/O (cont)

    Bit dd bl I/O ( t)

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    53/75

    B mnK Thut in T -HBK 53

    Bit-addressable I/O (cont)

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    54/75

    B mnK Thut in T -HBK

    Accessing SFR Addresses 80 - FFH

    54

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    55/75

    B mnK Thut in T -HBK 55

    Accessing SFR Addresses 80 FFH (cont)

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    56/75

    B mnK Thut in T -HBK

    Using bit Data Type for Bit-addressable RAM

    56

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    57/75

    B mnK Thut in T -HBK

    LOGIC OPERATIONS

    57

    Bit i O t i C

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    58/75

    B mnK Thut in T -HBK

    Bit-wise Operators in C

    58

    Bit i O t i C ( t)

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    59/75

    B mnK Thut in T -HBK 59

    Bit-wise Operators in C (cont)

    Bit i O t i C ( t)

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    60/75

    B mnK Thut in T -HBK 60

    Bit-wise Operators in C (cont)

    Bit i O t i C ( t)

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    61/75

    B mnK Thut in T -HBK 61

    Bit-wise Operators in C (cont)

    Bit i O t i C ( t)

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    62/75

    B mnK Thut in T -HBK 62

    Bit-wise Operators in C (cont)

    Bit i O t i C ( t)

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    63/75

    B mnK Thut in T -HBK 63

    Bit-wise Operators in C (cont)

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    64/75

    B mnK Thut in T -HBK

    DATA CONVERSION

    64

    Packed BCD to ASCII Con ersion

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    65/75

    B mnK Thut in T -HBK

    Packed BCD to ASCII Conversion

    65

    ASCII to Packed BCD Conversion

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    66/75

    B mnK Thut in T -HBK

    ASCII to Packed BCD Conversion

    66

    Binary (hex) to Decimal and ASCII Conversion

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    67/75

    B mnK Thut in T -HBK

    Binary (hex) to Decimal and ASCII Conversion

    67

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    68/75

    B mnK Thut in T -HBK

    ACCESSING CODE ROM

    68

    RAM Data Space Usage by 8051 C Compiler

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    69/75

    B mnK Thut in T -HBK

    RAM Data Space Usage by 8051 C Compiler

    69

    RAM Data Space Usage by 8051 C Compiler (cont)

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    70/75

    B mnK Thut in T -HBK

    RAM Data Space Usage by 8051 C Compiler (cont )

    70

    RAM Data Space Usage by 8051 C Compiler (cont)

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    71/75

    B mnK Thut in T -HBK

    RAM Data Space Usage by 8051 C Compiler (cont )

    71

    Accessing code rom Example 1

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    72/75

    B mnK Thut in T -HBK

    Accessing code rom Example 1

    72

    Accessing code rom Example 2

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    73/75

    B mnK Thut in T -HBK

    Accessing code rom Example 2

    73

    Accessing code rom Example 2 (cont)

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    74/75

    B mnK Thut in T -HBK

    Accessing code rom Example 2 (cont )

    74

    Ti liu tham kho

  • 7/22/2019 Vxl Ch06 Laptrinhc8051 p1

    75/75

    Ti liu tham kho

    H Trung M, Vi x l, Nh xut bn i hc Quc GiaTp. HCM - 2003

    I. Scott MacKenzie , The 8051 Microcontroller, 2ndEdition, Prentice-Hall, 1995

    Derek Molloy, EE402 - Lecture note Slide bi ging thy H Trung M

    Thomas W.Schultz, C and the 8051 Second Edition.

    Dogan Ibrahim, Microcontroller Projects in C for the8051, Newnes 2000.

    V nhiu ti liu trn mng.