báo cáo thí nghiệm vi xử lý

42 280 0
báo cáo thí nghiệm vi xử lý

Đ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

Bài 1: Thí nghiệm với LED đơn Chớp tắt đèn p1.0 với chu kì là 500ms Thuật toán: tạo vòng lặp liên tục chớp tắt đèn với chu kì là 500ms Lưu đồ thuật toBài 1: Thí nghiệm với LED đơn Chớp tắt đèn p1.0 với chu kì là 500ms Thuật toán: tạo vòng lặp liên tục chớp tắt đèn với chu kì là 500ms Lưu đồ thuật toán:án:

TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HỒ CHÍ MINH - - Thành viên nhóm: Đinh Xuân Tuế MSSV: 41104041 Đỗ Mạnh Thưởng Nguyễn Đức Bình 41100298 Nguyễn Hữu Thạnh 41003060 Bài 1: Thí nghiệm với LED đơn Chớp tắt đèn p1.0 với chu kì 500ms Thuật tốn: tạo vòng lặp liên tục chớp tắt đèn với chu kì 500ms Lưu đồ thuật toán: ORG CPL P1.0 ;Chớp đèn P1.0 z DELAY 500ms Source code: ORG 2000H LAP: CPL CALL SJMP DL500: PUSH PUSH PUSH MOV L2: MOV L1: MOV DJNZ DJNZ DJNZ POP P1.0 DL500 LAP ;thay đổi trạng thái p1.0 sang trạng thái ngược lại ;gọi delay 500ms để đèn sáng lâu ;quay trở lại chương trình để đèn chớp liên tục 05 06 07 R5, #10 ;chương trình delay 500s ;đặt để cất giá trị ghi r5 r6 r7 vào ngăn xếp R6, #100 ;gán r6 = 100 R7, #250 R7, $ R6, L1 R5, L2 ;gán r7 = 250 07 ;gán r5 = 10 ;thực 10x100x250x2 ; chu kì máy (1 chu kì 1us) ;lấy lại giá trị r7 lưu ;ngăn xếp để bảo tồn giá trị ; ( theo quy tắc cất trước lấy sau) POP POP RET 06 05 END Bài 2: Thí Nghiệm Hiển Thị LED Hiển thị đèn LED từ đến sau lặp lại Thuật tốn: sử dụng ghi DPTR để kết nối LED cách move địa ghi DPTR vào địa #0000H Lựa chọn đèn LED sáng vào hiển thị giá trị số cách gán nội dụng vào ghi DPTR (đó @DPTR) (sử dụng bit) bit đầu quy định led sáng bit sau quy định số sáng VD: chọn LED số LED số phải mực thấp: 1110E, hiển thị số nội dụng @DPTR phải #0E0H Tương tự: LED hiển thị số 2: 1101 0010  @DPTR #0D2H LED hiển thị số 1: 1011 0001  @DPTR #0B2H Sử dụng vòng lặp tăng giá trị lên Dùng delay điều chỉnh thời gian thi hành chậm lại để lưu ảnh mắt người quan sát Đồng thời kiểm tra trở lại (sử dụng CJNE) Lưu đồ thuật toán: ORG DPTR#0000H A#0E0H @DPTRA DELAY INC A A>9 N Y Source code: AGAIN: NEXT: ORG MOV MOV MOVX DPTR LCALL INC CJNE SJMP DELAY: LAP1: MOV MOV MOV MOV SETB JNB CLR CLR DJNZ RET END 2000H DPTR,#0000H A, #0E0H @DPTR, A ; truy xuất đến LED ;gán A 1110 0000B ;Đưa A vào nội dung ghi ;( cách mov vào @DPTR) DELAY ;Gọi delay để có thời gian chờ để lưu ;ảnh mắt A ;Tăng giá trị A lên để đếm đến A, #0EAH, NEXT ;Kiểm tra xem có ;vượt q khơng ; khơng vượt tiếp tục quay lại ;hiển thị tăng A AGAIN ;trở lại để hiển thị từ R7,#10 ;vòng lặp delay sử dụng timer TMOD,#01H TH0,#HIGH(-50000) TL0,#LOW(-50000) TR0 TF0,$ TR0 TF0 R7,LAP1 Bài 3:Thí Nghiệm Hiển Thị LCD Hiển thị chữ ‘HELLO’ hình LCD Thuật toán: -Sử dụng ghi DPTR để kết nối LCD cách move địa ghi DPTR vào địa #8000H -Viết chương trình con: +Thứ nhất: chương trình nhận lệnh truyền đến để thực (WRITE) Để nhận lệnh ta phải setb p3.4 clr p3.5 Chương trình giúp LCD nhận lệnh từ máy xóa hình LCD, hiển thị kiểu nào, trỏ đâu.v v +Thứ hai: chương trình nhận kí tự xuất LCD hiển thị (WRITE_TEXT) Để nhận chuỗi kí tự ta phải setb p3.4 p3.5 -Viết chương trình khởi động LCD (tên LCD) với phổ biến truyền lệnh sau: +#06H: hiển thị tăng không shift +#0EH: hiển thị cursor không hiển thị blinking +#38H: giao tiếp bit, dòng với font 5x8 -Viết chương trình lấy kí tự từ bảng (là chuỗi kí tự muốn hiển thị) (chương trình BANG) -Viết chương trình delay để tạo độ trễ Để xuất chữ LCD -Chương trình chính: +Khởi động LCD +Xóa hình thị LCD cách truyền lệnh #01H +Tạo vòng lặp hiển thị chữ LCD cách tra bảng Lưu đồ thuật toán: ORG DPTR#8000H CALL LCD ; khởi động LCD A#01H CALL WRITE ;xóa hình R5#5 A#0 R4#0 CALL BANG CALL WRITE_TEXT R4R4+1 AR4 R5R5-1 R5=0 Y SJMP $ ; lặp chỗ để chương trình khơng kết thúc N Source code: ORG MAIN: MOV CALL MOV 2000H DPTR , #8000H LCD A,#01H CALL WRITE MOV R5,#5 MOV MOV LAP: CALL CALL INC MOV DJNZ SJMP BANG: MOV MOVC RET ;Truy xuất đến LCD ;Khởi động LCD cài đặt thông số cần thiết ;cho A=#01H để truyền lệnh vào ;LCD xóa ; hình LCD ;Tạo vòng lặp lần ứng với ;chữ HELLO có kí tự A,#0 ;Khởi tạo A đầu từ kí tự thứ R4,#0 ;Khởi tạo biến đếm để tăng giá trị A ; (vì A dễ thay đổi trình làm) BANG ;Gọi bảng mang kí tự WRITE_TEXT ;Hiển thị lên LCD R4 ;Tăng biến đêm R4 để gán vào A A,R4 R5,LAP ;Giảm R5 quay lại $ ;Lặp chỗ để không làm ; tiếp câu lệnh DPTR,#TABLE A,@A+DPTR ;gọi bảng ;Gán vào A kí tự thứ A chuỗi kí tự MOV A,#38H ;Khởi động LCD ;truyền lệnh cho LCD giao tiếp bit, ; dòng với font 5x8 LCALL MOV WRITE A,#0EH LCALL MOV WRITE A,#06H LCALL RET WRITE LCD: WRITE_TEXT: MOV SETB DPTR,#8000H P3.4 ;truyền lệnh cho LCD hiển thị cursor ;không hiển thị blinking ; truyền lệnh cho LCD hiển ;thị tăng, khơng shift ;hiển thị kí tự ghi A LCD ;Truy xuất đến LCD ;Khởi động chế độ SETB MOVX P3.5 @DPTR,A CLR LCALL RET P3.4 WAIT WRITE: MOV SETB CLR DPTR,#8000H P3.4 P3.5 MOVX @DPTR,A CLR LCALL RET P3.4 WAIT WAIT: PUSH PUSH MOV LAP1: MOV DJNZ DJNZ POP POP RET ;Bật chế độ nhận kí tự hiển thị LCD ;Nhận kí tự qua từ ghi A vào nội dung ; DPTR (là @DPTR) ;để hiển thị ;Kết thúc chế độ 07 ;nhận lệnh từ ghi A vào LCD ;Truy xuất đến LCD ;khởi động chế độ ;Bật chế độ nhập lệnh từ ;thanh ghi A vào LCD ;Nhận lệnh từ ghi A vào ; nội dung DPTR (là @DPTR) ;Kết thức chế độ ;tạo thời gian delay để nhận lệnh, hay tốc độ ; kí tự LCD 06 R7,#250 R6,#250 R6,$ R7,LAP1 06 07 TABLE: DB 'HELLO' END ;Bảng chứa chuỗi kí tự muốn hiển thị LCD 4) Giao Tiếp Qua Cổng Nối Tiếp: thuyết bản: Về bản, phần cứng có giáo trình Phần ta sử dụng thêm hiển thị LCD nói thí nghiệm trước Lưu ý: xác định xác tốc độ baud Trên LCD hiển thị có hàng hang 16 ký tự, thực tế Yêu Cầu: Viết chương trình nhập ký tự từ cổng nối tiếp hiển thị lên CLD đồng thời phát cổng nối tiếp Lưu đồ giải thuật: ORG Khởi tạo giá trị cho: SCON TMOD LCD Gọi chương trình nhập liệu Xuất liệu lên LCD cổng nối tiếp Yes No Nhập ký tự hay không Code: ORG 2000H MOV SCON,#52H ; cổng nối tiếp , chế độ MOV TMOD,#20H ; time mode MOV TH1,#-3 ; Trị nạp cho 19200 baud SETB TR1 ; cho time chạy MOV A,#01H ; xóa hình LCD CALL WRITE MOV DPTR,#8000H Nhảy chỗ chờ lệnh 7) Thí nghiệm với vi mạch DAC MCP4922 ĐỀ BÀI: Viết chương trình xuất mức điện áp ngõ MCP4922 Ngõ DAC nơi tới kênh ADC Giá trị đọc ADC hiển thị lên LCD để kiểm tra CHUẨN BỊ: -Coi lại kiến thưc LCD,ADC Nắm rõ chương trình để dễ sử dụng thuận tiện - Đọc kĩ sơ đồ kết nối phần cứng MCP4922 với kit Đọc thêm datasheet MCP49922 để hiểu rõ cách thức thao tác Sơ đồ dịnh giao tiếp SDI Dựa vào Datasheet MCP4922 muốn dịch bit vào chân SDI ta phải để CS mưc thấp cho LDAC mức dịch bit phải tạo xung clock SCK làm tín hiệu dịch bit Kết thúc dịch bit CS set lên mức LDAC set xuống khoảng chu kì máy set lại lên Sơ đồ dịch bit từ ghi A vào cờ C từ cờ C vào SDI C ← ← ← ← ← ← ← ← ← găp xung clock SCK bit từ cờ C đc MOV vào SDI SDI C theo trình tự lưu ghi R4 R2 đươc đưa vào MCP 4922 qua chân SDI ← sơ đồ 16 bit: bit cao lưu ghi R4 bit thấp lưu tahnh ghi R2 Bit 15 : A/B chọn ngõ kênh A, 1:chọn ngõ kênh B chọn kênh B chọn khác ok Bit 14: BUF, 0: chọn buffered 1: unbuffered ta chọn BUF =1 ( thường vậy) Bit 13 :Gain Chọn nhân đôi ngõ 0: áp ngõ nhân đôi 1: áp ngõ giữ nguyên Bit 12: chọn bit nghỉ cho DAC ta chọn bit Vậy bit cao Bit 15-bit12 bit config thiết lập cho DAC theo code chọn 1111 Bit 11-bit : 12 bit liệu ta tahy đổi giá trị 12 bit để áp ngõ mong muốn Giá trị điện áp cao 5V ứng với 12 bit liệu FFFH Vd code 12 bit liệu 0FFH Ngõ điện áp : (0FF/FFF)*5= 0.3Volt LƯU ĐỒ THUẬT TOÁN: ORG Khởi động DAC MAIN SETB nCS CLR nLDAC Chọn giá trị lưu vào R4 MOV R1,#8 Cho R1 giá trị đếm Dịch bit từ A vào cờ C Dịch từ cờ C vào chân SDI R18 MOV R1,#8 Cho R1 giá trị đếm Dịch bit từ A vào cờ C Dịch từ cờ C vào chân SDI R18 Tắt DAC CLR nCS SETB nLDAC CLR nLDAC Delay lên LCD Nhảy Main CODE: ORG 2000H NCS BIT P1.0 ; gán tên cho bit P1.0,P1.1,P1.2 SCK BIT P1.1 ; để dễ nhớ dễ thao tác SDI BIT P1.2 NLD BIT P1.3 ; bit NLDở bit nLDAC tài liệu NCS ,2 lệnh clear bit chip select MAIN: CLR ; set bit NLD hai SETB NLD ; lệnh để khởi động DAC ; Xem thêm datasheet… MOV dần R4,#0F0H ; dùng ghi R4,R2 để chuyển ;16 bit liệu vào chân SDI MCP4922 ;Cách dịch nói rõ phía trước ^^ MOV A,R4 CALL DICH ;gọi chương trình dịch bit từ ghi vào SDI CALL WAIT :gọi chương trình delay khoảng 2ms MOV R2,#0FFH ; dịch tương tự ghi R4 với ghi R2 MOV A,R2 CALL DICH CALL WAIT CALL XUAT0 ;gọi chương trình xuất giá trị điện áp lên LCD SETB NCS ; kết thúc thao tác với DAC NOP ; phải Set bit chip select clear bit nLDAC NOP ;giữa lệnh có vài lệnh NOP giúp CLR NLD ; MCP4922 có thời gian chờ để thực ; xong tác NOP ;lệnh NOP SETB NLD CALL DELAY2S SJMP MAIN ;gọi chương trình delay 2s để lên LCD XUAT0: MOV A,#01H ;=====xóa hình LCD==== CALL WRITE MOV DPTR,#8000H CALL LCD MOV A,#01H CALL WRITE ;============================== MOV DPTR,#4001H ;trỏ trỏ DPTR tới địa truy ; bạn xem lại phần LCD để rõ LAP: ;xuất ADC kênh MOVX @DPTR,A ; lệnh chuyển đổi kênh tương ứng CALL DELAY0 ; delay 100 micro giây MOVX A,@DPTR ; đọc giá trị điện áp từ ADC lưu vào A MOV B,#05H ;=============================== MUL AB ; cách chuyển đổi điên áp từ gai trị nhị phân MOV R3,A ; sang thập phân thang đo -5V MOV A,B ; tương tự ADC Mình ko nhắc lại ; bạn coi lại ADC để rõ ^^ MOV DPTR,#TABLE MOVC A,@A+DPTR CALL WRITE_TEXT MOV A,#'.' CALL WRITE_TEXT MOV B,#10 MOV A,R3 MUL AB MOV A,B MOV DPTR,#TABLE MOVC A,@A+DPTR CALL WRITE_TEXT CALL WAIT MOV A,#'V' CALL WRITE_TEXT CALL WAIT SJMP LAP RET ;======================================== ;=====CHƯƠNG TRÌNH CON DỊCH BIT VÀO SDI==== DICH: R1,#8 ; dùng R1 để kiểm ta số bit dịch vào SDI đủ chưa RLC A ; dịch trái bit vào cờ C CLR SCK ;tạo xung clock SDI,C ;dịch từ cờ C vào SDI MOV QUAY: NOP NOP MOV NOP NOP ; định tao thời gian chờ để dịch xong bit SETB SCK NOP NOP DJNZ ; quay lại tới dịch đủ bit R1,QUAY RET DELAY0: PUSH 07 MOV R7,#50 DJNZ R7,$ POP 07 ; chương trình delay 100micro giây RET DELAY2S: ; delay 2s dùng timer DELAY: MOV R7,#50 LAP100: MOV TMOD,#01H MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 DJNZ R7,LAP100 RET LCD: MOV A,#38H ;chương trình khởi động LCD LCALL WRITE ;coi lại LCD ^^ MOV A,#0EH LCALL WRITE MOV A,#06H LCALL WRITE RET WRITE_TEXT: ;coi lại LCD MOV DPTR,#8000H SETB P3.4 SETB P3.5 MOVX @DPTR,A CLR P3.4 LCALL WAIT RET WRITE: MOV DPTR,#8000H SETB P3.4 CLR P3.5 MOVX @DPTR,A CLR P3.4 LCALL WAIT ;coi lại LCD RET WAIT: PUSH 07 PUSH 06 MOV R7,#4 LAP11: MOV R6,#250 DJNZ R6,$ DJNZ R7,LAP11 POP 06 POP 07 RET ; chương trình delay 2ms TABLE: DB 030H,031H,032H,033H,034H,035H,036H,037H,038H,039H ; bảng tra mã kí tự lên LCD từ 0-9 END Bài : Thí Nghiệm Với Led Ma Trận Thí nghiệm : Viết chương trình hiển thị kí tự A lên led ma trận Lưu đồ thuật toán : ORG A  #01 R2  #8 R1  #0 COT: CHỌN COT COT: CHỌN COT HIEN THỊ HIEN THỊ HANG : RL A PUSH A LẤY KÍ TỰ CẦN HIỂN THỊ TRÊN HÀNG VÀ XUẤT RA HÀNG DELAY 1ms POP A R2  R2 – IF R2 = N Y CODE thích : ORG 2000H MOV A,#01H ; ghi A chứa liệu cần xuất ; cột tức chọn cột hiển thị MAIN: LAP2: MOV ; có cột nên gán r2=8 để R2,#8 ;thực vòng lặp quét cột MOV ; r1 dùng để chứa vị trí kí tự bảng tra R1,#0 LOOP: CALL COT CALL HANG DJNZ R2,LOOP ; sau lần xuất liệu ‘ hàng giãm r2 đủ ; hàng quay lại quét từ đầu SJMP MAIN MOV DPTR,#0C000H ; lấy địa cột khối led matrix MOVX @DPTR,A ; chọn cột cần hiển thị A ; xoay trái A để chọn cột hiển thị COT: RL cho lần lặp sau RET ; HANG: PUSH ACC ; giữ lại liệu cần xuất ;cột vòng lặp sau CALL DU_LIEU ; lấy liệu cần xuất hàng MOV DPTR,#0A000H ; lấy địa hàng khối led matrix MOVX @DPTR,A ; xuất liệu hàng LCALL DELAY POP ACC ; lấy lại liệu xuất cột INC R1 ; tăng vị trí kí tự bảng tra lên RET DU_LIEU: MOV A,R1 ; lấy vị trí kí tự bảng MOV DPTR,#CHAR ; lấy địa đầu bảng MOVC A,@A+DPTR ; lấy kí tự cần xuất hàng RET DELAY: PUSH 07 ;================================================= PUSH 06 ; chương trình DELAY ; dùng để tạo trể 1ms lần MOV R7,#2 MOV R6,#250 DJNZ R6,$ DJNZ R7,LAP POP 06 POP 07 ; xuất liệu hàng LAP: RET ;================================================== CHAR: END DB 03H,0EDH,0EEH,0EEH,0EDH,03H,0FFH,0FFH BÀI : THÍ NGHIỆM VỚI ĐỘNG CƠ DC Thí nghiệm : viết chương trình cho phép động chạy theo chiều thuận vòng 2s , ngừng 2s , quay chiều nghịch 2s , ngừng 2s lặp lại Lưu đồ thuật toán : ORG DPTRE000 THUAN : ACC.01 ; ACC.10 DELAY 2S NGHI : ACC.0  ; ACC.1  DELAY 2S NGHICH : ACC.0  ; ACC.1  DELAY 2S NGHI : ACC.0  ; ACC.1  DELAY 2S CODE thích : ORG 2000H LOOP; ; lấy địa ngoại vi động dc MOV DPTR,#0E000H CALL THUAN MOVX @DPTR,A ; bắt đầu cho động quay thuận CALL DELAY2S ; cho động quay 2s MOV DPTR,#0E000H CALL NGHI MOVX @DPTR,A ; bắt đầu cho động nghỉ CALL DELAY2S ; động nghĩ 2s MOV DPTR,#0E000H CALL NGHICH MOVX @DPTR,A CALL DELAY2S MOV DPTR,#0E000H CALL NGHI MOVX @DPTR,A CALL DELAY2S SJMP LOOP ; bắt đầu cho động quay nghịch ; động quay nghịch 2s ; quay lại ban đầu THUAN: SETB ACC.0 ;===================================================== CLR ACC.1 ; cài đặt chế độ quay thuận RET ;===================================================== NGHICH: CLR ACC.0 ;==================================================== SETB ACC.1 ; cài đặt chế độ quay nghịch RET ;==================================================== NGHI: CLR ACC.0 ;======================================================== CLR ACC.1 ; cài đặt chế độ nghỉ RET ;======================================================== DELAY2S: MOV R7,#20 ;======================================================== LAP2: MOV R6,#200 LAP1: MOV R5,#250 DJNZ R5,$ DJNZ R6,LAP1 DJNZ R7,LAP2 ; chương trình delay tạo trễ 2s RET ;======================================================== END ... vi t code khơng chạy tham khảo tài liệu mà tự mày mò dịnh lại định chương trình lại chạy ổn lệnh NOP giúp tạo thời gian delay để hoàn tất vi c nhận bit Số lệnh NOP ta tự định Vi c định cơng vi c... LAP1: RET TABLE: DB 030H,031H,032H,033H,034H,035H,036H,037H,038H,039H END 7) Thí nghiệm với vi mạch DAC MCP4922 ĐỀ BÀI: Vi t chương trình xuất mức điện áp ngõ MCP4922 Ngõ DAC nôi tới kênh ADC Giá... R6,#250 DJNZ R6,$ DJNZ R7,LAP1 RET END 5) Điều Khiển ADC: Lý thuyết bản: Về bản, phần cứng có giáo trình Phần ta sử dụng thêm hiển thị LCD nói thí nghiệm trước Tuy nhiên lưu ý thêm hoạt động thiết kế

Ngày đăng: 06/08/2018, 21:18

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