75
ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN KỸ THUẬT ĐIỆN TỬ 1 CHƯƠNG 5 Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK Tp. HCM

Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC BÁCH KHOAKHOA ĐIỆN-ĐIỆN TỬ

BỘ MÔN KỸ THUẬT ĐIỆN TỬ

11

CHƯƠNG 5

Lập trình C cho 8051

(Phần 1)

Bùi Minh Thành

Bộ môn Kỹ thuật Điện tử - ĐHBK Tp. HCM

Page 2: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 2

Nội dung

1. Cơ bản về ngôn ngữ C

2. Các lệnh rẽ nhánh và vòng lặp

3. Sử dụng con trỏ và mảng trong C

4. Các hàm và chương trình con

5. Chèn assembly code trong C

6. Mô hình bộ nhớ Keil C51

Page 3: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 3

Nội dung

1. Cơ bản về ngôn ngữ C

2. Các lệnh rẽ nhánh và vòng lặp

3. Sử dụng con trỏ và mảng trong C

4. Các hàm và chương trình con

5. Chèn assembly code trong C

6. Mô hình bộ nhớ Keil C51

Page 4: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Giới thiệu

• C là ngôn ngữ gần ngôn ngữ assembly nhất trong tất cả các ngôn ngữ cấp cao

– Lệnh tính toán trên bit

– Con trỏ (định địa chỉ gián tiếp)

• Phần lớn các vi điều khiển đều có C compiler

• Việc phát triển các ứng dụng dùng C sẽ nhanh chóng và thuận lợi hơn assembly.

• C là ngôn ngữ lập trình cấu trúc (không phải là hướng đối tượng)

• Mỗi tác vụ có thể được đóng gói trong một hàm

• Chương trình chính được đóng gói trong hàm main.4

Page 5: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện 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

Page 6: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Cấu trúc một chương trình trong C

• Các câu lệnh trong C kết thúc bằng dấu “;”

• C phân biệt chữ hoa và chữ thường

• Khi viết chương trình cần chú ý viết chú thích

6

Page 7: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Các loại biến trong C

7

Dạng biến Số bit Số byte Miền giá trị

Char 8 1 -128 đến 127

Unsigned char 8 1 0 đến 255

Enum 16 2 -32.768 đến 32.767

Short 16 2 -32.768 đến 32.767

Unsigned short 16 2 0 đến 65.535

Int 16 2 -32.768 đến 32.767

Unsigned int 16 2 0 đến 65.535

Long 32 4 -2.147.483.648 đến 2.147.483.647

Unsigned long 32 4 0 đến 4.294.697.295

Dạng biến Số bit Số byte Miền giá trị

Bit 1 0 0 đến 1

Sbit 1 0 0 đến 1

Sfr 8 1 0 đến 255

Sfr16 16 2 0 đến 65.535

Ngoài ra keil C còn

hỗ trợ các loại biến

để truy xuất các

thanh ghi có chức

năng đặc biệt:

Page 8: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Các biến mở rộng 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

Page 9: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Ví dụ

9

Page 10: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Bảng hằng ký tự

10

Page 11: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Các toán tử cơ bản của 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 not equal?)

• Relational operators (boolean) a<b, a<=b, a>b, a>=b

• Logical operators a==b && a==c (AND), a==c||a<b (OR). Some compilers accept the and, or and not keywords.

• Bitwise operators << (left shift), >> (right shift), & (bit-wise AND), ^ (bit-wise XOR), | (bit-wise OR), ~ (bit complement)

11

Page 12: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Các toán tử cơ bản của C• Increment and decrement a++, a--, ++a, --a

• Unuary operators -a (negative of a), +I, (i), ! (negative logical values), !(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

Page 13: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Thứ tự ưu tiên

13

Page 14: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 14

Page 15: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 15

Nội dung

1. Cơ bản về ngôn ngữ C

2. Các lệnh rẽ nhánh và vòng lặp

3. Sử dụng con trỏ và mảng trong C

4. Chèn assembly code trong C

5. Mô hình bộ nhớ Keil C51

6. Các hàm và chương trình con

Page 16: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Các lệnh rẽ nhánh

• Cấu trúc if

• Cấu trúc If else

16

Page 17: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Các lệnh rẽ nhánh

• Cấu trúc switch

17

Page 18: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Các lệnh vòng lặp• Lệnh While

• Lệnh do while

18

Page 19: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Các lệnh vòng lặp

• Lệnh for

19

Page 20: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 20

Nội dung

1. Cơ bản về ngôn ngữ C

2. Các lệnh rẽ nhánh và vòng lặp

3. Sử dụng con trỏ và mảng trong C

4. Chèn assembly code trong C

5. Mô hình bộ nhớ Keil C51

6. Các hàm và chương trình con

Page 21: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Con trỏ trong Assembly

• Đối với ngôn ngữ assembly, thì con trỏ trong C gần như tương đương với định địa chỉ gián tiếp và nó tương đương với việc sử dụng các thanh ghi R0 và R1 làm con trỏ trong vùng bộ nhớ trong hoặc giá trị 2bytes đặt trong DPTR để trỏ đến vùng RAM ngoài– MOV R0,#40 R0 chứa giá trị 40

– MOV R0,#40

– MOVX A,@R0 R0 trỏ đến địa chỉ 40 ở bộ nhớ ngoài

• Ta cũng có thể sử dụng DPTR chỉ đến 64kB bộ nhớ ngoài– MOVX A,@DPTR đọc bộ nhớ ngoài

21

Page 22: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Pointer trong C• Mỗi biến trong C có 2 thành phần:

– Giá trị được lưu trong biến đó

– Địa chỉ của biến đó trong bộ nhớ

• Pointer là một biến dùng để lưu giữ địa chỉ của một biến khác, và biến mà pointer trỏ đến là một biến cơ bản.

• Cú pháp của con trỏ:

unsigned char *pointer0;

– Dấu hoa thị phía trước có nghĩa là nội dung chứa trong con trỏ là một địa chỉ chứ không phải là phần dữ liệu để sử dụng tính toán. Kiễu dữ liệu của biến mà pointer0 trỏ đến là unsigned char

22

Page 23: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Pointer trong C

23

Page 24: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Mảng trong C

• Mảng là một biến cấu trúc trong đó có nhiều phần tử cùng kiểu, mỗi phần tử là một biến thành phần của mảng. Mỗi biến thành phần này là một biến bình thường và có ước số (subscript) để phân biệt giữa phần tử này và phần tử kia.

• Cú pháp của mảng

Mảng một chiều:

kiểu tên_mảng*kích_thước+;

Mảng hai chiều:

kiểu tên_mảng*kích_thước_chiều1+*kích_thước chiều2];

• Ví dụ:

unsigned char a[10];

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

24

Page 25: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Con trỏ và Mảng

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];

Page 26: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Các ví dụ

26

Page 27: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 27

Page 28: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 28

Page 29: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 29

Page 30: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 30

Nội dung

1. Cơ bản về ngôn ngữ C

2. Các lệnh rẽ nhánh và vòng lặp

3. Sử dụng con trỏ và mảng trong C

4. Các hàm và chương trình con

5. Chèn assembly code trong C

6. Mô hình bộ nhớ Keil C51

Page 31: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Hàm và chương trình con

• Các hàm thường 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;

}

• Còn các chương trình con thì không có giá trị trả về, mà nó chỉ thực hiện các lệnh bên trong chương trình và sau đó quay về lại chương trình chính:

31

void delay(int time) {

while(time--) {

; /*Khong lam gi ca*/

}

}

Page 32: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

• Viết chương trình cho led chớp tắt

32

Page 33: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Sử dụng hàm

33

Page 34: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Function prototype

34

Page 35: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Function prototype

35

//Khai báo rồi định nghĩa hàm sau.

Page 36: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Truyền đối số bằng giá trị và bằng tham khảo

36

Page 37: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 37

Nội dung

1. Cơ bản về ngôn ngữ C

2. Các lệnh rẽ nhánh và vòng lặp

3. Sử dụng con trỏ và mảng trong C

4. Các hàm và chương trình con

5. Chèn assembly code trong C

6. Mô hình bộ nhớ Keil C51

Page 38: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Inline assembly

• When it is more efficient, or easier, can insert assembly code in C programs.

#pragma asm

//put your assembly code here

#pragma endasm

38

Page 39: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 39

Chương trình switch

và led:

Page 40: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 40

Nội dung

1. Cơ bản về ngôn ngữ C

2. Các lệnh rẽ nhánh và vòng lặp

3. Sử dụng con trỏ và mảng trong C

4. Các hàm và chương trình con

5. Chèn assembly code trong C

6. Mô hình bộ nhớ Keil C51

Page 41: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

C51 Memory Models

• Small

– All variables stored in internal data memory

• Be careful –stack 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

Page 42: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

C51 Memory Models (con’t)

Page 43: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

C51 Memory Models (con’t)

• 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 <memory_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 and can only be indirectly addressed

– Can be expanded to 64KBytes off-chip

Page 44: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

C51 Memory Models (con’t)

• 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)

Page 45: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

C51 Memory Models (con’t)

• 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;

Page 46: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

8051 Memory Usage

• In a single chip 8051 application data memory is scarce

– 128 or 256 bytes on most 8051 derivatives

• Always declare variables as the smallest possible data type

– Declare flags to be of type bit

– Use chars instead of intswhen a variable’s magnitude can be stored as 8 bits

• Use code memory to store constants and strings

Page 47: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

I/O PROGRAMMING

47

Page 48: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Byte Size I/O

48

Page 49: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 49

Byte Size I/O (cont’)

Page 50: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 50

Byte Size I/O (cont’)

Page 51: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Bit-addressable I/O

51

Page 52: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 52

Bit-addressable I/O (cont’)

Page 53: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 53

Bit-addressable I/O (cont’)

Page 54: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Accessing SFR Addresses 80 - FFH

54

Page 55: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 55

Accessing SFR Addresses 80 – FFH (cont’)

Page 56: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Using bit Data Type for Bit-addressable RAM

56

Page 57: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

LOGIC OPERATIONS

57

Page 58: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Bit-wise Operators in C

58

Page 59: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 59

Bit-wise Operators in C (cont’)

Page 60: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 60

Bit-wise Operators in C (cont’)

Page 61: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 61

Bit-wise Operators in C (cont’)

Page 62: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 62

Bit-wise Operators in C (cont’)

Page 63: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 63

Bit-wise Operators in C (cont’)

Page 64: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

DATA CONVERSION

64

Page 65: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Packed BCD to ASCII Conversion

65

Page 66: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

ASCII to Packed BCD Conversion

66

Page 67: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Binary (hex) to Decimal and ASCII Conversion

67

Page 68: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

ACCESSING CODE ROM

68

Page 69: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

RAM Data Space Usage by 8051 C Compiler

69

Page 70: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

RAM Data Space Usage by 8051 C Compiler (cont’)

70

Page 71: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

RAM Data Space Usage by 8051 C Compiler (cont’)

71

Page 72: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Accessing code rom – Example 1

72

Page 73: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Accessing code rom – Example 2

73

Page 74: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Accessing code rom – Example 2 (cont’)

74

Page 75: Lập trình C cho 8051 - hcmut.edu.vnbmthanh/ViXuLy/VXL-Ch06-LapTrinhC8051_P1.pdf · Lập trình C cho 8051 (Phần 1) Bùi Minh Thành Bộ môn Kỹ thuật Điện tử - ĐHBK

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Tài liệu tham khảo

• Hồ Trung Mỹ, Vi xử lý, Nhà xuất bản Đại học Quốc Gia Tp. HCM - 2003

• I. Scott MacKenzie , The 8051 Microcontroller, 2nd Edition, Prentice-Hall, 1995

• Derek Molloy, EE402 - Lecture note

• Slide bài giảng thầy Hồ Trung Mỹ

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

• Dogan Ibrahim, Microcontroller Projects in C for the 8051, Newnes – 2000.

• Và nhiều tài liệu trên mạng.

75