tài liệu về vi xử lý
Trang 1Chương 4: Lập trình cho hệ
vi điều khiển
Trang 2Nội dung
4.1 Cơ bản về lập trình C cho VĐK
4.2 Các lệnh rẽ nhánh và vòng lặp
4.3 Sử dụng con trỏ và mảng trong C 4.4 Các hàm và chương trình con
4.5 Chèn Assembly code trong C
Trang 3Nội dung
4.1 Cơ bản về lập trình C cho VĐK
4.2 Các lệnh rẽ nhánh và vòng lặp
4.3 Sử dụng con trỏ và mảng trong C 4.4 Các hàm và chương trình con
4.5 Chèn Assembly code trong C
Trang 44.1 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 VĐK đề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ó cấu trúc (không phải là
hướng đối tượng)
• Mỗi tác vụ có thể đóng gói trong một hàm
• Chương trình chính được đóng gói trong hàm main
Trang 5Cấu trúc một chương trình trong C
Trang 6Các loại biến trong C
Trang 7Các loại biến trong C
• Khai báo biến:
– Cú pháp kiểu_dữ_liệu Vùng_nhớ tên_biến
– Ví dụ: unsigned char data x;
unsigned int x,y,z,t;
• Vùng nhớ: chỉ ra vùng nhớ sử dụng trong chương trình, gồm CODE,
DATA, DATAB, IDATA, PDATA, XDATA Khi không khai báo vùng nhớ
thì Keil C mặc định là vùng DATA
CODE: bộ nhớ mã nguồn chương trình
DATA: bộ nhớ dữ liệu 128byte thấp trong RAM
DATAB: bộ nhớ dữ liệu có thể địa chỉ bit, trong DATA
IDATA: 128byte cao (chỉ có ở 1 số VĐK)
PDATA: bộ nhớ ngoài 256byte, truy cập bởi địa chỉ trên P0
XDATA: bộ nhớ dữ liệu ngoài, dung lượng đến 64KB, truy cập bởi địa chỉ đặt trên P0 và P2
Trang 8Các loại biến trong C
• Định nghĩa lại kiểu dữ liệu:
– Cú pháp: typedef kiểu_dữ_liệu tên_biến;
tên_biến sau đó được dùng như một kiểu dữ liệu mới và
có thể dùng để khai báo các biến khác
Trang 9Các loại biến trong C
– Ví dụ: unsigned int data a[5],b[2] [3];
Khai báo mảng a một chiều 5 phần tử; mảng b là
mảng hai chiều, tổng số 6 phần tử
– Chú ý: Chỉ số mảng bắt đầu từ 0, mảng có bao nhiêu
chiều phải cung cấp đầy đủ bấy nhiêu chỉ số: VD mảng b*0+ *1+ là đúng; khi viết b*0+ là sai
Trang 10Các loại biến trong C
• Con trỏ: là một biến dùng để chứa địa chỉ mà không chứa giá trị hay giá trị con trỏ chính là địa chỉ khoảng nhớ mà nó trỏ tới
• Khai báo:
– Cú pháp: kiểu_dữ_liệu vùng_nhớ *tên_biến
– Ví dụ: int *int_ptr
long data *long_ptr
Chú ý: khi không chỉ rõ vùng nhớ thì con trỏ sẽ được coi là con trỏ tổng quát
Loại con trỏ
Tổng quát XDATA CODE DATA IDATA PDATA
Kích thước 3byte 2byte 2byte 1byte 1byte 1byte
Trang 11Các biến mở rộng trong Keil C
Trang 12Nội dung
4.1 Cơ bản về lập trình C cho VĐK
4.2 Các lệnh rẽ nhánh và vòng lặp
4.3 Sử dụng con trỏ và mảng trong C 4.4 Các hàm và chương trình con
4.5 Chèn Assembly code trong C
Trang 13Các lệnh rẽ nhánh
Trang 14Các lệnh rẽ nhánh
Trang 15Các lệnh vòng lặp
Trang 16Các lệnh vòng lặp
Trang 18Con trỏ trong Assembly
Trang 19Con trỏ trong C
Trang 20Con trỏ trong C
Trang 21Mảng trong C
Trang 22Con trỏ và mảng
Trang 23Ví dụ
Trang 24Ví dụ
Trang 25Ví dụ
Trang 26Ví dụ
Trang 28Giới thiệu
Trang 29Ví dụ
Trang 30Sử dụng hàm
Trang 33Truyền đối số bằng giá trị và bằng
tham khảo
Trang 34Nội dung
4.1 Cơ bản về lập trình C cho VĐK
4.2 Các lệnh rẽ nhánh và vòng lặp
4.3 Sử dụng con trỏ và mảng trong C 4.4 Các hàm và chương trình con
4.5 Chèn Assembly code trong C
Trang 35Inline assembly
Trang 36Ví dụ:
Trang 37Nội dung
4.1 Cơ bản về lập trình C cho VĐK
4.2 Các lệnh rẽ nhánh và vòng lặp
4.3 Sử dụng con trỏ và mảng trong C 4.4 Các hàm và chương trình con
4.5 Chèn Assembly code trong C
Trang 38Mô hình bộ nhớ C51
Trang 39Mô hình bộ nhớ C51
Trang 40Nội dung
4.1 Cơ bản về lập trình C cho VĐK
4.2 Các lệnh rẽ nhánh và vòng lặp
4.3 Sử dụng con trỏ và mảng trong C 4.4 Các hàm và chương trình con
4.5 Chèn Assembly code trong C
Trang 42Giới thiệu
Trang 43Giới thiệu
Trang 44Giới thiệu
Trang 45Ví dụ 1
Trang 46Ví dụ 2
Trang 47Ví dụ 2
Trang 48Ví dụ 3
Trang 49Counter – Ví dụ 4
Trang 50Counter – Ví dụ 4
Trang 52Giới thiệu (nhắc lại)
Trang 53Hoạt động
Trang 54Ví dụ
Trang 56Giới thiệu
Trang 57Thanh ghi IE và IP
Trang 58Địa chỉ vector ngắt
Trang 59Ngắt Timer
Trang 60Ngắt Timer
Trang 61Ngắt Timer
Trang 62Ngắt Timer và cổng nối tiếp
Trang 63Code VD3
Trang 64Một số bài tập
Trang 653 Bài tập 3: Viết chương trình tạo xung 1Khz, duty cycle là
40% trên chân P1.7, trong khi đó liên tục phát chuỗi ký tự
“Hello world” ra LCD 16x2
4 Bài tập 4: Viết chương trình nhận một ký tự từ cổng nối tiếp
– Nếu k{ tự này từ a – z thì chuyển sang hoa A – Z rồi phát ra cổng nối tiếp
– Ngược lại thì phát nó ra cổng nối tiếp
– Trong khi đó liên tục tao xung vuông 500Hz trên chân P1.3
Yêu cầu dùng ngắt cổng nối tiếp, thạch anh 12Mhz, tốc độ baud
9600