Lập trình vi điều khiển 8051 cho người mới bắt đầu

14 181 0
Lập trình vi điều khiển 8051 cho người mới bắt đầu

Đ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

Vi ñiều khiển 8051 – Dành cho người chưa biết http://roboconsv.yourfreebb.com Bài mở đầu GIỚI THIỆU VỀ VI ðIỀU KHIỂN 8051 A Một chip AT89C51: Như bạn thấy hình: - Các chân P0.0 đến P0.7,( 39-32 ) P1.0 ñến P1.7,( 1-8 ) P2.0 ñến P2.7,( 21-28 ) P3.0 ñến P3.7,( 10-17 ) Là cổng xuất nhập ðó nơi đưa tín hiệu vào VðK nơi VðK xuất tín hiệu - Chân RST(9): chân reset Khi chân ấn ghi hệ thống ñược thiết lập lại trạng thái ban ñầu - Các chân Vcc(40) GND(20): chân cấp nguồn cho VðK Vcc mức cao 5V GND mức thấp 0V - Hai chân XTAL1 XTAL2 hai chân cung cấp xung dao ñộng cho VðK Thường nối với thạch anh có tần số 12 MHz Trên ñây số ñặc ñiểm cần lưu ý cấu trúc chân chip AT89C51 Các bạn nên nhớ kỹ ñể tiện cho việc lập trình sau Sưu tầm: Cao Hồng Long – CðT32 – CTU chlong.mechatronics@gmail.com Vi ñiều khiển 8051 – Dành cho người chưa biết http://roboconsv.yourfreebb.com * Nạp chương trình cho VðK Trước tiên viết trình chương trình chạy cho VðK Bạn sử dụng Notepad Windows hay phần nềm 8051-IDE (tải mạng - vô Google mà tìm) Sau chạy chương trình nạp (EZ31) dùng nạp nạp vào VðK B Nó hoạt động nào? Trước tiên ghi nhớ số khái niệm - Tín hiệu : VðK tín hiệu có nghĩa thay đổi ñiện hay mức trạng thái hay nhiều bit Ví dụ: Có mạch điện hình vẽ - Khi ta chưa đóng khóa k1 chân P1.0 VðK có điện 0V( mức thấp) - Khi ta đóng khóa k1 chân P1.0 VðK có ñiện 5V( mức cao) Sự thay ñổi ñiện tín hiệu Mỗi chân VðK bit, gồm mức trạng thái “cao thấp” Tám chân loại tạo nên cổng (8 bit) VD : cổng P1 bao gồm chân từ P1.0 ñến P1.7 cổng P0 bao gồm chân từ P0.0 ñến P0.7 - Thanh ghi: Mỗi ghi ô nhớ bit VðK cung cấp cho ghi mặc ñịnh từ R0 ñến R7 Ngồi có số ghi ñặc biệt khác : TMOD/TCON : ghi ñịnh thời Các cổng P0 ñến P3 ghi xuất nhập.v.v Có ghi có địa bit cụ thể, có ghi khơng - ðịa bit: ghi ñược cấu thành từ bit Có ghi có chức đặc biệt bit ñảm nhận chức khác Chúng ta thay ñổi mức trạng thái bit thay phải tác động lên ghi ðiều giúp cho việc xử lý tín hiệu trở nên dễ dàng Thao tác lập trình trở nên đơn giản hơn.” Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com Vi ñiều khiển 8051 – Dành cho người chưa biết http://roboconsv.yourfreebb.com - Dữ liệu ghi số từ 00H~FFH (theo hệ hexa) hay từ 00000000B ñến 11111111B( theo hệ nhị phân) Như bạn thấy số hệ nhị phân có chữ số tượng trưng cho bit ghi Mỗi bit có trạng thái ứng với số 0-mức thấp 1-mức cao Giá trị hexa chẳng qua cách viết gọn người quen với cơng việc lập trình Chúng ta chuyển từ nhị phân sang hexa cách dễ dàng nhờ máy tính Vì viết hexa lại dễ viết nhị phân lập trình VðK liệu nạp cho ghi đặc biệt cố ñịnh ứng với chức khác nhau.Vì quen bạn viết hexa nhanh gọn Chúng ta sử dụng số thập phân VðK hoạt ñộng nào??? Khi nhận tín hiệu từ bên ngồi Tín hiệu từ cơng tắc cảm biến Lúc VðK xử lí theo chương trình mà ta lập sẵn ứng với tín hiệu Và kết ta quy ñịnh cho VðK ñưa tín hiệu tương ứng nhằm giải tình Một điều hiển nhiên tình ta dự tính trước lập sẵn chương trình ñể giải Nếu không VðK tự xử lý Nó biết chạy theo lập trình cho Sưu tầm: Cao Hồng Long – CðT32 – CTU chlong.mechatronics@gmail.com Vi điều khiển 8051 – Dành cho người chưa biết http://roboconsv.yourfreebb.com Bài RAM VÀ CÁC THANH GHI ðẶC BIỆT ðây vùng RAM đa mục đích ðây ghi có chức đặc biệt Như đề cập mở ñầu, ghi ñặc biệt mang chức khác nhau, chúng ñược cấu tạo từ bit, lấy liệu trực tiếp từ địa bit thơng qua tên gọi của chúng Các ghi ñặc biệt nằm vị trí từ 80H đến FFH Trong ghi quan tâm tới ghi ñịnh thời: TMOD ghi chọn chế ñộ ñịnh thời TCON (ñịnh ñịa bit) ghi ñiều khiển chế ñộ ñịnh thời TL0 - TH0 ghi quy ước byte thấp byte cao ñịnh thời TL1 - TH1 ghi quy ước byte thấp byte cao ñịnh thời Sưu tầm: Cao Hồng Long – CðT32 – CTU chlong.mechatronics@gmail.com Vi điều khiển 8051 – Dành cho người chưa biết http://roboconsv.yourfreebb.com Bài CÁC LỆNH THƯỜNG GẶP ðỂ LẬP TRÌNH ROBOT ðối với hoạt động robocon, lập trình VðK gần bó gọn số câu lệnh thường gặp sau ñây: Lệnh MOV - Cấu trúc: MOV ñích,nguồn - Chức năng: Chuyển liệu từ nguồn vào đích khỏi câu lệnh - Lưu ý: ðích ghi, nguồn ghi giá trị trực tiếp gián tiếp Nếu nguồn liệu trực tiếp phải ghi theo cấu trúc: MOV đích,#dữ liệu trực tiếp Nếu số hexa phải viết #0(dữ liệu dạng hexa) Vd #0FFH Nêu số nhị phân phải viết #(dữ liệu dạng bit)B Vd #11111111B Nếu số thập phân phải viết #(dữ liệu dạng thập phân Vd #255 Lệnh JB - Cấu trúc: JB bit,nhãn - Chức năng: Kiểm tra mức trạng thái bit Nếu mức thấp khỏi câu lệnh Nếu mức cao nhảy ñến vị trí nhãn - Lưu ý: Nhãn tên gọi đánh dấu vị trí chương trình lập trình mà quy định cho Lệnh JNB - Cấu trúc: JNB bit,nhãn - Chức năng: Kiểm tra mức trạng thái bit Nếu mức cao khỏi câu lệnh Nếu mức thấp nhảy đến vị trí nhãn Lệnh CJNE - Cấu trúc: CJNE đích,nguồn,nhãn - Chức năng: So sánh liệu nguồn với đích Nếu khơng nhảy đến vị trí nhãn Nếu khỏi câu lệnh Lệnh DJNZ - Cấu trúc: DJNZ ghi,nhãn - Chức năng: So sánh giá trị ghi với Nếu khơng giảm giá trị ghi ñi nhảy tới vị trí nhãn Nếu khỏi câu lệnh - Lưu ý: Khi lập trình nên ghi có gia trị dương Lệnh SETB - Cấu trúc: SETB bit - Chức năng: Thiết lập mức trạng thái cao cho bit khỏi câu lệnh - Lưu ý: Khi bit mức (thấp) đưa lên mức 1(cao) Còn ñang mức giữ nguyên Sưu tầm: Cao Hồng Long – CðT32 – CTU chlong.mechatronics@gmail.com Vi điều khiển 8051 – Dành cho người chưa biết http://roboconsv.yourfreebb.com Lệnh CLR - Cấu trúc: CLR bit - Chức năng: Thiết lập mức trạng thái cho bit thoát khỏi câu lệnh - Lưu ý: Khi bit ñang mức 1thì đưa xuống mức Còn mức giữ ngun Có thể thay bit ghi tất bit ghi ñều ñược ñưa xuống mức Lệnh INC - Cấu trúc: INC ghi - Chức năng: Tăng giá trị ghi lên thoát khỏi câu lệnh - Lưu ý: Khi lập trình nên ghi có gia trị dương Lệnh LJMP - Cấu trúc: LJMP nhãn - Chức năng: Nhảy tới vị trí nhãn - Lưu ý: Có thể nhảy tồn chương trình 10 Lệnh SJMP - Cấu trúc: SJMP nhãn - Chức năng: Nhảy tới vị trí nhãn - Lưu ý: Có thể nhảy phạm vi 128 byte trước câu lệnh 127 byte sau lệnh 11 Lệnh RET - Cấu trúc: RET - Chức năng: Kết thúc chương trình đưa trỏ trở vị trí lúc gọi chương trình 12 Lệnh LCALL - Cấu trúc: LCALL nhãn - Chức năng: Gọi chương trình vị trí nhãn - Lưu ý: Có thể gọi tồn chương trình Các bạn nên đọc thêm sách tham khảo ñể biết thêm số byte số chu kỳ máy câu lệnh Sưu tầm: Cao Hồng Long – CðT32 – CTU chlong.mechatronics@gmail.com Vi điều khiển 8051 – Dành cho người chưa biết http://roboconsv.yourfreebb.com Bài TRẠNG THÁI KHI RESET VðK bắt ñầu hoạt động cấp nguồn cho cách đóng khóa K1 Khi tất ghi ñược khởi tạo trạng thái.(Xem phần reset) trỏ chương trình đặt vị trí thấp RAM - 00H VðK reset lại hệ thống, nghĩa thiết lập lại trạng thái ban ñầu lúc khởi ñộng cho tất ghi đưa trỏ trở lại vị trí 00H Muốn reset ta phải đóng khóa K2 lâu chu kỳ máy Bảng trạng thái reset: Như thấy bảng Reset, trạng thái cổng xuất nhập ( cổng P0~P3 ) ñều FFH, nghĩa tất chân cổng ñều trạng thái mức Tuy nhiên chân cổng nối với mạch ngồi hở - nghĩa phụ thuộc vào điều kiện bên ngồi, trạng thái chân trạng thái tín hiệu mà mạch ngồi đưa vào Nếu mạch ngồi phụ thuộc vào tín hiệu VðK trạng thái chân trạng thái mà VðK xuất Trong hình miêu tả chân P0.1 có trạng thái mức 0, K3 hở Còn chân P2.0 có trạng thái phụ thuộc vào VðK Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com Vi ñiều khiển 8051 – Dành cho người chưa biết http://roboconsv.yourfreebb.com Bài CÁC THÀNH PHẦN CỦA MỘT CHƯƠNG TRÌNH LẬP TRÌNH Cấu trúc chương trình lập trình ORG (Vị trí bắt đầu trỏ chương trình) (ðoạn chương trình chính) (Các chương trình con) END (kết thúc chương trình) Con trỏ chương trình ðó vị trí mà VðK thực thi Thơng thường bắt đầu chương trình trỏ ln vị trí thấp 00H nhiên quy định cho bắt đầu làm việc vị trí khác.Chúng ta vào địa RAM ñể chọn vùng làm việc Vd: ORG 00H -(bắt đầu từ vị trí 00H) ORG 0030H -(bắt đầu từ vị trí 30H) v.v Nhãn Nhãn tên gọi đánh dấu vị trí chương trình lập trình mà quy định cho VD: ORG 00H (con trỏ chương trình bắt đầu vị trí 00H) LJMP MAIN (nhảy tới vị trí có nhãn MAIN) ORG 0030H (vị trí bắt đầu chương trình MAIN) MAIN: MOV R1,#10 (nạp cho R1 giá trị 10.) LAP1: DJNZ R1,LAP1 END (Kết thúc chương trình.) Trong chương trình nhãn MAIN LAP1 Khi nhãn gọi trỏ chương trình nhảy tới vị trí nhãn để thực thi câu lệnh vị trí Chương trình Cấu trúc chương trình Nhãn: Các câu lệnh RET Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com Vi ñiều khiển 8051 – Dành cho người chưa biết http://roboconsv.yourfreebb.com VD: ORG 00H LJMP MAIN ORG 0030H MAIN: MOV R1,#10 LCALL LAP1 -gọi chương trình LAP1: DJNZ R1,LAP1 RET -kết thúc chương trình END Chương trình đặt bên ngồi chương trình chính, trước sau Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com Vi ñiều khiển 8051 – Dành cho người chưa biết http://roboconsv.yourfreebb.com Bài HOẠT ðỘNG ðỊNH THỜI Hoạt động định thời: Là kiểm sốt thời gian ñể thực thi câu lệnh trình xử lý VðK * Một số khái niệm: - Tần số dao động: tần số VðK ln 1/12 tần số thạch anh gắn mạch (thường loại 12MHz) - Chu kỳ máy: T=1/f Là thời gian làm việc dao ñộng máy Giả sử tần số thạch anh 12 MHz ta có tần số VðK f = 12 MHz/12 = MHz =1000000 Hz chu kỳ máy T = 1/1000000 = 0.000001 s = micro giây - ðể thực câu lệnh VðK ñều phải tốn thời gian định ứng với câu lệnh ðó số chu kỳ máy câu lệnh - Giữa thuật tốn lập trình thực tế có khác biệt lớn ðó thời gian VðK chạy với tốc ñộ micro giây, thực tế xử lý công việc khoảng 0.1 giây nhanh Chính lập trình phải có cơng đoạn xử lý thời gian cách tạo trễ cho VðK ñể kéo dài thời gian cho khớp với thao tác thực tế Tạo trễ: Chẳng hạn yêu cầu cần khoảng thời gian trễ 200 micro giây Vậy với câu lệnh MOV (1 chu kỳ máy) phải viết 200 câu lệnh liên tiếp Một công việc gần Vấn ñề ñặt phải xây dựng thuật toán tạo trễ cho dễ dàng cho người lập trình nhất.Và sau thuật tốn: VD: ORG 00H LJMP MAIN ORG 0030H MAIN: MOV R1,#100 -Gán cho ghi R1 giá trị 100 LAP1: DJNZ R1,LAP1 (So sánh giá trị ghi R1 với 0, Nếu khơng giảm R1 1, nhảy tới nhãn LAP1Cơng việc lại tiếp tục R1=0) END Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com Vi ñiều khiển 8051 – Dành cho người chưa biết http://roboconsv.yourfreebb.com Như với câu lệnh DJNZ (2 chu kỳ máy) VðK ñã lặp lại công việc kiểm tra R1=0 tới 100 lần tổng cộng số chu kỳ máy mà VðK ñã thực T = 2x100 = 200 chu kỳ = 200 micro giây ðó thuật tốn tạo trễ ðối với khoảng thời gian trễ lớn phải sử dụng nhiều vòng lặp lồng Bởi giá trị ghi ñược phép ñạt tới 255 VD: ORG 00H LJMP MAIN ORG 0030H MAIN: MOV R1,#100 LAP1: MOV R2,#100 LAP2: DJNZ R2,LAP2 DJNZ R1,LAP1 END Ta nhận thấy: Tại LAP2 VðK ñã thực 100 chu kỳ máy Và lần R2=0 kiểm tra R1, cho ñến R1=0 Như câu lệnh DJNZ R2,LAP2 ñã ñược lặp 100x100=10000 lần => 20000 chu kỳ máy = 0.02s Tất nhiên tổng số chu kỳ máy thuật toán + 300 + 20000=200301 chu kỳ nhiên bỏ qua 301 chu kỳ q nhỏ so với 20000 Sưu tầm: Cao Hồng Long – CðT32 – CTU chlong.mechatronics@gmail.com Vi điều khiển 8051 – Dành cho người chưa biết http://roboconsv.yourfreebb.com Bài BỘ ðỊNH THỜI Khái niệm định thời: Nói cách nơm na định thời mạch chia tần số VðK cho 2n lần Với n số bit ñịnh thời Vậy thời gian chu kỳ ñịnh thời lúc là: T = 1/(12MHz/(12*2^n )) VðK AT89C51 xử dụng ñịnh thời Cấu tạo: VðK AT89C51 cung cấp cho ñịnh thời Bộ ñịnh thời ñược truy xuất cách sử dụng ghi ñặc biệt là: - TMOD ghi chọn chế ñộ ñịnh thời - TCON (ñịnh ñịa bit) ghi ñiều khiển chế ñộ ñịnh thời - TL0 - TH0 ghi quy ước byte thấp byte cao ñịnh thời - TL1 - TH1 ghi quy ước byte thấp byte cao ñịnh thời A Thanh ghi TMOD.(Time Mode register): Cấu tạo hai nhóm bit Bit Tên M0 M1 C/T GATE M0 M1 C/T GATE Bộ ñịnh thời 0 0 1 1 Mơ tả Bit chọn chế độ thứ Bit chọn chế ñộ thứ Bit chọn chức ñếm ñịnh thời cho ñịnh thời Bit ñiều khiển cổng cho ñịnh thời Bit chọn chế ñộ thứ Bit chọn chế ñộ thứ Bit chọn chức ñếm ñịnh thời cho ñịnh thời Bit ñiều khiển cổng cho ñịnh thời Bảng mơ tả chế độ: M1 0 1 M0 1 Chế ñộ Mơ tả Chế độ định thời 13 bit Chế ñộ ñịnh thời 16 bit Chế ñộ tự ñộng nạp lại bit Chế ñộ ñịnh thời chia sẻ Ở ñây nghiên cứu chế ñộ ñịnh thời 16 bit.(Các chế ñộ khác mong ban xem tài liệu) Thanh ghi 16 bit cấu tạo ghi bit TLx/THx ghép lại với x tên ñịnh thời (1 0) Giá trị ghi TLx ñược lấy làm byte thấp giá trị ghi THx lấy làm byte cao VD : TL1 / TH1 00H / FFH => giá trị ghi 16 bit = FF00H Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com Vi ñiều khiển 8051 – Dành cho người chưa biết http://roboconsv.yourfreebb.com Hoạt động: Bộ định thời 16 bit hoạt ñộng giống ñếm Tức chạy ñịnh thời VðK bắt ñầu ñếm từ giá trị mà nạp vào ghi 16 bit giá trị FFFFH = 65536 Và VðK bật bit (gọi cờ tràn) từ lên báo hiệu ñã ñếm xong hay nói cách khác tràn định thời B Thanh ghi TCON : Ở ñây quan tâm đến bit cao hi TCON Còn bit thấp chúng quy uớc = Bit Tên TF1 TF1 TF0 TF0 Mô tả Cờ tràn ñịnh thời Bit ñiều khiển ñịnh thời Mức bật Mức dừng Cờ tràn ñịnh thời Bit ñiều khiển ñịnh thời Mức bật Mức dừng Như giả sử muốn khởi ñộng ñịnh thời viết lệnh SETB TR1 C Cấu trúc thuật toán viết cho ñịnh thời: MOV TMOD,#01H LAP: MOV TH0,#dữ liệu MOV TL0,#dữ liệu SETB TR0 DEM: JNB TF0,DEM CLR TR0 CLR TF0 END Chúng ta lấy liệu byte cao thấp ñể nạp cho TL0 TH0 sau - Xác ñịnh cần trễ chu kỳ máy VD 10000 Chu kỳ - Lấy 65536 - 10000 = 55536 => D8F0H - Vậy TH0 = D8, TL0 = F0 Ngồi có thuật tốn để viết cho định thời MOV TMOD,#01H MOV R1,#số lần lặp lại LAP: MOV TH0,#HIGH(-số chu kỳ máy cần thiết) MOV TL0,#LOW(-số chu kỳ máy cần thiết) SETB TR0 DEM: JNB TF0,DEM CLR TR0 CLR TF0 DJNZ R1,LAP END Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com Vi ñiều khiển 8051 – Dành cho người chưa biết http://roboconsv.yourfreebb.com VD: Chúng ta muốn tạo trễ 1s = 100x104 chu kỳ máy MOV TMOD,#01H MOV R1,#100 LAP: MOV TH0,#HIGH(-10000) MOV TL0,#LOW(-10000) SETB TR0 DEM: JNB TF0,DEM CLR TR0 CLR TF0 DJNZ R1,LAP END Hoặc MOV TMOD,#01H MOV R1,#50 LAP: MOV TH0,#HIGH(-20000) MOV TL0,#LOW(-20000) SETB TR0 DEM: JNB TF0,DEM CLR TR0 CLR TF0 DJNZ R1,LAP END Lưu ý: TLx/THx khơng vượt q 65536 = FFFFH Tới kết thúc chương trình học Các bạn cần nắm vững câu lệnh nguyên tắc tạo trễ lập trình cho robocon rồi, vấn đề lại khả tư bạn Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com ... chlong.mechatronics@gmail.com Vi ñiều khiển 8051 – Dành cho người chưa biết http://roboconsv.yourfreebb.com Bài CÁC THÀNH PHẦN CỦA MỘT CHƯƠNG TRÌNH LẬP TRÌNH Cấu trúc chương trình lập trình ORG (Vị trí bắt đầu trỏ.. .Vi ñiều khiển 8051 – Dành cho người chưa biết http://roboconsv.yourfreebb.com * Nạp chương trình cho VðK Trước tiên vi t trình chương trình chạy cho VðK Bạn sử dụng Notepad... trí chương trình lập trình mà quy định cho VD: ORG 00H (con trỏ chương trình bắt đầu vị trí 00H) LJMP MAIN (nhảy tới vị trí có nhãn MAIN) ORG 0030H (vị trí bắt đầu chương trình MAIN)

Ngày đăng: 10/04/2020, 14:14

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan