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

2 4 các cấu TRÚC lập TRÌNH với hợp NGỮ

88 440 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 88
Dung lượng 2,35 MB

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

Nội dung

Phương pháp ngắt và thăm dò• Phương pháp thăm dò: bộ vi điều khiển liên tục kiểm tra yêu cầu của các thiết bị để phục vụ.. Quá trình phục vụ diễn ra tuần tự nếu có nhiều thiết bị cùng yê

Trang 1

2.4.Các cấu trúc lập trình với hợp ngữ

2.4.1 Các lệnh liên quan

2.4.2 Cấu trúc điều kiện

2.4.3 Cấu trúc lặp

Trang 2

Các lệnh điều kiện

• Lệnh nhảy có điều kiện: JZ, JNZ, DJNZ, JC, JNC, JB, JNB

• Lệnh nhảy không điều kiện: SJMP (nhảy ngắn), LJMP (nhảy dài)

• Ví dụ:

MOV A,R5 ;A=R5 JNZ NEXT ;Nhảy tới NEXT nếu A khác 0 MOV R5,#55h

NEXT:

Trang 3

Lệnh lặp

• Lệnh DJNZ

• Cú pháp

+ Sau mỗi lần nhảy, giá trị thanh ghi bị giảm đi 1

+ Nếu giá trị thanh ghi vẫn khác 0 thì nhảy tới nhãn

• Ví dụ: Xóa thanh ghi A, cộng 3 vào thanh ghi A 10 lần

MOV A,#0 MOV R2,#10

Trang 4

Các lệnh logic, lệnh quay

• Lệnh ANL

ANL đích, nguồn ; đích=đích AND nguồn

Mục đích: che, xóa bit

VD: - Xóa 4 bit thấp của thanh ghi A

Trang 5

Các lệnh logic, lệnh quay

• Lệnh XRL

XRL đích, nguồn ; đích=đích XOR nguồn

Mục đích: - Xóa thanh ghi (XOR với chính nó)

- Đảo bit (XOR với 1)

VD: Xóa thanh ghi A

Đảo các bit của thanh ghi A

Trang 6

Các lệnh logic, lệnh quay

• Lệnh quay

• Lệnh quay phải: RR A

Trang 7

Các lệnh logic, lệnh quay

• Lệnh quay

• Lệnh quay phải qua cờ nhớ: RRC A

• Lệnh quay trái qua cờ nhớ: RLC A

Trang 8

Cổng vào/ra và lập trình

• 8051 có 4 cổng vào ra (mỗi cổng 8 bit): P0, P1, P2, P3

• Sau khi reset, các cổng ở chế độ mặc định là cổng ra

• Để các cổng/chân làm việc ở chế độ cổng/chân vào phải tiến hành ghi các bit 1 ra các cổng/chân tương ứng

• Ví dụ: MOV P1,#0FF ; Cổng 1 thành cổng vào

SETB P1.0 ; Chân P1.0 làm chân vào

; các chân còn lại làm chân ra

Trang 9

Nguyên lý bit cổng

Sơ đồ nguyên lý của một bit cổng

Trang 10

Nguyên lý bit cổng

• Đọc dữ liệu:

• Đọc tín hiệu từ chân IO:

Read Pin =0: Đệm 3 trạng thái thông, tín hiệu từ IO pin được truyền tới Data bus

Trang 11

Nguyên lý bit cổng

• Ghi dữ liệu: ? Write=1:Q=Data(i)

• Data(i)=0:

/Q=1 Gate=1 Rds nhỏ, IO pin =0

• Data(i)=1:

/Q=0 Gate=0 Rds >>, IO pin =1

Trang 12

Lập trình xuất dữ liệu ra cổng/chân

• Xuất dữ liệu ra cổng ra

MOV tên_cổng, giá trị

• Ví dụ:

• MOV P1, #55h

• Xuất dữ liệu ra từng chân

• Đưa chân lên mức cao:

Ví dụ: SETB P1.0

• Đưa chân xuống mức thấp:

Trang 13

Ví dụ

Trang 14

Lập trình đọc dữ liệu từ cổng vào

• Bước 1: Thiết lập cổng làm việc ở chế độ cổng vào

• Bước 2: Đọc dữ liệu trên cổng

Ví dụ:

MOV P1, #0FFhMOV A, P1 ; Đọc giá trị tại

; cổng P1, lưu vào AMOV P2, A ; Xuất ra cổng P2

Trang 15

Ví dụ

MOV P3,#0FFh MOV A,P3

MOV P0,A MOV P2,A

Trang 17

Lập trình C cho 8051

• Tuân thủ các cú pháp của ngôn ngữ lập trình C chuẩn ANSI C

• Hỗ trợ thêm một số kiểu dữ liệu/từ khóa mới

•sfr: định nghĩa một thanh ghi đặc biệt (Special Function Register)

• VD: sfr P1=0x90; //Từ đây có thể truy xuất cổng P1

//ở địa chỉ 0x90 thông qua biến P1

•sbit: định nghĩa từng bit trong thanh ghi đặc biệt

• VD: sbit Led_pin=P1^1; //Từ đây có thể truy xuất chân 1 của

//cổng P1 thông qua biến Led_pin

• bit: kiểu dữ liệu mang hai giá trị 0 hoặc 1

Trang 18

Chương trình Hello World

(Nhấp nháy led chân P1_0)

Trang 19

Lập trình cổng vào,ra

• Lập trình xuất dữ liệu ra cổng hoặc chân ra

• Ghi dữ liệu ra cổng: Tên cổng=dữ liệu

• VD: P1=0xff;

• Ghi dữ liệu ra chân: Tên chân ra=bit (0/1)

• VD: P1_0=1;

• Lập trình đọc dữ liệu từ cổng hoặc chân vào

• Thiết lập chân hoặc cổng vào(ghi ra các bit 1)

• Đọc dữ liệu từ cổng: Tên biến=Tên cổng

• VD: unsigned char value;

P1=0xff; //Chuyển cổng sang chế độ cổng vào value=P1; //Đọc dữ liệu từ cổng P1

• Đọc dữ liệu từ chân: Tên biến=Tên chân

Trang 20

Ví dụ

• Ví dụ 1: Xuất dữ liệu ra cổng ra

• Xuất dữ liệu điều khiển 8 led trên cổng P0 nhấp nháy so le.

• Ví dụ 2: Đọc dữ liệu từ chân vào

• Thêm một nút bấm vào chân P1_0, nếu nút bấm ở trạng thái mở, 8 led trên cổng P0 sáng nhấp nháy so le, nếu nút bấm được nhấn thì 8 led dữ nguyên trạng thái.

Trang 21

Ví dụ 1: xuất dữ liệu ra cổng

Trang 23

Ví dụ 2: đọc dữ liệu từ chân vào

Trang 24

đọc dữ liệu từ chân vào

Trang 25

Hiện tượng nảy phím (key bounce)

• Khi sử dụng các phím bấm cơ khí sẽ có hiện tượng này phím, đó là hiện tượng tín hiệu thay đổi mức liên tục trong một khoảng thời gian ngắn trước khi chuyển sang trạng thái ổn định

Lý tưởng

Thực tế

Trang 26

Hiện tượng nảy phím (key bounce)

• Hậu quả của này phím

• Thay vì đọc một ký tự A từ bàn phím thì đọc thành nhiều ký tự A: AAAAAA

• Đếm số lần bấm phím sẽ không còn chính xác

• Giữa thời điểm nhấn phím và nhả phím sẽ xuất hiện nhiều lần

“giả” bấm và nhả phím

Chống nảy phím

Trang 27

Chống nảy phím

• Chống nảy phím bằng phần mềm

• Thêm một khoảng trễ (tùy thuộc vào từng loại nút bấm, thông thường

khoảng 20ms) sau khi nhận sự kiện nhấn phím đầu tiên -> bỏ qua thời gian nảy phím

• Chống nảy phím bằng phần cứng

• Đấu thêm tụ điện song song với công tắc

• Sử dụng trigger smith

Trang 28

}

Trang 29

Lập trình hiển thị led 7 thanh

• Nguyên tắc hoạt động của led 7 thanh

• Led đơn

Trang 30

Led 7 thanh

• Cấu thành từ các led đơn

 Phân loại:

• Anode chung

Trang 31

Phân loại led 7 thanh

Trang 32

Ví dụ

Trang 33

void main(){

while(1){

P0=0x40; //Hien thi so 0 delay(100);

P0=0x79; //Hien thi so 1

Trang 34

Phương pháp ngắt và thăm dò

• Phương pháp thăm dò: bộ vi điều khiển liên tục kiểm tra yêu cầu của các thiết bị để phục vụ Quá trình phục vụ diễn ra tuần tự nếu có

nhiều thiết bị cùng yêu cầu

• Phương pháp ngắt: mỗi khi thiết bị yêu cầu phục vụ, thiết bị gửi tín hiệu yêu cầu tới chân ngắt của vi điều khiển Vi điều khiển sẽ xử lý yêu cầu ngắt đó Chương trình xử lý ngắt gọi là trình phục vụ ngắt

(ISR-Interrupt Service Routine)

Trang 35

Trình phục vụ ngắt

• Mỗi ngắt luôn có một trình phục vụ ngắt

• Khi một ngắt được kích hoạt thì vi điều khiển thực thi trình phục vụ ngắt

• Trình phục vụ ngắt của mỗi ngắt có một vị trí cố định trong bộ nhớ

• Tập hợp các ô nhớ lưu giữ địa chỉ của tất cả các trình phục vụ ngắt gọi

là bảng vector ngắt (Interrupt Table)

Trang 36

Chu trình xử lý ngắt

• Được thêm vào cuối chu trình lệnh

• Sau khi hoàn thành một lệnh, CPU kiểm tra xem có yêu cầu ngắt gửi đến hay không

• Nếu không có tín hiệu yêu cầu ngắt thì CPU nhận lệnh kế tiếp

• Nếu có yêu cầu ngắt và ngắt đó được chấp nhận thì:

• CPU cất ngữ cảnh hiện tại của chương trình đang thực hiện (các thông tin liên quan đến chương trình bị ngắt)

• CPU chuyển sang thực hiện chương trình con phục vụ ngắt tương ứng

• Kết thúc chương trình con đó, CPU khôi phục lại ngữ cảnh và trở về tiếp tục thực hiện chương trình đang tạm dừng

Trang 37

Trình tự phục vụ ngắt của 8051

1 Kết thúc lệnh hiện tại, lưu địa chỉ của lệnh kế tiếp (PC) vào ngăn xếp

2 Nhảy đến vị trí cố định trong bảng vector ngắt

3 Nhận địa chỉ của trình phục vụ ngắt, nhảy tới địa chỉ đó và bắt đầu

thực thi chương trình con phục vụ ngắt cho đến lệnh cuối cùng là lệnh RETI

4 Kết thúc chương trình con phục vụ ngắt, bộ vi điều khiển trở về

thực thi tiếp lệnh nơi nó đã bị ngắt

Trang 38

Hoạt động ngắt (tiếp)

Trang 39

Xử lý với nhiều tín hiệu yêu cầu ngắt

• Xử lý ngắt tuần tự:

• Khi một ngắt đang được thực hiện, các ngắt khác sẽ bị cấm

• Bộ xử lý sẽ bỏ qua các ngắt tiếp theo trong khi đang xử lý một ngắt

• Các ngắt vẫn đang đợi và được kiểm tra sau khi ngắt đầu tiên được xử lý xong

• Các ngắt được thực hiện tuần tự

Trang 40

Xử lý ngắt tuần tự (tiếp)

Trang 41

Xử lý với nhiều tín hiệu yêu cầu ngắt

• Xử lý ngắt ưu tiên:

• Các ngắt được định nghĩa mức ưu tiên khác nhau

• Ngắt có mức ưu tiên thấp hơn có thể bị ngắt bởi ngắt ưu tiên cao hơn ⇒ ngắt xảy ra lồng nhau

Trang 42

Xử lý ngắt ưu tiên

Trang 43

Các ngắt của 8051

• 8051 có 6 nguồn ngắt

• Ngắt RESET

• 2 ngắt cho bộ đếm và định thời

• 2 ngắt ngoài (INT0, INT1)

• 1 ngắt cho bộ truyền thông nối tiếp UART

Trang 44

Bảng vector ngắt

• Bảng vector ngắt của 8051

Trang 45

Lập trình xử lý ngắt

• Dưới góc nhìn của ngôn ngữ C

• Chương trình con xử lý ngắt cũng là một chương trình con.

bởi bộ vi điều khiển.

Trang 46

Khung chương trình con xử lý ngắt

• void Tên_chương_trình_con() interrupt Số_hiệu

• Tên chương trình con ngắt: do người lập trình đặt, tuân thủ các quy tắc giống như chương trình con thông thường

• Số hiệu ngắt: số hiệu vector ngắt (Xem trong file at89x51.h)

 #define IE0_VECTOR 0 /* External Interrupt 0 */

#define TF0_VECTOR 1 /* Timer 0 */

 #define IE1_VECTOR 2 /* External Interrupt 1 */

#define TF1_VECTOR 3 /* Timer 1 */

 #define SIO_VECTOR 4 /* Serial port */

Trang 48

Thanh ghi TCON

Trang 49

Lập trình xử lý ngắt ngoài

• Bước 1: Thiết lập thanh ghi IE để cho phép ngắt ngoài

• Bước 2: Chọn chế độ ngắt (theo sườn hay theo mức): thiết lập bit IT0

và IT1 cho thanh ghi TCON

• Bit IT0 cho ngắt ngoài 0 và IT1 cho ngắt ngoài 1

• ITx=0-> ngắt theo mức, ITx=1->ngắt theo sườn

• Bước 3: Viết chương trình con xử lý ngắt

Trang 50

Ví dụ 1

• Viết chương trình xử lý ngắt ngoài 0 theo chế độ ngắt theo mức

void IEX0_Process() interrupt 0 {

//Chương trình }

void main(){

IE=0x81; //Cho phép ngắt ngoài 0 IT0=0; //Chế độ ngắt theo mức while(1){

//Chương trình }

}

Trang 51

Ví dụ 2

• Viết chương trình xử lý ngắt ngoài 1 theo chế độ ngắt theo sườn

void IEX0_Process() interrupt 2 {

//Chương trình }

void main(){

IE=0x84; //Cho phép ngắt ngoài 1 IT1=1; //Chế độ ngắt theo sườn while(1){

//Chương trình

Trang 52

Demo

Trang 54

Cấu tạo và nguyên tắc hoạt động

• Cả hai bộ định thời đều có độ dài 16 bit, được chia thành hai thanh ghi 8 bit

• Bộ định thời 0:

• Thanh ghi TH0: 8 bit cao

• Thanh ghi TL0: 8 bit thấp

• Bộ định thời 1:

• Thanh ghi TH1: 8 bit cao

• Thanh ghi TL1: 8 bit thấp

Trang 55

Cấu tạo và nguyên tắc hoạt động

• Hoạt động ở chế độ bộ định thời (xét chế độ bộ định thời 16 bit)

• Giá trị trong thanh ghi bộ định thời tự động tăng lên 1 sau 12 chu kỳ dao động

• Sau khi đạt giá trị tối đa (65535), cờ TF0/TF1 báo tràn bộ định thời sẽ được phát sinh

• VD: chu kỳ dao động đồng hồ là 12MHz -> cứ mỗi us giá trị thanh ghi bộ định thời sẽ tăng lên 1-> chúng ta có thể tính toán để đưa ra thời gian trễ chính xác

Trang 56

Các bước lập trình bộ định thời

• Tính toán giá trị ban đầu cho thanh ghi bộ định thời

• Nạp giá trị này vào thanh ghi bộ định thời

• Khởi động bộ định thời

• Thanh ghi bộ định thời sẽ tự động tăng cho đến giá trị tối đa và thiết lập cờ TF báo tràn

Trang 57

Các thanh ghi điều khiển Timer/Counter

• Thanh ghi TCON

• TR1/TR0: bit khởi động/tắt bộ đếm/định thoài

• TF1/TF0: cờ báo tràn bộ đếm/định thời

• IE1, IT1, IE0, IT0: liên quan tới ngắt phần cứng ngoài

Trang 58

Các thanh ghi điều khiển Timer/Counter

• Thanh ghi TMOD

Trang 60

Lập trình ghép nối bàn phím

• Cấu trúc bàn phím ma trận

Trang 61

Hoạt động của ma trận phím

• Tín hiệu mức thấp được đưa tới tất cả các hàng

• Bình thường, tín hiệu tại các cột là mức cao

• Khi có nút được bấm trên cột nào thì tín hiệu đọc tại cột đó sẽ ở mức thấp

• Để xác định được chính xác nút ở hàng nào, cột nào được bấm thì

phải thực hiện thủ tục quét phím

• Mỗi thời điểm chỉ đưa tín hiệu mức thấp tới 1 hàng, các hàng còn lại đưa tín

Trang 62

Demo

Trang 63

Ghép nối vi điều khiển với ma trận phím

Khi có phím bấm, có tín hiệu yêu cầu ngắt gửi tới chân ngắt ngoài 0

Trang 64

Lập trình điều khiển LCD

• LCD LM016L

• 2 hàng, 16 cột

Trang 65

Sơ đồ khối

Trang 66

Sơ đồ chân

Trang 67

Các bước lập trình điều khiển LCD

• Bước 1: Thiết lập cấu hình làm việc cho LCD

• Sử dụng phương thức ghi (0-> R/W)

• Thao tác thanh ghi lệnh (0-> RS)

• Bước 2: Gửi dữ liệu hiển thị trên LCD

• Chọn vị trí hiển thị (nếu cần)

• Sử dụng phương thức ghi (0-> RW)

• Thao tác thanh ghi dữ liệu (1-> RS)

• Dữ liệu gửi tới LCD là mã ASCII của ký tự cần hiển thị

Trang 68

Tập lệnh điều khiển LCD

Trang 69

Hàm gửi lệnh điều khiển tới LCD

void LCD_Send_Command(unsigned char x)

{

LCD_DATA=x;

RS=0; //Chon thanh ghi lenh

RW=0; //De ghi du lieu

EN=1;

Delay_ms(1);

EN=0;

Trang 70

Hàm gửi 1 ký tự tới LCD

void LCD_Write_One_Char(unsigned char c)

{

LCD_DATA=c; //Dua du lieu vao thanh ghi

RS=1; //Chon thanh ghi du lieu

Trang 71

LCD_Send_Command(0x0E); LCD_Send_Command(0x01); //Xoa man hinh

Trang 72

Ví dụ

Trang 73

Lập trình bảng quang báo

• Ví dụ bảng quang báo: bảng quảng cáo, thông báo…

Trang 74

Nguyên tắc hoạt động của bảng quang báo

• Bảng quang báo hoạt động dựa trên hiện tượng lưu ảnh trên mắt

người

• Các hàng/cột của bảng quang báo được quét với tốc độ rất nhanh và

do hiện tượng lưu ảnh mà mắt người không cảm nhận được sự thay đổi

Trang 75

Linh kiện làm bảng quang báo

• Bảng quang báo kích thước nhỏ: một hoặc một vài module led 8x8

Trang 76

Linh kiện làm bảng quang báo

• Bảng quang báo kích thước lớn: hàng chục/hàng trăm module led

được ghép nối với nhau

• Mỗi một cụm module led sẽ có vi điều khiển

• Các vi điều khiển tại các cụm sẽ được kết nối với nhau theo các chuẩn truyền tin

• RS485

• CAN

• I2C

• …

Trang 77

Cấu tạo module led

• Mỗi module led sẽ bao gồm các chân điều khiển hàng và điều khiển cột

• VD: module led 8x8 có 8 chân điều khiển hàng và 8 chân điều khiển cột

Trang 78

Các bước làm ứng dụng quang báo

• Tạo font chữ mong muốn

• Thiết kế mạch ghép nối các module led với nhau và với vi điều khiển

• Thực hiện thuật toán quét led phù hợp

Trang 79

Ví dụ

• Để hiển thị chữ A trên module led 8x8

• Bước 1: Tạo font chữ (thường có kích

thước 5x8 – chiều rộng 5 pixel và cao

Trang 80

Font chữ B

Trang 81

Font chữ C

Trang 82

Font chữ D

Trang 83

Font chữ E

Trang 84

Font số 0

Trang 85

Font số 1

Trang 86

Font số 2

Trang 87

Font số 3

Trang 88

Font số 4

Ngày đăng: 13/11/2015, 18:33

HÌNH ẢNH LIÊN QUAN

Bảng vector ngắt - 2 4  các cấu TRÚC lập TRÌNH với hợp NGỮ
Bảng vector ngắt (Trang 44)
Sơ đồ khối - 2 4  các cấu TRÚC lập TRÌNH với hợp NGỮ
Sơ đồ kh ối (Trang 65)
Sơ đồ chân - 2 4  các cấu TRÚC lập TRÌNH với hợp NGỮ
Sơ đồ ch ân (Trang 66)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w