89C51 điều khiển motor qua phím nhấn

24 1.4K 4
89C51 điều khiển motor qua phím nhấn

Đ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

Sơ đồ cho thấy, chúng ta cấp điện cho ic lập trình AT89C51 với chân 20 cho nối masse và chân 40 cho nối vào đường nguồn 5V. Trên chân 9 gắn tụ C1 (10uF) và điện trở R1 (10K) dùng tạo tính năng reset mỗi khi mạch được cấp nguồn. Trên chân 18, 19 gắn thạch anh định tần, chúng ta dùng thạch anh 12MHz. Để mạch chỉ làm việc với bộ nhớ trong chúng ta cho chân 31 nối vào đường nguồn 5V. Đề làm thực hành với các phím nhấn đơn lập, chúng ta dùng 4 phím nhấn, gắn trên các chân p1.2, p1.3, p1.4, p1.5 của Port p1 và gắn 8 Led trên Port p3 để hiển thị tác dụng của các phím nhấn. Ở đây chúng ta sẽ tạo tính năng cho 4 phím nhấn như sau: phím S1 cho mở phím, phím S4 cho tắt phím, phím S2 cho 8 Led trên p3 tuần tự dời qua phải và phím S3 cho 8 Led trên p3 dời qua trái

89C51 điều khiển Motor qua phím nhấn • • ĐƯA LÊN FACEBOOK MCU 8051 LẬP TRÌNH HỢP NGỮ ASM NGÀY ĐĂNG DUYPHI LƯỢT XEM: 753 Một thí dụ về cách dùng các phím nhấn đơn lập Phân tích mạch: Sơ đồ cho thấy, chúng ta cấp điện cho ic lập trình AT89C51 với chân 20 cho nối masse và chân 40 cho nối vào đường nguồn 5V. Trên chân 9 gắn tụ C1 (10uF) và điện trở R1 (10K) dùng tạo tính năng reset mỗi khi mạch được cấp nguồn. Trên chân 18, 19 gắn thạch anh định tần, chúng ta dùng thạch anh 12MHz. Để mạch chỉ làm việc với bộ nhớ trong chúng ta cho chân 31 nối vào đường nguồn 5V. Đề làm thực hành với các phím nhấn đơn lập, chúng ta dùng 4 phím nhấn, gắn trên các chân p1.2, p1.3, p1.4, p1.5 của Port p1 và gắn 8 Led trên Port p3 để hiển thị tác dụng của các phím nhấn. Ở đây chúng ta sẽ tạo tính năng cho 4 phím nhấn như sau: phím S1 cho mở phím, phím S4 cho tắt phím, phím S2 cho 8 Led trên p3 tuần tự dời qua phải và phím S3 cho 8 Led trên p3 dời qua trái. Tóm lại công dụng của các phím như sau: * Nhấn nút S1 vào mode khởi động, cho mở phím. * Nhấn nút S2, 8 Led trên Port p3 dời bit qua phải * Nhất nút S3, 8 Led trên Port p3 dời bit qua trái * Nhấn nút S4 vào mode tắt phím Chương trình nguồn: UpDown EQU 00H ; đặt tên bit 00h là updown StartEnd EQU 01H ; đặt tên bit 01h là startend LAMPCODE EQU 21H ; đặt tên thanh ghi 21h là lampcode ORG 0000H ; địa chỉ thanh ghi khởi đầu JMP MAIN ; nhẩy đến tên nhãn ORG 30H ; vùng địa chỉ bên ngoài chức năng ngắt MAIN: ; đặt tên nhãn dùng cho lệnh nhẩy MOV SP,#5FH ; chọn địa chỉ làm ngăn xếp MOV P3,#0FFH ; đặt trị 11111111b vào Port p3 để tắt 8 led ; điều kiện khởi đầu CLR UpDown ; đặt bit 0 vào bit updown CLR StartEnd ; đặt bit 0 vào bit startend MOV LAMPCODE,#0FEH ; chuyển trị 11111110b vào lampcode LOOP: ; đặt tên nhãn dùng cho lệnh nhẩy CALL KEY ; gọi chương trình dò phím, tên nhãn key JNB F0,LNEXT ; cho nhẩy theo bit f0 CALL KEYPROC ; gọi chương trình xử lý phím LNEXT: ; đặt tên nhãn dùng cho lệnh nhẩy CALL LAMP ; gọi chương trình điều khiển 8 Led trên Port p3 JMP LOOP ; quay lại tên nhãn loop DELAY: ; chương trình tạo trể MOV R7,#100 ; đặt trị 100 vào thanh ghi r7 D1: ; đặt tên nhãn dùng cho lệnh nhẩy MOV R6,#100 ; đặt trị 100 vào thanh ghi r6 DJNZ R6,$ ; nhẩy tại chổ, chờ trị trong r6 bằng 0 DJNZ R7,D1 ; giảm trị trong r7 theo bước -1, r7=0?, định hướng nhẩy RET ; qua lại sau lệnh call delay ;---------------------------------------- KEYPROC: ; chương trình xử lý phím MOV A,B ; chuyển trị trong b vào thanh ghi a JB ACC.2,KeyStart ; xét bit acc.2 để định hướng nhẩy JB ACC.3,KeyOver ; xét bit acc.3 để định hướng nhẩy JB ACC.4,KeyUp ; xét bit acc.4 để định hướng nhẩy JB ACC.5,KeyDown ; xét bit acc.5 để định hướng nhẩy JMP KEY_RET ; nhẩy về tên nhãn key_ret KeyStart: ; trình vào mode khởi động SETB StartEnd ; đặt bit startend lên 1, cho khởi động JMP KEY_RET ; nhẩy đến tên nhãn key_ret KeyOver: ; trình cho tắt, kết thúc CLR StartEnd ; đặt bit startend xuống 0, kết thúc JMP KEY_RET ; nhẩy đến tên nhãn key_ret KeyUp: ; trình cho 8 Led dời qua phải SETB UpDown ; đặt bit updown lên 1, dời qua phải JMP KEY_RET ; nhẩy đến tên nhãn key_ret KeyDown: ; trình cho 8 Led dời qua trái CLR UpDown ; đặt bit updown xuống 0, dời qua trái KEY_RET: ; đặt tên nhãn dùng cho lệnh nhẩy RET ; quay lại sau lệnh call keyproc KEY: ; đặt tên nhãn dùng cho lệnh nhẩy, trình dùng dò phím CLR F0 ; xóa bit f0 ORL P1,#00111100B ; lấy logic OR trị 00111100b và Port p1 MOV A,P1 ; chuyển trị hiện có của p1 vào thanh ghi a ORL A,#11000011B ; lấy logic OR a và 11000011b, xét trạng thái 4 phím CPL A ; lấy bù a, đảo 8 bit trong thanh ghi a JZ K_RET ; xét trị trong thanh a, có bằng 0 không? để nhẩy CALL DELAY ; cho gọi chương trình trể OR P1,#00111100B ; lại lấy logia OR trị 00111100b cho Port p1 MOV A,P1 ; lại chuyển trị hiện có của Port p1 vào thanh ghi a ORL A,#11000011B ; cho lấy logic OR trị trong a và trị 11000011b CPL A ; lại cho bù a, đảo 8 bit trong thanh ghi a JZ K_RET ; lại xét trị trong thanh a, có bằng 0? để nhẩy MOV B,A ; chuyển trị trong a vào thanh b SETB F0 ; đặt bit kiểm tra f0 lên 1, báo đã có phím nhấn K_RET: ; đặt tên nhãn dùng cho lệnh nhẩy ORL P1,#00111100B ; Lấy logic OR trị hiện có trong p1 và 00111100b MOV A,P1 ; chuyển trị hiện có trên Port p1 vào thanh ghi a ORL A,#11000011B ; lấy logic OR trị trong a và 11000011b CPL A ; lấy bù a, đảo 8 bit trong thanh ghi a JZ K_RET1 ; xét trị trong a có bằng 0 không? để nhẩy JMP K_RET ; nhẩy đến tên nhãn k_ret K_RET1: ; đặt tên nhãn dùng cho lệnh nhẩy RET ; quay lại sau lệnh call key D500MS: ; chương trình làm trể PUSH PSW ; tạm cho cất trị trong thanh ghi psw vào ngăn xếp SETB RS0 ; đặt trị rs0 trong thanh ghi trạng thái psw lên 1 MOV R7,#200 ; chuyển trị 200 vào thanh ghi r7 D51: ; đặt tên nhãn dùng cho lệnh nhẩy MOV R6,#250 ; đặt trị 250 vào thanh ghi r6 D52: ; đặt tên nhãn dùng cho lệnh nhẩy NOP ; dòng không tác vụ NOP ; dòng không tác vụ NOP ; dòng không tác vụ NOP ; dòng không tác vụ DJNZ R6,D52 ; giảm trị trong r6 theo bước -1, r6=0?, chọn hướng nhẩy DJNZ R7,D51 ; giảm trị trong r7 theo bước -1, r7=0?, chọn hướng nhẩy POP PSW ; lấy lại trị trước đó cho thanh ghi psw RET ; quay lại sau lệnh gọi call d500ms LAMP: ; chương trình điều khiển 8 Led trên Port p3 JB StartEnd,LampStart ; chọn hướng nhẩy theo bit startend MOV P3,#0FFH ; đặt trị 11111111b vào Port p3, tắt hết 8 Led JMP LAMPRET ; nhẩy về tên nhãn lampret LampStart: ; đặt tên nhãn cho lệnh nhẩy, trình dời 8 bit trong a qua trái JB UpDown,LAMPUP ; nhẩy theo bit updown MOV A,LAMPCODE ; chuyển trị trong lampcode cho thanh ghi RL A ; cho quay vòng 8 bit trong thanh ghi aqua hướng trái MOV LAMPCODE,A ; chuyển trị trong a vào lampcode MOV P3,A ; cho xuất trị trong a ra Port p3 CALL D500MS ; gọi chương trình làm chậm d500ms JMP LAMPRET ; nhẩy về tên nhãn lampret LAMPUP: ; đặt tên nhãn cho lệnh nhẩy, trình cho dời 8 bit qua phải MOV A,LAMPCODE ; chuyển trị trong lampcode vào thanh ghi a RR A ; cho quay vòng 8 bit trong a qua hướng phải MOV LAMPCODE,A ; chuyển trị trong a vào lampcode MOV P3,A ; xuất trị trong a ra Port p3 CALL D500MS ; cho gọi chương trình trể d500ms LAMPRET: ; đặt tên nhãn cho lệnh nhẩy RET ; quay lại sau lệnh call END ; dừng biên dịch tại dòng này Phân tích cách viết các câu lệnh chương trình nguồn trên: Tìm hiểu thêm một cách viết khác. Bạn xem thí dụ sau: Trong thí dụ này, chúng ta gắn 4 phím trên Port p3 và dùng các phím này điều khiển trạng thái nhấp nháy của 8 Led đặt trên Port p1. Chương trình nguồn viết như sau: ORG 0000H ; Khởi đầu từ thanh ghi 0000h LJMP START ; nhẩy đến tên nhãn start ; các thanh ghi chuyên dùng cho chức năng ngắt ORG 0003H ; vị trí chạy ngắt INT0 RETI ORG 000BH ; vị trí chạy ngắt TF0 RETI ORG 0013H ; vị trí chạy ngắt INT1 . chân p3.1 điều khiển chiều quay nghịch và chân p3.2 điều khiển tốc độ quay. Motor DC gắn bên trái qua ic BA6209, với chân p3.3 điều khiển chiều quay thuận,. các phím nhấn. Ở đây chúng ta sẽ tạo tính năng cho 4 phím nhấn như sau: phím S1 cho mở phím, phím S4 cho tắt phím, phím S2 cho 8 Led trên p3 tuần tự dời qua

Ngày đăng: 30/07/2013, 21:58

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan