Giáo trình Vi điều khiển
Hầu hết các vi xử lý đều được bổ sung một không gian bộ nhớ chung cho các
chương trình và dữ liệu. Lý do ở đây là các chương trình thường được lưu trữ
trên một đĩa và được tải vào RAM để thực thi, vì vậy khi đó cả dữ liệu và các
chương trình đều hiện diện trong RAM hệ thống.
Mặt khác, các vi điều khiển thì rất hiếm khi được sử dụng như là CPU trong
các "hệ thống máy tính". Thay vào đó, chúng giữ vai trò như là thành phần trung
tâm trong các thiết kế hướng điều khiển. Hệ thống vi điều khiển có dung lượng
bộ nhớ bị giới hạn và không có đĩa lưu trữ chương trình. Chương trình điều
khiển phải được lưu trữ trong ROM.
Vì lý do nêu trên, vi điều khiển 8051 cung cấp một không gian bộ nhớ tách
biệt cho các chương trình (mã) và dữ liệu. Như được minh họa trong Hình 2.3.1,
cả hai thành phần chương trình và dữ liệu có thể được lưu trữ vào loại bộ nhớ
tương ứng bên trong vi điều khiển, tuy nhiên khi cần thiết có thể mở rộng cả hai
loại bộ nhớ này lên, bằng cách sử dụng thêm các thành phần linh kiện bên ngoài,
có dung lượng tối đa là 64KB bộ nhớ chương trình và 64KB bộ nhớ dữ liệu.
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: Giáo trình Vi điều khiển
K +5V +5V D8 R10 330 +5V D9 R11 330 +5V D10 R12 330 +5V D11 R13 330 +5V D12 R14 330 +5V D13 R15 330 +5V D14 R16 330 +5V D15 R17 330 +5V KEY15 KEY14 KEY13 KEY12 KEY11 KEY10 KEY9 KEY8 Hình 6.5.15: Sơ đồ nguyên lý mô phỏng hệ thống điều khiển. Mạch mô phỏng này đã được thiết kế sẵn và lưu trong máy tính với tên tập tin là: SerialPort_1.DSN. Vì thế người học có thể tự vẽ thiết kế mạch mô phỏng hoặc lấy mạch mô phỏng có sẵn trong cơ sở dữ liệu của môn học. Bước 9: Chọn tập tin chương trình cần mô phỏng (tập tin mã máy đã được tạo ra từ Bước 6) cho hệ thống vi điều khiển: SP_1_M.HEX và SP_1_S.HEX 412 Bước 10: Thực hiện chạy mô phỏng và quan sát trực tiếp kết quả trên màn hình máy tính. o Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này. Nguyên nhân phát sinh lỗi thông thường do giải thuật chương trình không chính xác hoặc do mạch mô phỏng vẽ không chính xác, cần phải được kiểm tra lại. Sau khi hoàn tất việc hiệu chỉnh sai sót thì quay trở về thực hiện từ Bước 5 (do giải thuật chương trình không chính xác) hoặc Bước 8 (do mạch mô phỏng vẽ không chính xác). o Nếu không có lỗi xuất hiện thì thực hiện tiếp theo các phần nội dung dưới đây. 6.5.13. Lắp mạch và nạp chương trình điều khiển. Sử dụng các khối "Microcontroller Unit Slot", "Point LED", "Inverter" và "Power Supply" có sẵn trên mô hình thực hành vi điều khiển để lắp ráp mạch theo thiết kế bên trên. Bước 11: Kết nối các khối trên mô hình như Hình 6.5.16 để tạo thành hệ thống mạch điều khiển như bên trên. o Tắt nguồn AC cấp cho mô hình thực hành. Hình 6.5.16: Sơ đồ kết nối mạch trên mô hình. Sử dụng phần mềm Flash Magic để thực hiện việc nạp chương trình cho vi điều khiển P89V51RB2 trên mô hình thực hành. Bước 12: Bật nguồn AC cấp cho mô hình thực hành. Bước 13: Khởi động phần mềm Flash Magic. Bước 14: Kiểm tra cấu hình phần mềm (loại vi điều khiển, cổng COM, tốc độ truyền, chuẩn giao tiếp,... Bước 15: Chọn tập tin chương trình điều khiển (tập tin mã máy đã được tạo ra từ Bước 6): SP_1_M.HEX và SP_1_S.HEX 413 Bước 16: Nạp chương trình vào vi điều khiển. Bước 17: Nhấn nút "Master Reset" ở khối "Microcontroller Unit Slot" để chạy chương trình và quan sát trực tiếp kết quả trên mô hình thực hành. o Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này. Nguyên nhân phát sinh lỗi thường do việc lắp ráp phần cứng không chính xác hoặc các linh kiện bị hư hỏng, cần phải được kiểm tra lại. Sau khi hoàn tất việc kiểm tra và hiệu chỉnh sai sót thì quay trở về thực hiện từ Bước 15. o Nếu không có lỗi xuất hiện thì hoàn tất bài thực hành. 6.5.14. Bài tập thực hành. 6.5.14.1. Bài tập mẫu. Bài tập số 1: Nội dung: "Viết chương trình, mô phỏng và lắp ráp mạch điều khiển truyền dữ liệu thông qua port nối tiếp. Thay đổi trạng thái của các LED đơn tại vi điều khiển 2 (Slave) theo trạng thái của các nút nhấn tại vi điều khiển 1 (Master) và ngược lại, trong khi các LED 7 đoạn vẫn hiển thị số đếm liên tục từ 00 đến 99. Sử dụng phương pháp ngắt port nối tiếp cho việc truyền dữ liệu." Lưu đồ giải thuật: 414 Sơ đồ nguyên lý mô phỏng: P0.7M P0.0M P0.0M P0.1M P0.2M P0.3M P0.4M P0.5M P0.6M P0.7M P0.6M P0.5M P0.4M P0.3M P0.2M P0.1M P0.7S P0.0S P0.0S P0.1S P0.2S P0.3S P0.4S P0.5S P0.6S P0.7S P0.6S P0.5S P0.4S P0.3S P0.2S P0.1S D 0 S D0M D0M D1M D1M D2M D2M D3M D3M D4M D4M D5M D5M D6M D6M D7M D7M D 7 S D 6 S D 5 S D 4 S D 3 S D 2 S D 1 S P 0 .0 S P 0 .1 S P 0 .2 S P 0 .3 S P 0 .4 S P 0 .5 S P 0 .6 S P 0 .7 S D0SD0S D1SD1S D2SD2S D3SD3S D4SD4S D5SD5S D6SD6S D7SD7S D 0 M D 7 M D 6 M D 5 M D 4 M D 3 M D 2 M D 1 M P 0 .0 M P 0 .1 M P 0 .2 M P 0 .3 M P 0 .4 M P 0 .5 M P 0 .6 M P 0 .7 M P2.0M P2.7M P2.0S P2.7S P2.1M P2.2M P2.3M P2.4M P2.5M P2.6M P2.1S P2.2S P2.3S P2.4S P2.5S P2.6S P2.4M P2.5M P2.6M P2.7M A1 B1 C1 D1 E1 F1 G1 A1 B1 C1 D1 E1 F1 G1 P2.0M P2.1M P2.2M P2.3M A2 B2 C2 D2 E2 F2 G2 A2 B2 C2 D2 E2 F2 G2 P2.4S P2.5S P2.6S P2.7S A3 B3 C3 D3 E3 F3 G3 A3 B3 C3 D3 E3 F3 G3 P2.0S P2.1S P2.2S P2.3S A4 B4 C4 D4 E4 F4 G4 A4 B4 C4 D4 E4 F4 G4 XTAL218 XTAL119 ALE 30 EA 31 PSEN 29 RST 9 P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32 P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.7/RD 17 P3.6/WR 16 P3.5/T1 15 P2.7/A15 28 P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27 U9 AT89C51 C1 33p C2 33p X1 11.0592MHz C3 10uF R1 10k +5V 2 3 4 5 6 7 8 9 1 RP1 10K + 5 V MA ÏCH Ñ I EÀU K H I EÅN GI A O T IEÁP COÅN G N OÁI T I EÁP XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 P0.0/AD039 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD336 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD633 P0.7/AD7 32 P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.7/RD 17 P3.6/WR 16 P3.5/T1 15 P2.7/A15 28 P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27 U1 AT89C51 C4 33p C5 33p X2 11.0592MHz C6 10uF R18 10k +5V 2 3 4 5 6 7 8 9 1 RP2 10K + 5 V MA ST ER SLA V E D0 R2 330 +5V D1 R3 330 +5V D2 R4 330 +5V D3 R5 330 +5V D4 R6 330 +5V D5 R7 330 +5V D6 R8 330 +5V D7 R9 330 +5V 1B 1 2B 2 3B 3 4B 4 5B 5 6B 6 7B 7 8B 8 1C 18 2C 17 3C 16 4C 15 5C 14 6C 13 7C 12 8C 11 COM 10 U2 ULN2803 2 3 4 5 6 7 8 9 1 RP3 10K +5V +5V KEY7 KEY6 KEY5 KEY4 KEY3 KEY2 KEY1 KEY0 1B 1 2B 2 3B 3 4B 4 5B 5 6B 6 7B 7 8B 8 1C 18 2C 17 3C 16 4C 15 5C 14 6C 13 7C 12 8C 11 COM 10 U3 ULN2803 2 3 4 5 6 7 8 9 1 RP4 10K +5V +5V D8 R10 330 +5V D9 R11 330 +5V D10 R12 330 +5V D11 R13 330 +5V D12 R14 330 +5V D13 R15 330 +5V D14 R16 330 +5V D15 R17 330 +5V KEY15 KEY14 KEY13 KEY12 KEY11 KEY10 KEY9 KEY8 A7 QA 13 B 1 QB 12 C 2 QC 11 D6 QD 10 BI/RBO 4 QE 9 RBI 5 QF 15 LT3 QG 14 U4 74LS47 +5VR19 56 R20 56 R21 56 R22 56 R23 56 R24 56 R25 56 A 7 QA 13 B 1 QB 12 C2 QC 11 D 6 QD 10 BI/RBO 4 QE 9 RBI5 QF 15 LT 3 QG 14 U5 74LS47 R2656 R2756 R2856 R2956 R3056 R3156 R3256 +5V A7 QA 13 B 1 QB 12 C 2 QC 11 D6 QD 10 BI/RBO 4 QE 9 RBI 5 QF 15 LT3 QG 14 U6 74LS47 +5VR33 56 R34 56 R35 56 R36 56 R37 56 R38 56 R39 56 A 7 QA 13 B 1 QB 12 C2 QC 11 D 6 QD 10 BI/RBO 4 QE 9 RBI5 QF 15 LT 3 QG 14 U7 74LS47 R4056 R4156 R4256 R4356 R4456 R4556 R4656 +5V 415 Sơ đồ lắp ráp: Chương trình điều khiển cho vi điều khiển Master: ;*************************************************** ;CHUONG TRINH DIEU KHIEN GIAO TIEP PORT NOI TIEP TRUC TIEP GIUA HAI VI DIEU KHIEN. ;CHUONG TRINH CHO VI DIEU KHIEN MASTER. ;DIEU KHIEN CAC LED SANG/TAT THEO SU DIEU KHIEN CUA CAC SW TUONG UNG. ;TRONG KHI SO DEM TANG DAN TU 00 DEN 99. ;MO PHONG PROTUES: SERIALPORT_1. ;*************************************************** ;*************************************************** ;KET NOI: 8 SWITCH -> PORT 0 (ACT = 0). ; 8 LED -> PORT 1 (CO SU DUNG DEM DAO - ACT = 1). ; 2 LED 7 -> PORT 2 (BCD). ;*************************************************** $MOD51 ORG 00H ;DIEM NHAP RESET. SJMP MAIN ORG 23H ;DIEM NHAP NGAT PORT NOI TIEP. AJMP SP_ISR ;NHAY TOI CTC PHUC VU NGAT PORT NOI TIEP. ORG 30H ;DIEM NHAP CHUONG TRINH CHINH. MAIN: MOV P1,#00H ;LED TAT ;**************************************************** 416 ;KHOI DONG PORT NOI TIEP. MOV SCON,#52H;SERIAL: MODE 1, TI = 1, RI = 0, REN = 1. MOV TMOD,#20H ;TIMER 1: MODE 2 - TAO TOC DO BAUD CHO SERIAL PORT. MOV TH1,#(-3) ;BAUD RATE = 9600. SETB TR1 ;TIMER HOAT DONG - PORT NOI TIEP HOAT DONG. ;**************************************************** ;THIET LAP CAC NGAT CHO PORT NOI TIEP. MOV IE,#90H ;CHO PHEP NGAT PORT NOI TIEP. ;**************************************************** MP1: ;DOAN CHUONG TRINH SE THUC HIEN KHI KHONG CO TIN HIEU NGAT. MOV A,#00H ;GIA TRI BAT DAU. LOOP: MOV P2,A ;XUAT HIEN THI. LCALLDELAY500MS ADD A,#1 ;TANG GIA TRI (+1). DA A CJNE A,#00,LOOP SJMP MP1 ;QUAY LAI. ;**************************************************** SP_ISR: ;CTC PHUC VU NGAT PORT NOI TIEP. ;P0 = DU LIEU PHAT. ;P1 = DU LIEU THU. PUSH ACC JB TI,TRANS_DATA ;KIEM TRA TIN HIEU NGAT LA NGAT PHAT HAY NGAT THU. RECEI_DATA: ;XU LY THU DU LIEU TU PORT NOI TIEP VAO THANH GHI A. CLR RI ;XOA RI DE CHUAN BI CHO LAN THU KE TIEP. MOV A,SBUF ;THU DU LIEU. MOV P1,A ;XUAT DU LIEU THU DUOC RA PORT LED. SJMP EXIT_SP_ISR ;THOAT KHOI ISR. TRANS_DATA: ;XU LY PHAT DU LIEU TU THANH GHI A RA PORT NOI TIEP. CLR TI ;XOA TI DE CHUAN BI CHO LAN PHAT KE TIEP. MOV A,P0 ;DOC DU LIEU LAY TU PORT SW. CPL A ;DAO TRANG THAI (SW ACT = 0, LED ACT = 1). MOV SBUF,A ;PHAT DU LIEU. EXIT_SP_ISR: POP ACC RETI ;*************************************************** 417 DELAY500MS: ;CHUONG TRINH CON TAO THOI GIAN TRE 500MS PUSH 00H PUSH 01H PUSH 02H MOV R0,#250 DEL2: MOV R1,#100 DEL1: MOV R2,#10 DJNZ R2,$ DJNZ R1,DEL1 DJNZ R0,DEL2 POP 02H POP 01H POP 00H RET END Chương trình điều khiển cho vi điều khiển Slave: ;*************************************************** ;CHUONG TRINH DIEU KHIEN GIAO TIEP PORT NOI TIEP TRUC TIEP GIUA HAI VI DIEU KHIEN. ;CHUONG TRINH CHO VI DIEU KHIEN SLAVER. ;DIEU KHIEN CAC LED SANG/TAT THEO SU DIEU KHIEN CUA CAC SW TUONG UNG. ;TRONG KHI SO DEM GIAM DAN TU 99 DEN 00. ;MO PHONG PROTUES: SERIALPORT_1. ;*************************************************** ;KET NOI: 8 SWITCH -> PORT 0 (ACT = 0). ; 8 LED -> PORT 1 (CO SU DUNG DEM DAO - ACT = 1). ; 2 LED 7 -> PORT 2 (BCD). ;*************************************************** $MOD51 ORG 00H ;DIEM NHAP RESET. SJMP MAIN ORG 23H ;DIEM NHAP NGAT PORT NOI TIEP. AJMP SP_ISR ;NHAY TOI CTC PHUC VU NGAT PORT NOI TIEP. ORG 30H ;DIEM NHAP CHUONG TRINH CHINH. MAIN: MOV P1,#00H ;LED TAT ;**************************************************** ;KHOI DONG PORT NOI TIEP. MOV SCON,#52H;SERIAL: MODE 1, TI = 1, RI = 0, REN = 1. 418 MOV TMOD,#20H ;TIMER 1: MODE 2 - TAO TOC DO BAUD CHO SERIAL PORT. MOV TH1,#(-3) ;BAUD RATE = 9600. SETB TR1 ;TIMER HOAT DONG - PORT NOI TIEP HOAT DONG. ;**************************************************** ;THIET LAP CAC NGAT CHO PORT NOI TIEP. MOV IE,#90H ;CHO PHEP NGAT PORT NOI TIEP. ;**************************************************** MP1: ;DOAN CHUONG TRINH SE THUC HIEN KHI KHONG CO TIN HIEU NGAT. MOV A,#99H ;GIA TRI BAT DAU. LOOP: MOV P2,A ;XUAT HIEN THI. LCALLDELAY500MS ADD A,#99H ;GIAM GIA TRI (-1). CJNE A,#0FFH,PROCESS_ERROR ;KIEM TRA LOI KHI GIAM QUA GIA TRI 66 - 65. SETB C ;XU LY LOI (CHO CO C = 1). PROCESS_ERROR: DA A CJNE A,#0F9H,LOOP SJMP MP1 ;QUAY LAI. ;**************************************************** SP_ISR: ;CTC PHUC VU NGAT PORT NOI TIEP. ;P0 = DU LIEU PHAT. ;P1 = DU LIEU THU. PUSH ACC JB TI,TRANS_DATA ;KIEM TRA TIN HIEU NGAT LA NGAT PHAT HAY NGAT THU. RECEI_DATA: ;XU LY THU DU LIEU TU PORT NOI TIEP VAO THANH GHI A. CLR RI ;XOA RI DE CHUAN BI CHO LAN THU KE TIEP. MOV A,SBUF ;THU DU LIEU. MOV P1,A ;XUAT DU LIEU THU DUOC RA PORT LED. SJMP EXIT_SP_ISR ;THOAT KHOI ISR. TRANS_DATA: ;XU LY PHAT DU LIEU TU THANH GHI A RA PORT NOI TIEP. CLR TI ;XOA TI DE CHUAN BI CHO LAN PHAT KE TIEP. MOV A,P0 ;DOC DU LIEU LAY TU PORT SW. CPL A ;DAO TRANG THAI (SW ACT = 0, LED ACT = 1). MOV SBUF,A ;PHAT DU LIEU. EXIT_SP_ISR: POP ACC 419 RETI ;*************************************************** DELAY500MS: ;CHUONG TRINH CON TAO THOI GIAN TRE 500MS PUSH 00H PUSH 01H PUSH 02H MOV R0,#250 DEL2: MOV R1,#100 DEL1: MOV R2,#10 DJNZ R2,$ DJNZ R1,DEL1 DJNZ R0,DEL2 POP 02H POP 01H POP 00H RET END 6.5.15. Bài tập ứng dụng. Bài 1: Cho hệ thống truyền dữ liệu giữa hai vi điều khiển (Master và Slave) thông qua port nối tiếp (UART) được thiết kế như hình vẽ bên dưới. Viết chương trình điều khiển hệ thống để thực hiện các hoạt động sau: o Ban đầu khi chưa nhấn nút thì tất cả các LED đơn đều tắt và các LED 7 đoạn đều hiển thị số 0. o Truyền dữ liệu từ MASTER sang SLAVE: Nhấn nút “KEY8/MASTER”: 8 LED đơn “D0- D7/SLAVE” sáng tắt liên tục. Nhấn nút “KEY9/MASTER”: 8 LED đơn “D0- D7/SLAVE” sáng đuổi từ trái sang phải liên tục. Nhấn nút “KEY10/MASTER”: 8 LED đơn “D0- D7/SLAVE” sáng dần từ trái sang phải liên tục. Nhấn nút “KEY11/MASTER”: 8 LED đơn “D0- D7/SLAVE” sáng dần từ hai bên vào giữa liên tục. Nhấn nút “KEY12/MASTER”: 8 LED đơn “D0- D7/SLAVE” tắt hết. Nhấn nút “KEY13/MASTER”: 8 LED đơn “D0- D7/SLAVE” sáng hết. o Truyền dữ liệu từ SLAVE sang MASTER: 420 Nhấn nút “KEY0/SLAVE”: 2 LED 7 đoạn “7seg/MASTER” đếm lên liên tục (giá trị đếm nằm trong khoảng 0099). Nhấn nút “KEY0/SLAVE”: 2 LED 7 đoạn “7seg/MASTER” đếm xuống liên tục (giá trị đếm nằm trong khoảng 0099). Nhấn nút “KEY1/SLAVE”: 2 LED 7 đoạn “7seg/MASTER” đang đếm (lên hoặc xuống) sẽ bị dừng lại và hiển thị liên tục giá trị tại thời điểm bị dừng. Nhấn nút “KEY2/SLAVE”: 2 LED 7 đoạn “7seg/MASTER” đang dừng sẽ tiếp tục đếm (lên hoặc xuống) từ giá trị bị dừng. Nhấn nút “KEY4/SLAVE”: 2 LED 7 đoạn “7seg/MASTER” hiển thị liên tục giá trị 00. Bài 2: Cho hệ thống truyền dữ liệu giữa hai vi điều khiển (Master và Slave) thông qua port nối tiếp (UART) như hình vẽ ở Bài 1 bên trên. Viết chương trình điều khiển hệ thống để thực hiện các hoạt động sau: o Ban đầu khi chưa nhấn nút thì tất cả các LED đơn đều tắt và các LED 7 đoạn đều hiển thị số 0. o Nhấn nút “KEY8/MASTER”: 16 LED đơn “D8- D15/MASTER” và “D0-D7/SLAVE” sáng đuổi từ trái sang phải liên tục. o Nhấn nút “KEY9/MASTER”: 16 LED đơn “D8- D15/MASTER” và “D0-D7/SLAVE” sáng đuổi từ phải sang trái liên tục. o Nhấn nút “KEY10/MASTER”: 16 LED đơn “D8- D15/MASTER” và “D0-D7/SLAVE” tắt hết. o Nhấn nút “KEY0/SLAVE”: 4 LED 7 đoạn “7seg/MASTER” và “7seg/SLAVE” đếm lên liên tục từ 0000 đến 9999. o Nhấn nút “KEY1/SLAVE”: 4 LED 7 đoạn “7seg/MASTER” và “7seg/SLAVE” đếm xuống liên tục từ 9999 đến 0000. o Nhấn nút “KEY2/SLAVE”: 4 LED 7 đoạn “7seg/MASTER” và “7seg/SLAVE” hiển thị giá trị 0000.
File đính kèm:
- giao_trinh_vi_dieu_khien.pdf