Tải bản đầy đủ (.pdf) (21 trang)

L P TRÌNH H TH NG NHÚNGBÙI QU C B OVi ñi u khi n 8051BM K Thu t .i n T - .H Bách Khoa TP.HCM21.Vi ñi u khi n 8051BM K Thu t .i n T - .H Bách Khoa TP.HCM3Ph n m mKEIL PROTEUSBM K Thu t .i n T - .H Bách Khoa TP.HCM42.C u trúc b nh pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.04 MB, 21 trang )

1
BÙI QUỐC BẢO
LẬP TRÌNH HỆ THỐNG
NHÚNG
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
2
Vi ñiều khiển 8051
2
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
3
Vi ñiều khiển 8051
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
4
Phần mềm

KEIL

PROTEUS
3
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
5
Cấu trúc bộ nhớ của 8051
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
6
4
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
7
Cấu trúc bộ nhớ của 8051

8051 có 3 vùng nhớ riêng biệt (bộ nhớ
chương trình, bộ nhớ dữ liệu trong, bộ


nhớ dữ liệu ngoài). Mỗi vùng nhớ ñược
truy cập bằng các câu lệnh khác nhau.

Khi khai báo các biến, ta phải xác ñịnh
vùng nhớ cho các biến ñó.
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
8
Cấu trúc bộ nhớ của ARM7
LPC2000
Các vi xử lý có kiến trúc Von-
Newman (VD: ARM) dùng
chung 1 không gian nhớ cho
bộ nhớ chương trình và dữ
liệu.
5
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
9
Không gian bộ nhớ chương trình

ðược gọi là code space

Chứa chương trình và các hằng số

VD: khai báo hằng số chứa bình phương
các số từ 0 ñến 3:
code char square[4] = {0,1,4,9};

Lệnh assembly: MOVC A, @A+DPTR
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
10

Không gian bộ nhớ dữ liệu nội

Vùng nhớ nội truy xuất trực tiếp (00H-7FH) ñược ký
hiệu là data

Lệnh assembly: MOV A, 7FH

Vùng nhớ nội truy xuất gián tiếp (00H-FFH), ñược ký
hiệu idata

Lệnh assembly:

MOV R0, #80H

MOV A, @R0

Hai vùng nhớ này dùng ñể chứa các biến thường
dùng và biến tạm

VD: khai báo một biến integer:

idata unsigned int temp;
6
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
11
Không gian bộ nhớ dữ liệu ngoài

ðược gọi là external data space (xdata)

Lnh assembly:


MOV DPTR, #2000H

MOVX A,@DPTR

Chứa các biến ít dùng, các khối dữ liệu lớn
hoặc ngoại vi theo kiểu memory-mapped

VD:

xdata unsigned int[1000] ADC_value;
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
12

VD:

Viết hàm có prototype như sau:
unsigned int
checksum (unsigned int
start, unsigned int end)
ñể tính checksum của vùng nhớ
chng trình từ ñịa chỉ start ñến end
(code)
7
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
13
unsigned int checksum (unsigned int start, unsigned int end)
 {
 unsigned int code *codeptr, *codeend;
 unsigned int data checksum = 0;


codeptr = (unsigned int code *)start;
 codeend = (unsigned int code *)end;

while (codeptr <= codeend)
 {
 checksum = checksum + (unsigned int data)*codeptr;
 codeptr++; /* go to the next address */
 }
 return (checksum);
 }
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
14
Các kiêủ thông dụng
0 to 4,294,697,295
432unsigned long
-2,147,483,648 to 2,147,483,647
432long
0 to 65,535216unsigned int
-32,768 to +32,767216int
0 to 65,535216unsigned short
-32,768 to +32,767216short
-32,768 to +32,767
216enum
0 to 255 18unsigned char
-128 to +12718char
RangeBytesBitsType
8
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
15

Kiêủ float và double

Trong C51, kiểu float và double giống
nhau, gồm 4 byte theo chuẩn
EEE-754
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
16
Các kiểu ñặc biệt của C51
0 to 65,535 216sf16
0 to 25518sfr
0 or 11sbit
0 or 11bit
RangeBytesBitsType
9
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
17
Thanh ghi

Keil cho phép khai báo các thanh ghi
bằng từ khóa sfr

VD:

sfr P0 = 0x80; //khai báo thanh ghi P0 ở
//ñịa chỉ 80H

P0 = 0x0F;
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
18
Tác ñộng ñến bit trong SFR


8051 có các lệnh tác ñộng ñến bit. ðể
tác ñộng ñến bit trong thanh ghi ta dùng
khai báo sbit

sbit name = sfr-name ^ bit-position;

sbit name = sfr-address ^ bit-position;
sbit name = sbit-address;
10
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
19
Tác ñộng ñến bit trong SFR

sfr PSW = 0xD0;

sbit CY = PSW^7;

sbit CY = 0xD0^7;

sbit CY = 0xD7;
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
20
Tác ñộng ñến bit trong SFR

sfr char P0 = 0x80;

sbit SW = P0^0;

void main(void)


{

while(1)

{

SW = !SW;

}

}
ðịa chỉ của các biến sfr,
sfr16, sbit phải nằm bên
ngoài hàm.
11
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
21
Vùng nhớ ñược ñịnh ñịa chỉ bit

8051 có vùng nhớ ñược ñịnh ñịa chỉ bit. ðể
tác ñộng ñến vùng nhớ này ta dùng khai báo
bdata

bdata char temp _at_ 0x2F;

bit flag = temp ^0;

void main(void)


{
flag = 1;
}
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
22

Lưu ý:

Các khai báo code, idata, xdata, bdata,
sfr, sbit là ñặc biệt cho trường hợp lập
trình 8051.
12
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
23

VD:

Viết chương trình cho 8051 tạo hàm như
sau:

P1.0 = P1.1 AND P1.2
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
24
Cấu trúc vòng lặp vô tận (endless
loop)
void main(void)
{
Task1_init();
Task2_init();
While(1)

//mt vòng lp vô tn thc hin task1 và task2
{
Task1();
Task2();
}
}
13
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
25
Endless loop

Ưu ñiểm:

ðơn giản.

Dễ thực hiện, sửa lỗi và bảo trì

Không cần sử dụng nhiều tài nguyên hệ
thống (VD: timer)

Dễ dàng thay ñổi ñể chạy với các vi xử lý
khác (portable)
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
26
Endless loop

Nhược ñiểm:

Không phù hợp với các ứng dụng ñòi hỏi
thời gian chính xác (VD: ñồng hồ số).


Tiêu tốn năng lượng vì CPU hoạt ñộng ở
chế ñộ bình thường trong toàn bộ thời gian
14
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
27
Look-up table
unsigned char code
square[]={0,1,4,9,16,25,36,49,64,81};
unsigned char cal_square(unsigned char num)
{
return square[num];
}
Assembly:
MOV A,R7
MOV DPTR, #SQUARE
MOVC A,@A+DPTR
MOV R7,A
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
28
15
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
29
Question

ðịa chỉ của LED 7 ñoạn là bao nhiêu?

ðể làm LED hiển thị số 8, ta dùng lệnh
cho 8051 như thế nào? (dùng assembly
và C)


Xây dựng bảng mã 7 ñoạn cho LED (cho
các số lớn hơn 9 tắt tất cả ñoạn LED).

Viết chương trình C ñọc giá trị từ 4 SW
và hiển thị lên LCD. (Dùng bảng tra ñể
lấy mã 7 ñoạn).
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
30
Giao tiếp switch

Switch là 1 trong những phương pháp
giao tiếp chính của hệ thống nhúng

Các contact cơ khí sẽ bị “rung” khi ñóng
hoặc mở.
16
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
31
Chống rung
Not pressed
Press
detected
delay
Read again
Confirmed
Press
detected
delay
Read again

Just a bounce
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
32
Giao tiếp switch
Với 8051,
trước khi ñọc
switch ta phải
ghi “1” ra bộ
chốt của chân
port ñang giao
tiếp switch
17
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
33

Viết chương trình C ñọc giá trị switch (có
chống rung) và xuất ra LED.
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
34
Giao tiếp keypad
18
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
35
Giao tiếp keypad

Chương trình getkey():

Giá trị trả về: mã phím (0-15) hoặc 255
nếu không có phím nhấn.


Vẽ lưu ñồ

Viết code C
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
36
Giao tiếp keypad

Chương trình getkey_Debound()

Giá trị trả về: mã phím (0-15) hoặc 255
nếu không có phím nhấn.

Cách thực hiện:

Nếu trong 20 lần liên tiếp gọi chương
trình getkey() trả về cùng 1 giá trị, thì ñó
là giá trị trả về của getkey_Debound().
19
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
37
Giao tiếp keypad

Vẽ lưu ñồ cho chương trình
getkey_Debound()

Viết code C
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
38
20
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM

39
Giao tiếp keypad

Viết chương trình getCalKey_Debound():

Giá trị trả về là 1 trong các ký tự:

‘0’, ‘1’, ‘2’, ’3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘C’,
‘=‘, ‘+’, ‘-’, ‘x’, ‘/’ hoặc ‘N’ nếu không có
phím ñược nhấn
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
40
Hàm printf()

Hàm printf() rất có ích trong quá trình viết và
debug chương trình.

Mặc ñịnh, hàm printf xuất 1 chuỗi ký tự ra
serial port của 8051

Cấu trúc:

int printf ( const char * format, );

Chi tiết tham khảo tại:

/>tdio/printf/
21
BM Kỹ Thuật ðiện Tử - ðH Bách Khoa TP.HCM
41

Thư viện của Keil C

Keil C hỗ trợ rất nhiều thư viện như thư
viện xuất nhập (stdio), toán (math), …

Các thư viện và hàm của Keil C có thể
tham khảo tại:
/>1/c51_library.htm

×