Báo cáo thí nghiệm Vi xử lý - Đinh Xuân Tuế

- SKIP ROM (CCh)

Lệnh này cho phép thiết bị điều khiển truy nhập thẳng đến các lệnh bộ nhớ của

DS1820 mà không cần gửi chuỗi mã 64 bit ROM. Như vậy sẽ tiết kiệm được thời gian

chờ đợi nhưng chỉ mang hiệu quả khi trên bus chỉ có một cảm biến.

Lệnh chức năng DS1820

- CONVERT T (44h)

Lệnh này khởi động một quá trình đo và chuyển đổi giá trị nhiệt độ thành số (nhị

phân). Sau khi chuyển đổi giá trị kết quả đo nhiệt độ được lưu trữ trên thanh ghi nhiệt

độ 2 byte trong bộ nhớ nháp Thời gian chuyển đổi không quá 200 ms, trong thời gian

đang chuyển đổi nếu thực hiện lệnh đọc thì các giá trị đọc ra đều bằng 0.

- READ SCRATCHPAD (BEh)

Lệnh này cho phép thiết bị chủ đọc nội dung bộ nhớ nháp. Quá trình đọc bắt đầu từ bit

có ý nghĩa nhất của byte 0 và tiếp tục cho đến byte rhứ 9 (byte 8 – CRC). Thiết bị chủ

có thể xuất ra một xung reset để làm dừng quá trình đọc bất kỳ lúc nào nếu như chỉ có

một phần của dữ liệu trên bộ nhớ nháp cần được đọc.

pdf42 trang | Chuyên mục: Vi Xử Lý – Vi Điều Khiển | Chia sẻ: tuando | Lượt xem: 513 | Lượt tải: 0download
Tóm tắt nội dung Báo cáo thí nghiệm Vi xử lý - Đinh Xuân Tuế, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ài LCD 
 MOV A,#0EH 
 LCALL WRITE 
 MOV A,#06H 
 LCALL WRITE 
 RET 
WRITE_TEXT: ; chương trình con xuất kí tự ra LCD 
 MOV DPTR,#8000H ; coi lại code bài LCD 
 SETB P3.4 
 SETB P3.5 
 MOVX @DPTR,A 
 CLR P3.4 
 LCALL WAIT 
 RET 
WRITE: 
MOV DPTR,#8000H ; chương trình con để giúp LCD nhận lệnh 
 SETB P3.4 ;hay là chương trình WRITE_COMAND 
 CLR P3.5 ; theo tài liêu tham khảo 
 MOVX @DPTR,A ; coi lại bài LCD 
 CLR P3.4 
 LCALL WAIT 
 RET 
WAIT: 
PUSH 07 ; chương trình con Delay 2ms 
 PUSH 06 ;coi lại bài LCD 
 MOV R7,#4 
LAP1: 
MOV R6,#250 
 DJNZ R6,$ 
 DJNZ R7,LAP1 
 POP 06 
 POP 07 
 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 bất kì ra ngõ ra MCP4922. Ngõ ra DAC 
sẽ nôi tới kênh 1 của ADC. Giá trị đọc được ở ADC sẽ hiển thị lên LCD để kiểm tra 
CHUẨN BỊ: 
-Coi lại kiến thưc ở các bài LCD,ADC. Nắm rõ các chương trình con trong các bài đó 
để dễ sử dụng thuận tiện 
- Đọc kĩ sơ đồ kết nối phần cứng của MCP4922 với bộ kit. Đọc thêm datasheet của 
MCP49922 để hiểu rõ cách thức thao tác. 
Sơ đồ dịnh thì giao tiếp SDI. Dựa vào Datasheet MCP4922 thì khi muốn dịch bit vào 
chân SDI thì ta phải để CS ở mưc thấp. cho LDAC ở mức. khi 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 thì CS set lên mức 1. LDAC set 
xuống 0 trong khoảng 2 chu kì máy rồi set lại lên 1 
Sơ đồ dịch bit từ thanh ghi A vào cờ C rồi từ cờ C vào SDI 
khi găp mỗi xung clock SCK thì bit từ cờ C sẽ đc MOV vào SDI 
theo trình tự này lần lượt lưu trên 2 thanh ghi R4 và R2 sẽ đươc đưa vào MCP 4922 
qua chân SDI 
← ← ← ← ← ← ← ← ← ← C 
C SDI 
sơ đồ 16 bit: 
8 bit cao lưu ở thanh ghi R4 
8 bit thấp lưu ở tahnh ghi R2 
Bit 15 : A/B 0 chọn ngõ ra là kênh A, 
1:chọn ngõ ra là kênh B . mình chọn kênh B. chọn khác cũng ok 
Bit 14: BUF, 0: chọn buffered 
 1: unbuffered. ở bài này ta chọn BUF =1 ( thường là vậy) 
Bit 13 :Gain. Chọn nhân đôi ngõ ra. 
 0: áp ngõ ra được nhân đôi 
 1: áp ngõ ra được giữ nguyên 
Bit 12: chọn bit nghỉ cho DAC. ở đây ta chọn bit này bằng 1. 
Vậy là 4 bit cao Bit 15-bit12 là 4 bit config thiết lập cho DAC . theo code này mình 
chọn bằng 1111. 
Bit 11-bit 0 : 12 bit dữ liệu . ta có thể tahy đổi giá trị 12 bit này để được áp ngõ ra như 
mong muốn. 
Giá trị điện áp cao nhất là 5V ứng với 12 bit dữ liệu là FFFH 
Vd code của mình 12 bit dữ liệu là 0FFH. 
Ngõ điện áp ra là sẽ là : (0FF/FFF)*5= 0.3Volt 
LƯU ĐỒ THUẬT TOÁN: 
ORG 
Khởi động DAC 
SETB nCS 
CLR nLDAC 
Chọn giá trị lưu vào R4 
MOV R1,#8 
Cho R1 là giá trị đếm 
Dịch từng bit từ A vào cờ C 
Dịch từ cờ C vào chân SDI 
R1<8 
Xuất giá trị từ ADC lên LCD 
Tắt DAC 
CLR nCS 
SETB nLDAC 
CLR nLDAC 
R1>8 
Chọn giá trị lưu vào R2 
MOV R1,#8 
Cho R1 là giá trị đếm 
Dịch từng bit từ A vào cờ C 
Dịch từ cờ C vào chân SDI 
R1<8 
R1>8 
MAIN 
CODE: 
ORG 2000H 
 NCS BIT P1.0 ; gán tên cho các bit P1.0,P1.1,P1.2 
 SCK BIT P1.1 ; để chúng ta dễ nhớ dễ thao tác 
 SDI BIT P1.2 
 NLD BIT P1.3 ; bit NLDở đây là bit nLDAC trong tài liệu 
MAIN: 
CLR NCS ,2 lệnh clear bit chip select và 
; set bit NLD là hai 
 SETB NLD ; lệnh để khởi động DAC. 
; Xem thêm datasheet 
 MOV R4,#0F0H ; mình sẽ dùng thanh ghi R4,R2 để chuyển 
dần 
;16 bit dữ liệu vào chân SDI của MCP4922. 
;Cách dịch mình sẽ nói rõ ở phía trước ^^ 
 MOV A,R4 
 CALL DICH ;gọi chương trình dịch từng bit từ thanh ghi vào SDI 
 CALL WAIT :gọi chương trình con delay khoảng 2ms 
 MOV R2,#0FFH ; dịch tương tự thanh ghi R4 với thanh ghi R2 
 MOV A,R2 
 CALL DICH 
 CALL WAIT 
Delay hiện lên 
LCD 
Nhảy về Main chính 
 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 và clear bit nLDAC 
 NOP ;giữa các lệnh này có vài lệnh NOP là giúp 
 CLR NLD ; MCP4922 có thời gian chờ để thực 
; hiện xong tác 
 NOP ;lệnh 
 NOP 
 SETB NLD 
 CALL DELAY2S ;gọi chương trình delay 2s để hiện lên LCD 
 SJMP MAIN 
XUAT0: 
MOV A,#01H 
;=====xóa màn hình LCD==== 
 CALL WRITE 
 MOV DPTR,#8000H ; các bạn xem lại phần LCD để rõ hơn 
 CALL LCD 
LAP: 
MOV A,#01H 
 CALL WRITE ;============================== 
 MOV DPTR,#4001H ;trỏ con trỏ DPTR tới địa chỉ truy 
;xuất ADC kênh 1 
 MOVX @DPTR,A ; ra 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 0 -5V 
 MOV A,B ; tương tự như bài ADC. Mình ko nhắc lại 
 MOV DPTR,#TABLE ; các bạn coi lại ADC để rõ hơn ^^ 
 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: 
MOV R1,#8 ; dùng R1 để kiểm ta số bit dịch vào SDI đủ 8 chưa 
QUAY: 
RLC A ; dịch trái bit vào cờ C 
 CLR SCK ;tạo xung clock 
 NOP 
 NOP 
 MOV SDI,C ;dịch từ cờ C vào SDI 
 NOP ; định thì tao thời gian chờ để dịch xong bit 
 NOP 
 SETB SCK 
 NOP 
 NOP 
 DJNZ R1,QUAY ; quay lại tới khi dịch đủ 8 bit mới thôi 
 RET 
DELAY0: 
PUSH 07 ; chương trình delay 100micro giây 
 MOV R7,#50 
 DJNZ R7,$ 
 POP 07 
 RET 
DELAY2S: ; delay 2s dùng timer 0 
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 bài LCD ^^ 
 MOV A,#0EH 
 LCALL WRITE 
 MOV A,#06H 
 LCALL WRITE 
 RET 
WRITE_TEXT: ;coi lại bài LCD 
 MOV DPTR,#8000H 
 SETB P3.4 
 SETB P3.5 
 MOVX @DPTR,A 
 CLR P3.4 
 LCALL WAIT 
 RET 
WRITE: 
MOV DPTR,#8000H ;coi lại bài LCD 
 SETB P3.4 
 CLR P3.5 
 MOVX @DPTR,A 
 CLR P3.4 
 LCALL WAIT 
 RET 
WAIT: 
PUSH 07 ; chương trình delay 2ms 
 PUSH 06 
 MOV R7,#4 
LAP11: 
MOV R6,#250 
 DJNZ R6,$ 
 DJNZ R7,LAP11 
 POP 06 
 POP 07 
 RET 
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 8 : Thí Nghiệm Với Led Ma Trận 
Thí nghiệm 1 : 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Ị 
 RL A 
HANG : 
 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 – 1 
IF R2 = 0 
N 
CODE và chú thích : 
 ORG 2000H 
 MOV A,#01H ; thanh ghi A chứa dữ liệu cần xuất ra 
; trên cột tức là chọn cột hiển thị 
MAIN: 
LAP2: 
MOV R2,#8 ; do có 8 cột nên gán r2=8 để 
;thực hiện vòng lặp quét cột 
 MOV R1,#0 ; r1 dùng để chứa vị trí kí tự trong bảng tra 
LOOP: 
CALL COT 
 CALL HANG 
 DJNZ R2,LOOP ; sau mỗi lần xuất được dữ liệu ra 1 
‘ hàng thì giãm r2 đi 1 cho đến khi đủ 
SJMP MAIN ; 8 hàng thì quay lại quét từ đầu 
COT: 
MOV DPTR,#0C000H ; lấy địa chỉ cột khối led matrix 
 MOVX @DPTR,A ; chọn cột cần được hiển thị 
 RL A ; xoay trái A để chọn cột tiếp theo hiển thị 
cho lần lặp sau 
 RET ; 
HANG: 
PUSH ACC ; giữ lại dữ liệu cần xuất ra trên 
Y 
;cột để cho vòng lặp sau 
 CALL DU_LIEU ; lấy dữ liệu cần xuất ra trên hàng 
 MOV DPTR,#0A000H ; lấy địa chỉ hàng của khối led matrix 
 MOVX @DPTR,A ; xuất dữ liệu ra trên hàng 
 LCALL DELAY 
 POP ACC ; lấy lại dữ liệu xuất ra trên cột 
 INC R1 ; tăng vị trí kí tự trong bảng tra lên 1 
 RET 
DU_LIEU: 
MOV A,R1 ; lấy vị trí của kí tự trong bảng 
 MOV DPTR,#CHAR ; lấy địa chỉ đầu bảng 
 MOVC A,@A+DPTR ; lấy kí tự cần xuất ra hàng 
RET 
DELAY: 
PUSH 07 
 ;================================================= 
 PUSH 06 ; chương trình con DELAY 
; dùng để tạo trể 1ms giữa 2 lần 
 MOV R7,#2 ; xuất dữ liệu trên hàng 
LAP: 
MOV R6,#250 
 DJNZ R6,$ 
 DJNZ R7,LAP 
 POP 06 
 POP 07 
 RET 
 ;================================================== 
CHAR: DB 03H,0EDH,0EEH,0EEH,0EDH,03H,0FFH,0FFH 
 END 
 BÀI 9 : THÍ NGHIỆM VỚI ĐỘNG CƠ DC 
Thí nghiệm 1 : viết chương trình cho phép động cơ chạy theo chiều thuận trong vòng 
2s , ngừng 2s , quay chiều nghịch 2s , ngừng 2s và lặp lại . 
Lưu đồ thuật toán : 
ORG 
NGHICH : 
ACC.0  0 ; ACC.1  1 
DELAY 2S 
NGHI : 
ACC.0  0 ; ACC.1  0 
DELAY 2S 
DPTRE000 
THUAN : 
ACC.01 ; ACC.10 
DELAY 2S 
 NGHI : 
ACC.0  0 ; ACC.1  0 
DELAY 2S 
CODE và chú thích : 
 ORG 2000H 
LOOP; 
MOV DPTR,#0E000H ; lấy địa chỉ của ngoại vi động cơ dc 
 CALL THUAN 
 MOVX @DPTR,A ; bắt đầu cho động cơ quay thuận 
 CALL DELAY2S ; cho động cơ quay 2s 
 MOV DPTR,#0E000H 
 CALL NGHI 
 MOVX @DPTR,A ; bắt đầu cho động cơ nghỉ 
 CALL DELAY2S ; động cơ nghĩ 2s 
 MOV DPTR,#0E000H 
 CALL NGHICH ; bắt đầu cho động cơ quay nghịch 
 MOVX @DPTR,A 
 CALL DELAY2S ; động cơ quay nghịch 2s 
 MOV DPTR,#0E000H 
 CALL NGHI 
 MOVX @DPTR,A 
 CALL DELAY2S 
 SJMP LOOP ; 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 ; chương trình con delay tạo trễ 2s 
LAP1: MOV R5,#250 
 DJNZ R5,$ 
 DJNZ R6,LAP1 
 DJNZ R7,LAP2 
 RET 
 ;======================================================== 
 END 

File đính kèm:

  • pdfbao_cao_thi_nghiem_vi_xu_ly_dinh_xuan_tue.pdf