Upload
vuong-cai
View
218
Download
0
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.