1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Đề cương bài giảng vi điều khiển

75 147 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 75
Dung lượng 3,83 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

- Chuyển đổi tương tự sang số ADC: Khối này có nhiệm vụ chuyển đổi thông tin dưới dạng một vài giá trị tương tự thành một số nhị phân và đưa tới đơn vị xử lí trung tâm.. Hệ thống số bát

Trang 1

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN

KHOA CƠ KHÍ ĐỘNG LỰC

BÀI GIẢNG HỌC PHẦN: VI ĐIỀU KHIỂN

SỐ TÍN CHỈ: 02

LOẠI HÌNH ĐÀO TẠO: ĐẠI HỌC CHÍNH QUY NGÀNH: CÔNG NGHỆ KỸ THUẬT Ô TÔ

Hưng Yên - 2015

Trang 2

Chương 1 TỔNG QUAN 4

1.1 Khái niệm 4

1.2 Các dòng vi điều khiển phổ biến trên thị trường 4

1.3 Các hệ thống số 5

1.3.1 Hệ thống số thập phân 5

1.3.2 Hệ thống số nhị phân 5

1.3.3 Hệ thống số bát phân (BCD-Binary Coded Decimal) 6

1.3.4 Hệ thống số thập lục (Hexade imall) 6

1.3.5 Số bù hai 7

1.3.6 Các phép toán số học đối với hệ nhị phân 7

1.3.6.1 Phép cộng nhị phân không dấu 7

1.3.6.2 Phép trừ nhị phân 7

1.3.6.3 Phép nhân nhị phân 7

1.3.6.4 Phép chia nhị phân 8

1.3.7 Chuyển đổi qua lại giữa các hệ thống số 8

1.3.7.1 Chuyển đổi số thập phân sang nhị phân : 8

1.3.7.2 Chuyển đổi số nhị phân sang thập phân 8

1.3.7.3 Chuyển đổi số nhị phân sang Hexa : 8

1.3.7.4 Chuyển đổi số Hexa sang nhị phân: 9

1.3.7.5 Mã ASCII: (American Standard Code for Information Interchange ) 9

Chương 2 CẤU TRÚC PHẦN CỨNG VÀ NGÔN NGỮ LẬP TRÌNH C 11

2.1 Cấu trúc phần cứng của vi điều khiển 8051 11

2.2 Sơ đồ chân 11

2.2.1 Nhóm chân nguồn, dao động, điều khiển 12

2.2.2 Nhóm chân cổng vào ra 13

2.3 Tổ chức không gian bộ nhớ 14

2.3.1 Bản đồ bộ nhớ ROM của 8051 14

2.3.2 Tổ chức không gian bộ nhớ RAM của 8051 15

2.4 Thanh ghi 17

2.4.1 Thanh ghi tích luỹ A: 18

2.4.2 Thanh ghi từ trạng thái PSW (hay còn gọi là thanh ghi cờ) : 18

2.4.3 Thanh ghi điều khiển bộ đếm bộ định thời (TCON) 18

2.4.4 Thanh ghi điều khiển chế độ bộ định thời/bộ đếm (TMOD) 19

2.4.5 Thanh ghi cho phép ngắt IE 20

Trang 3

2.5 Ngôn ngữ lập trình C cho vi điều khiển 20

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

2.5.2 Lời chú thích 21

2.5.3 Các loại kiểu dữ liệu trong C 21

2.5.4 Các hàm trong C 23

2.5.5 Các toán tử 24

2.5.6 Phép toán lấy địa chỉ biến (&) 26

2.5.7 Phép toán chuyển đổi kiểu (bắt buộc) 26

2.5.8 Các định dạng 26

2.5.9 Cấu trúc điều khiển 27

2.5.9.1 Cấu trúc rẽ nhánh 27

2.5.9.2 Cấu trúc lựa chọn switch 27

2.5.9.3 Vòng lặp có hạn for 28

2.5.9.4 Vòng lặp không xác định while 28

2.5.9.5 Một số thư viện chuẩn của C 28

2.5.9.6 Các từ khóa trong C 29

2.5.9.10 con trỏ và mảng 29

2.6 Thuật toán và lưu đồ thuật toán 33

2.6.1 Khái niệm 33

2.6.2 Biểu diễn thuật toán bằng sơ đồ khối 33

CHƯƠNG 3 LẬP TRÌNH ỨNG DỤNG 34

3.1 Các bước tạo một Project mới 34

3.2 Lập trình ứng dụng 40

3.2.1 Chương trình tạo trễ 40

3.2.2 Ứng dụng điều khiển LED đơn 40

3.2.3 Ứng dụng điều khiển 8 LED đơn 41

3.2.4 Ứng dụng điều khiển LED 7 thanh 43

3.2.5 Ứng dụng điều khiển LED ma trận 47

3.2.6 Ứng dụng sử dụng nút nhấn 48

3.2.7 Ứng dụng sử dụng ngắt ngoài 51

3.2.8 Lập trình cho Timer 55

3.2.8.1 Các thanh ghi cơ sở của bộ định thời 55

3.2.8.2 Lập trình cho timer ở chế độ 1 57

3.2.8.3 Lập trình cho Timer ở chế độ 2 59

Trang 4

3.2.8.4 Lập trình cho bộ đếm 60

3.2.9 Lập trình ngắt timer 62

3.2.10 Lập trình với bộ biến đổi A/D 65

3.2.11 Lập trình giao tiếp máy tính 67

3.2.11.1 Chế độ thu phát 67

3.2.11.2 Giao thức (protocol) 68

3.2.11.3 Tốc độ truyền 69

3.2.11.4 Bố trí chân của RS232 69

3.2.11.5 Ghép nối 8051 với RS232 71

3.2.11.6 Lập trình truyền thông nối tiếp cho 8051 71

3.2.11.7 Lập trình 8051 truyền dữ liệu nối tiếp 73

3.2.11.8 Lập trình 8051 nhận dữ liệu nối tiếp 73

3.2.11.9 Truyền dữ liệu bằng ngắt 74

Trang 5

Chương 1 TỔNG QUAN 1.1 Khái niệm

Hình 1.1 Cấu trúc chung của vi xử lí, vi điều khiển

- Vi xử lý: theo nghĩa rộng hơn chính là CPU, các khối chức năng như bộ nhớ và các thiết

bị ngoại vi khác phải được ghép từ bên ngoài tới chíp vi xử lý để hình thành một bản mạch (board) vi xử lý hoàn chỉnh Hệ thống được thực hiện theo cách này được gọi là máy vi tính một bản mạch (single board) Thí dụ 8085, 8086, 80486 và các vi xử lý

- Vi điều khiển: là thiết bị mà tất cả các khối chức năng (RAM, ROM, CPU) nằm bên

trong một vi mạch đơn lẻ Hay còn gọi là máy tính “đơn chíp”

- Bộ nhớ: là một phần của vi điều khiển, có chức năng lưu trữ dữ liệu

- Đơn vị xử lý trung tâm: Khối này có chức năng thực hiện các phép tính số học, logic và

di chuyển dữ liệu từ ô nhớ này tới ô nhớ khác

- BUS: Các đường dẫn để di chuyển dữ liệu từ một khối này sang một khối khác được gọi

là BUS Về mặt vật lý, bus là một nhóm các đường dẫn, thường gồm 8, 16 đường dẫn hoặc có thể nhiều hơn Các bus chia làm 2 loại: bus địa chỉ và bus dữ liệu bus địa chỉ bao gồm số đường dẫn tương ứng với dung lượng bộ nhớ mà ta muốn định địa chỉ Bus dữ liệu có độ rộng bằng độ rộng dữ liệu, thường vi điều khiển là 8 bit hoặc 8 đường kết nối

- Khối vào ra: có chức năng giao tiếp với các thiết bị ngoại vi

- Chuyển đổi tương tự sang số (ADC): Khối này có nhiệm vụ chuyển đổi thông tin dưới dạng một vài giá trị tương tự thành một số nhị phân và đưa tới đơn vị xử lí trung tâm

- Chương trình: Sử dụng các câu lệnh được sắp xếp theo một quy tắc chặt chẽ, nhằm truyền tải mong muốn của con người tới vi điều khiển

1.2 Các dòng vi điều khiển phổ biến trên thị trường

- Họ vi điều khiển 8051

- Vi điều khiển PIC

- Vi điều khiển AVR

Trang 6

1.3 Các hệ thống số

1.3.1 Hệ thống số thập phân

Hệ đếm thập phân còn gọi là hệ đếm cơ số mười và nó được biểu diễn bởi 10 con số từ (0,1,2,3,4,5,6,7,8,9 ) những con số này được sử dụng rất nhiều trong khoa học kỹ thuật cũng như trong đời sống hàng ngày, khi biểu diễn số thập phân thì dứng sau dãy số thường có chữ D

Ví dụ: Ba nghìn Chin trăm Bảy mươi Tám được biểu diễn như sau

Ví dụ : (1101) = 1x2^3 + 1x2^2 + 0x2^1 + 1x2^0 = 8 + 4 + 0 + 1 = 13

Giải giá trị của các số có dấu 8 bit là: -128 đến 127 Giải giá trị của các số có dấu 16 bit là: -32768 đến 32767 Trong khi biểu diễn dãy số nhị phân có dấu thì người ta sử dụng bít MSB để quy ước cho bít dấu, với bít 0 cho dãy số nhị phân dương còn bít 1 cho dãy số nhị phân âm

Trang 7

1.3.3 Hệ thống số bát phân (BCD-Binary Coded Decimal)

Số đếm BCD được định nghĩa là số thập phân nhưng được biểu diễn dưới dạng nhị phân

4 bít, nhưng dãy số nhị phân 4 bít này khi quy sang hệ thập phân thì giá trị của nó phải  9

.Trong kỹ thuật điện tử nói chung thì mã BCD được sử dụng để giải mã hiển thị LED bảy

Vídụ:3 7 h 1 CCh,1 9 h, ABCDh,2 0 h …

Trang 8

1.3.5 Số bù hai

Trong kỹ thuật Vi xử lý để biểu diễn một con số nào đó dưới dạng dãy số nhị phân thì ngoài việc biểu diễn số không dấu, số có dấu thì người ta còn sử dụng cách biểu diễn số bù 2 Vậy số

bù 2 sẽ biểu diễn như thế nào?

Ví dụ: Hãy biểu diễn dãy số A = 10011001 sang số bù 2 của nó:

b1: Tìm số bù 1 của A(bằng cách lấy bù tất cả các bit của A): 01100110

b2: Tìm số bù 2 của A (bằng cách lấy số bù 1 cộng cho 1) : 01100111

đến đây ta nhận thấy rằng số bù 2 của một số nào đó nó chính là số đối của nó và tổng =0

1.3.6 Các phép toán số học đối với hệ nhị phân

1.3.6.1 Phép cộng nhị phân không dấu

Quy ước:

0 + 0 = 0

0 + 1 = 1

1 + 1 = 0 nhớ 1

Ví dụ: Cho 2 số nhị phân như sau A = 10010011 ; B = 00111001 hãy tìm tổng Y

của 2 số nhị phân đã cho

Ví dụ : Cho 2 số nhị phân như sau A = 10010011 ; B = 00111001 hãy tìm hiệu Z

của 2 số nhị phân đã cho (Lưu ý rằng phép trừ có thể thực hiện bằng cách biến thành phép cộng

bằng cách cộng với số bù 2 )

1.3.6.3 Phép nhân nhị phân

Ví dụ : Cho 2 số nhị phân như sau A = 00100101 ; B = 00000100 hãy tìm tích F

Trang 9

Khi nhân 2 dãy số nhị phân với nhau thì ta đặt phép toán nhân giống như nhân số thập phân, kết quả của phép nhân 2 dãy số nhị phân 8 bít sẽ thu được dãy số nhị phân là 16 bít, như vậy ta có F = A*B = 0000000010010100b

1.3.6.4 Phép chia nhị phân

Ví dụ : Cho 2 số nhị phân như sau A = 10010110 ; B = 00000100 hãy tìm thương

Khi chia 2 dãy số nhị phân với nhau thì ta đặt phép toán chia cũng giống như khi chia

2 số thập phân, kết quả của phép chia cũng như phần dư (nếu có) thu được tương tự như khi làm phép chia đối với số thập phân, như vậy ta có M = A/B = 00100101b dư 0010b

1.3.7 Chuyển đổi qua lại giữa các hệ thống số

1.3.7.1 Chuyển đổi số thập phân sang nhị phân :

Để chuyển đổi số thập phân sang số nhị phân người ta thường dùng phương pháp lấy

số thập phân cần chuyển rồi chia 2 liên tiếp đến khi không thể chia được nữa thì dừng

Ví dụ : Chuyển số thập phân 25 sang số nhị phân không dấu

Kết quả thu được là: 11001 với số dư lần thứ nhất là bít có trọng số nhỏ nhất

1.3.7.2 Chuyển đổi số nhị phân sang thập phân

Để chuyển đổi số nhị phân sang số thập phân người ta thường dùng phương pháp lấy tổng của tích n các số nhị phân cần chuyển nhân với 20 đến 2N-1 hay theo biểu thức tổng quát như sau: A = B(N-1)* 2(N-1) + B(N-2)* 2(N-2) + B(N-3)* 2(N-3) + … + B(1)* 2(1) + B(0)* 2(0)

Ví dụ : Chuyển số nhị phân không dấu 01011110b sang số thập phân

A = 0*27 + 1*26 +0*25 + 1*24+ 1*23 + 1*22 + 1*21 + 0*20 = 94

như vậy ta có 01011110b = 94

1.3.7.3 Chuyển đổi số nhị phân sang Hexa :

Ví dụ : Chuyển số nhị phân 1100101011111110 sang số hexa

Trang 10

Trước hết ta chia số nhị phân đã cho thành các nhóm 4-bit tính từ bít có trọng số nhỏ nhất, sau đó thay thế mỗi nhóm 4-bit bằng ký hiệu hexa tương ứng với nó ta sẽ thu được kết quả như sau:

1100 1010 1111 1110 Kết quả

CAFEh

1.3.7.4 Chuyển đổi số Hexa sang nhị phân:

Ví dụ : Chuyển số hexa 2F8h và ABBAh sang số nhị phân

Tương tự như trường hợp trên ta sẽ thay thế mỗi ký hiệu hexa bằng 4-bit nhị phân tương ứng với nó và ta sẽ thu được kết quả như sau: (tham khảo chuyển đổi nhị phân sang hexa)

1.3.7.5 Mã ASCII: (American Standard Code for Information Interchange )

Quá trình trao đổi thông tin trong máy tính nói chung cũng như quá trình xử lý thông tin của các bộ vi xử lý, tất cả các thông tin đều được biểu diễn dưới dạng các số 0 và 1 Mỗi tổ hợp

số 0 hoặc 1 được gán một ký tự chữ cái, chữ số hoặc một ký tự đặc biệt nào đó Khi thông tin được truyền đi, được lưu giữ trong bộ nhớ và hiển thị trên màn hình đều ở dưới dạng ký tự và tuân theo một loại mã chuẩn được sử dụng rất rộng rãi gọi là mã ASCII

Trang 12

Chương 2 CẤU TRÚC PHẦN CỨNG VÀ NGÔN NGỮ LẬP TRÌNH C

2.1 Cấu trúc phần cứng của vi điều khiển 8051

- Bộ vi điều khiển 8051 được Intel cho ra mắt năm 1981, bộ vi điều khiển này có 128 byte RAM, 4KB ROM, 2 bộ định thời, một cổng nối tiếp và 4 cổng 8 bít Tất cả đều được tích hợp trên một chíp

- 8051 trở nên phổ biến sau khi Intel sau khi cho phép các nhà sản xuất khác sản xuất và bán bất

kỳ dạng biến thể nào của 8051 với điều kiện phải để mã chương trình tương thích với 8051 Từ

đó dẫn đến sự ra đời nhiều phiên bản của 8051 với tốc độ chíp và dung lượng bộ nhớ ROM

Hình 2.1: Sơ đồ khối bộ vi điều khiển 8051

Bảng 2.1: Đặc điểm kỹ thuật cơ bản của một số thành viên họ 8051

2.2 Sơ đồ chân

- Các thành viên họ 8051 như 8751, 89C51, DS5000 đều có kiểu đóng vỏ khác nhau như:

Dạng hai hàng chân DIP (Dual in – line pakage)

Dạng vỏ dẹt vuông QFP (Quad Flat Pakage)

Trang 13

Dạng không có chân đỡ LLC (Leadless Chip Carrier)

Tất cả đều có 40 chân với các chức năng, vào ra I/O đọc RD, ghi WR, địa chỉ, dữ liệu và ngắt Tuy nhiên, để đáp ứng các ứng dụng có yêu cầu hạn chế một số chíp đƣợc đóng gói 20 chân với

số cổng vào ra ít hơn

Hình 2.2 Sơ đồ chân của vi điều khiển 8051

2.2.1 Nhóm chân nguồn, dao động, điều khiển

- Vcc chân 40 cung cấp điện áp +5V cho chíp

- GND chân số 20 nối với 0 V

- XTAL1, XTAL2 hai chân dao động đƣợc nối nhƣ sau:

Hình 2.3 Nối hai chân với nguồn dao động

Trang 14

- RST khởi động lại (reset chân số 9): bình thường chân này được nối với mass thông qua điện trở, khi có xung cao đặt tới chân này thì bộ VĐK sẽ kết thúc mọi hoạt động hiện tại và tiến hành khởi động lại

Hình 2.5 Mạch nối chân Reset

- EA: (External Access chân 31) truy cập bộ nhớ ngoài: Đối với họ 8051 có ROM chương trình trên chíp thì chân EA được nối với nguồn Vcc Trường hợp không có ROM trên chíp như

8031 hoặc 8032 thì mã chương trình thì lưu cất ở bộ nhớ ROM ngoài, khi đó chân EA được nối với mass Như vậy, chân EA hoặc được nối với mass hoặc được nối với dương nguồn, chứ không bao giờ để hở

- PSEN (chân 29 – program store enable): là chân cho phép cất chương trình, khi chương trình được cất ở ROM ngoài thì chân này được nối tới chân OE của ROM

- ALE (chân 30- Address Latch Enable): là chân có mức tích cực cao, chân này

được sử dụng để phân kênh địa chỉ và dữ liệu bằng cách nối tới chân G của chíp 74LS373

2.2.2 Nhóm chân cổng vào ra

- 4 chân P0, P1, P2, P3 đều có 8 chân và tạo thành cổng 8 bít, tất cả các cổng khi Reset thì đều được cấu hình làm cổng ra Để làm đầu vào thì cần được lập trình

Trang 15

- Cổng P0: Bình thường là cổng ra, để có thể vừa làm đầu ra vừa làm đầu vào thì mỗi chân

phải nối với điện trở kéo 10K Vì P0 có dạng cực máng hở

Hình 2.6: Cổng P0 luôn được nối với điện trở kéo khi làm cổng vào ra

Mặc định P0 là cổng ra, để cấu hình P0 là cổng vào thì phải ghi 1 tới tất cả các bít của cổng bằng

câu lệnh: MOV P0,#0FFH

Ngoài ra, khi nối 8051/31 tới bộ nhớ ngoài thì P0 cung cấp cả địa chỉ và dữ liệu bằng cách dồn kênh để tiết kiệm số chân Chân ALE sẽ báo P0 có địa chỉ hay dữ liệu Nếu ALE = 0 thì P0 cấp dữ liệu

- Cổng P1: Sử dụng làm cổng vào ra, không cần điện trở kéo như cổng P0

- Cổng P2: Sử dụng làm cổng vào ra giống như P1 Tuy nhiên ở 8031, khi truy cập 64 KB

bộ nhớ ngoài cần có bus địa chỉ 16 bít, khi đó P0 cung cấp 8 địa chỉ bít thấp qua A0~A7, còn lại 8 bít địa chỉ cao A8~A15 do P2 cung cấp

- Cổng P3: Sử dụng làm cổng vào ra giống như P0, P1, P2 Ngoài ra P3 còn có một số chức năng quan trọng khác

Tìm địa chỉ bộ nhớ ROM của những thành viên họ 8051 sau đây

a) AT 8951 ( hoặc 8751 ) với 4k byte

b) DS 500032 với 32K byte

Trang 16

Giải:

a) Với 4k byte không gian nhớ ROM trên chip, ta có 4096 byte bằng 1000H ở dạng Hexa (

4 x 1024 = 4096D = 1000H ) Bộ nhớ này đưuọc sắp xếp trong các ngăn nhớ từ 0000 đến 0FFFFH Lưu ý 0 luôn là ngăn nhớ đầu tiên

b) Với 32k byte ta có 32.768 byte, ( 32 x 1024) Chuyển 32.768 về số Hexa ta nhận được giá trị 8000H Do vậy, không gian nhớ là dải từ 0000 đến 7FFFH

Trang 17

Hình 2.8: Tổ chức RAM của 8051

 Băng thanh ghi của 8051: 32 byte này đƣợc chia làm 4 băng thanh ghi (0,1,2,3) Mỗi băng thanh ghi có 8 thanh ghi từ R0~R7

Hình 2.9: các băng thanh ghi và địa chỉ RAM

2 128 byte RAM cao

 Vùng không gian RAM này đƣợc dành cho các thanh ghi đặc biệt

Trang 18

Hình 2.9 128 byte RAM cao

2.4 Thanh ghi

- Thanh ghi của 8051 được dùng để lưu tạm thời dữ liệu hoặc địa chỉ Các thanh ghi này chủ yếu có dữ liệu 8 bít và 8051 cũng chỉ có một kiểu dữ liệu 8 bít Các bít của thanh ghi được xắp xếp như hình sau:

- Trong đó bít D7 là bít có trọng số cao nhất (MSB), bít D0 là bít có trọng số thấp nhất (LSB) Vì chỉ có một kiểu dữ liệu 8 bít, nên mọi dữ liệu lớn hơn 8 bít trước khi xử lý đều được chia thành các phần 8 bít 8051 có nhiều thanh ghi nhưng ở đây chúng ta chỉ đề cập tới một số thanh ghi đa năng cơ bản sau

Trang 19

2.4.1 Thanh ghi tích luỹ A:

- Là thanh ghi 8 bít được sử dụng để lưu giữ liệu tạm thời, thường được sử dụng trong các phép toán số học và logic

2.4.2 Thanh ghi từ trạng thái PSW (hay còn gọi là thanh ghi cờ) :

- Là một thanh ghi 8 bít dùng để báo trạng thái của chương trình

2.4.3 Thanh ghi điều khiển bộ đếm bộ định thời (TCON)

Tên bít Vị trí bít Mô tả

TF1 7 Cờ tràn T1, thiết lập và xóa bằng phần cứng

Trang 20

IE1 3 Cờ ngắt ngoài 1, thiết lập và xóa bằng phần cứng

IT1 2 IT1 = 1 kích hoạt ngắt ngoài 1 theo sườn xuống

IT1 = 0 kích hoạt ngắt ngoài 1 theo mức thấp (mặc định)

IE0 1 Cờ ngắt ngoài 0, thiết lập và xóa bằng phần cứng

IT0 0 IT0 = 1 kích hoạt ngắt ngoài 0 theo sườn xuống

IT0 = 0 kích hoạt ngắt ngoài 0 theo mức thấp (mặc định)

2.4.4 Thanh ghi điều khiển chế độ bộ định thời/bộ đếm (TMOD)

- GATE = 1: T/Cx (x = 0, 1) chạy chỉ khi chân INTx là HIGHT

- GATE = 0: T/Cx (x = 0, 1) chạy chỉ khi TRx = 1

- C/T = 0: Chức năng định thời (timer) được chọn

- C/T = 1: Chức năng đếm xung ngoài (counter) được chọn

- M1 M0: hai bít lựa chọn chế độ của bộ định thời

Trang 21

2.4.5 Thanh ghi cho phép ngắt IE

- EA = 0: Không ngắt nào được chấp nhận

- EA = 1: Mỗi nguồn ngắt được cho phép hoặc cấm một cách riêng biệt bằng cách thiết lập hoặc xóa bit tương ứng được cho ra dưới đây

ES: Bit cho phép ngắt truyền thông nối tiếp

ET1: Bit cho phép ngắt T1

EX1: Bit cho phép ngắt ngoài 1

ET0: Bit cho phép ngắt T0

EX0: Bit cho phép ngắt ngoài 0

2.5 Ngôn ngữ lập trình C cho vi điều khiển

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

// khai báo thư viện

#include <file.h>

#include<file.c>

//================================================

// Khai báo biến toàn cục

unsigned char x,y;

int z;

long n = 0;

//=================================================

// khai báo và định nghĩa các hàm

void HAM1 (void)

{

// viết các câu lệnh

}

//=================================================

Trang 22

void HAM2 (unsigned char x)

{

// viết các câu lệnh

}

//==================================================

// Hàm chính bắt buộc chương trình nào cũng phải có

void main (void)

{

// viết các câu lệnh

}

2.5.2 Lời chú thích

- Nếu lời giải thích trên một dòng thì có thể dùng dấu: “//”

- Nếu lời giải thích trên nhiều dòng thì có thể dùng dấu: mở đầu bằng /* và kết thúc bằng

2.5.3 Các loại kiểu dữ liệu trong C

Bảng 1: Các kiểu dữ liệu trong C

Tên kiểu dữ liệu (Data type) Số byte Khoảng dữ liệu (Range)

2,147,483,647

Trang 23

Tên kiểu dữ liệu (Data type) Số byte Khoảng dữ liệu (Range)

only)

- Cách khai báo biến: Kiểu_dữ_liệu Tên_biến;

Ví dụ:

unsigned char x;

hoặc

unsigned char x =0; // khai báo cộng khởi tạo giá trị ban đầu

- Cũng có thể khai báo nhiều biến cùng một kiểu dữ liệu trên một dòng:

unsigned char x, y, z;

- Ngoài ra để dùng cho vi điều khiển trình dịch chuyên dụng còn hỗ trợ các loại biến sau:

- sbit: Kiểu dữ liệu này được đưa ra để dung cho họ 8051 và được dùng để khai báo một bít

riêng lẻ bên trong SFR của họ 8051 Thí dụ, khi ta sử dụng kiểu dữ liệu này ta có thể truy nhập lên các bít riêng biệt của một cổng I/O

- ví dụ: sbit switch = P3^1; // biến switch được gán tới bít 3 của cổng 1

- sfr: kiểu dữ liệu này tương tự với sbit nhưng được sử dụng để khai báo các biến kiểu 8 bít

- ví du: sfr P1 = 0x09; // địa chỉ 0x90 được gán cho P1

Sfr P2 = 0xA0;// địa chỉ 0xA0 được gán cho P2

Unsigned char my_data;

My_data = P1;

P2 = my_data++;

- sfr16: kiểu dữ liệu này tương tự với sfr nhưng được sử dụng để khai báo các biến 16 bit Khi sử

dụng kiểu dữ liệu này, byte thấp sẽ đi trước byte cao

Trang 24

- thí dụ bộ định thời T2 của vi điều khiển 8052 sử dụng các địa chỉ 0xCC và 0xCD cho các byte thấp (LOW) và cao (HIGH) Ta có thể khai báo biến T2 để truy cập:

- Hàm không trả lại giá trị

void Tên hàm (biến truyền vào hàm)

- Hàm có biến truyền vào

void TenHam(unsigned char x)

Trang 26

Bảng 3 Toán tử logic và quan hệ

Bảng 4 Toán tử thao tác bít

Bảng 5 Các toán tử khác

Trang 27

2.5.6 Phép toán lấy địa chỉ biến (&)

Bộ nhớ máy tính bao gồm nhiều byte được đánh số từ 0 tới giới hạn của bộ nhớ Các số này được gọi là số thứ tự và cũng là địa chỉ của các byte bộ nhớ Mỗi biến được khai báo sẽ chiếm giữ một vùng nào đó trong bộ nhớ và địa chỉ của nó là địa chỉ của byte đầu tiên trong vùng nhớ đó

Để xác định địa chỉ biến người ta sử dụng phép toán một ngôi & đặt trước biến

Ví dụ: int I;

&i;

Xác định cho ta địa chỉ của vùng nhớ 2 byte có tên là i Không thể sử dụng phép toán & này cho các đối tượng khác như hằng số, biểu thức

2.5.7 Phép toán chuyển đổi kiểu (bắt buộc)

Ta có thể chuyển đổi một kiểu bất kỳ sang kiểu mong muốn bằng cách dùng toán tử chuyển kiểu bắt buộc theo quy tắc như sau:

(<kiểu>)<biểu thức>

Trong đó <Kiểu> có thể là tên của một kiểu dữ liệu nào đó đã được định nghĩa trước như

là int; float; char…

Ví dụ: long n = 2520.40;

(int) n;

Thì sau lệnh này n = 2520

Chuyển đổi kiểu tự động tuân thao sơ đồ sau:

Char >>int>>long>>float>>double>>long double

2.5.8 Các định dạng

Định dạng Áp dụng cho

kiểu dữ liệu

Ghi chú

trước)

Trang 28

%X int Số nguyên hệ 16 với các chữ số là A,B,C,D,E,F

%e, %E float,double Đối số được chuyển sang dạng thập phân dấu chấm động

%f, %lf float,double Đối số được chuyển sang dạng thập phân dẫu phẩy tĩnh

%g, %G float,double Đối số được chuyển sang dạng thập phân dấu phẩy tĩnh

hay động tùy thuộc vào loại nào ngắn hơn

2.5.9 Cấu trúc điều khiển

2.5.9.2 Cấu trúc lựa chọn switch

switch(biến)

{

Case giá_trị_1: {//các câu lệnh; break;}

Case giá_trị_2: {//các câu lệnh; break;}

Case giá_trị_3: {//các câu lệnh; break;}

case: giá_trị_n {//các câu lệnh; break;}

}

Hoạt động của cấu trúc này như sau: tùy vào giá trị của biến là:giá_trị_1 hay giá_trị_2…thì thực hiện các câu lệnh tương ứng sau đó thoát nhờ lệnh break;

Trang 29

<iostream.h> Các hàm nguyên mẫu và các thông tin liên quan của các hàm thư viện

vào/ra chuẩn của C++ (cout, cin…)

<asset.h> Các macro và thông tin trợ giúp lập trình debbug

<ctype.h> Các hàm nguyên mẫu của các hàm kiểm tra một số thuộc tính của các kí

tự, hay chuyển kí tự giữa chữ hoa và chữ thường

<errno.h> Các macro hiển thị các thông tin về lỗi

<float.h> Các giới hạn của số dấu phẩy động của hệ thống

<limits.h> Các giới hạn của hệ thống

<locale.h> Các hàm và các thông tin liên quan đến việc thay đổi ngôn ngữ và mã

nước của chương trình đang chạy

<math.h> Các hàm nguyên mẫu của các hàm thư viện toán học

<setjmp.h> Các hàm nguyên mẫu của các hàm cho phép bỏ qua lời gọi hàm thông

thường và trả quyền điều khiển lại một vị trí khác

<signal.h> Các hàm nguyên mẫu và các macro điều khiển các điều kiện khác nhau

có thể xuất hiện trong quá trình thực hiện chương trình

<stdarg.h> Định nghĩa các macro làm việc với danh sách các tham số đối với những

hàm mà số lượng và kiểu của tham số là không biết

Trang 30

<stddef.h> Định nghĩa các kiểu chung dùng để thực hiện tính toán

<stdio.h> Các hàm nguyên mẫu và các thông tin liên quan của các hàm thƣ viện

vào/ra chuẩn (printf, scanf…)

<stdlib.h> Các hàm nguyên mẫu và các thông tin liên quan của các hàm chuyển

kiểu, cung cấp bộ nhớ, tạo số ngẫu nhiên

<string.h> Các hàm nguyên mẫu của các hàm xử lý xâu

<time.h> Các hàm nguyên mẫu và kiểu dữ liệu cho thao tác thời gian

2.5.9.6 Các từ khóa trong C

Trang 31

Mỗi phần tử mảng được truy cập thông qua tên biến mảng và chỉ số tương ứng, phần tử đầu tiên có chỉ số là 0

a Khai báo xâu ký tự

Một biến xâu ký tự được khai báo tương tự như một mảng một chiều chứa các ký tự

char str[10];

- Khai báo xâu ký tự

char str[6]=”abc”;

hoặc str[6]=(„a‟,‟b‟,‟c‟);

sự khác biệt giữa mảng ký tự và xâu ký tự là trong xâu ký tự có ký tự kết thúc NUL hay

„\0‟ Đây là các căn cứ của các thao tác xâu như: tính chiều dài, cộng xâu… Một biến xâu ký tự muốn có chiều dài 9 phải được khai báo như một mảng ký tự có 10 phần tử

Trang 32

Trong C không tồn tại các phép toán so sánh, gán nội dung của xâu này cho xâu khác

Ví dụ: *pi=3; // có tác dụng gán giá trị 3 cho biến n

*pi = *pi+10;//thì thêm 10 vào n

Trang 33

c Các phép toán trên con trỏ

- Phép gán trên hai con trỏ cùng kiểu

- Chỉ có thể gán địa chỉ một biến nguyên cho một con trỏ nguyên, cũng vậy không thể gán giá trị của một con trỏ nguyên cho một con trỏ thực

qi=pi;//pi,qi xác định cùng một biến n như vậy *pi,*qi,n là một

pf=&n; hoặc pf=pi;// là không hợp lệ vì khác kiểu

- Tuy nhiên ta có thể sử dụng phương pháp chuyển đổi kiểu

pf=(float*)&m;

pf=(float*)pi;

- Phép cộng con trỏ với số nguyên

- m,n,p là ba biến nguyên khai báo lien tiếp nhau Khi đó m,n,p sẽ tương ứng với 3 vùng nhớ

2 byte liên tiếp nhau Và con trỏ pi trỏ đến biến n

- Phép cộng con trỏ pi+1 sẽ cho ta địa chỉ của số nguyên m đi ngay trước còn pi+(-1) cho ta địa chỉ của số nguyên p đi liền sau

- Việc cộng trừ một con trỏ với một số nguyên có ý nghĩa trực quan như sau: nếu ta so sánh con trỏ với địa chỉ các ngôi nhà trên một con đường, mỗi ngôi nhà là một biến có địa chỉ nào đó thì các địa chỉ này được đánh số tăng dần theo một chiều nhất định Biết địa chỉ của nhà này, ta

có thể tính được địa chỉ của nhà bên cạnh bằng cách cộng hoặc trừ 1 Điều đó có nghĩa là khi cộng hoặc trừ con trỏ với một số nguyên n ta sẽ được một địa chỉ mới chỉ đến một biến khác nằm cách biến trước đó n vị trí

4 Liên hệ giữa con trỏ và mảng

Trang 34

- Ta có thể thực hiện phép gán

ppi=a2;

2.6 Thuật toán và lưu đồ thuật toán

2.6.1 Khái niệm

Thuật toán, còn gọi là giải thuật là một khái niệm cơ sở của Toán học và Tin học Hiểu một

cách đơn giản, thuật toán là một tập hợp các hướng dẫn nhằm thực hiện một công việc nào đó Đối với việc giải quyết một vấn đề - bài toán thì thuật toán có thể hiểu là một tập hữu hạn các hướng dẫn rõ ràng để người giải toán có thể theo đó mà giải quyết được vấn đề Như vậy, thuật toán là một phương pháp thể hiện lời giải của vấn đề - bài toán

Việc nghiên cứu về thuật toán có vai trò rất quan trọng trong khoa học máy tính vì máy tính chỉ giải quyết được vấn đề khi đã có hướng dẫn giải rõ ràng và đúng Nếu hướng dẫn giải sai hoặc không rõ ràng thì máy tính không thể giải đúng được bài toán Trong khoa học máy tính, thuật

toán được định nghĩa là một dãy hữu hạn các bước không mập mờ và có thể thực thi được, quá

trình hành động theo các bước này phải dừng và cho được kết quả như mong muốn

2.6.2 Biểu diễn thuật toán bằng sơ đồ khối

Sơ đồ khối (còn gọi là lưu đồ) là một hình ảnh minh họa cho giải thuật Nó vẽ ra biểu đồ của luồng chỉ thị hay những hoạt động trong một tiến trình Mỗi hoạt động như vậy được biểu diễn qua những ký hiệu

Các quy ước của lưu đồ thuật toán:

+ Bắt đầu và kết thúc

+ Đường hướng diễn tiến:

+ Khối công việc tuần tự:

+ Khối nhập/xuất dữ liệu:

Trang 35

+ Khối rẽ nhánh

+ Lời gọi chương trình con

+ Ví dụ: Xây dựng lưu đồ thuật toán cho bài toán tính tổng 2 số tự nhiên được nhập từ bàn phím, sau đó in kết quả ra màn hình

CHƯƠNG 3 LẬP TRÌNH ỨNG DỤNG 3.1 Các bước tạo một Project mới

Bước 1: Tạo project mới

Trang 36

Bước 2: Đặt tên bài tập

Bước 3: Chọn linh kiện

Chọn AT89C51

Trang 37

Bước 5: Chọn No

Bước 6

Bước 7

Ngày đăng: 24/10/2017, 13:28

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w