Bao Cao TNVXL Nhom3 Senie
-
Upload
akasi-owakada -
Category
Documents
-
view
68 -
download
0
Transcript of Bao Cao TNVXL Nhom3 Senie
![Page 1: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/1.jpg)
BÀI 1: THÍ NGHIỆM VỚI NÚT NHẤN VÀ LED ĐƠN
1. Thí nghiệm 1: Viết chương trình thực hiện đọc liện tục trạng thái nút nhấn được nối đến P1.0 và hiển thị ra Led được nối tại chân P1.1 ( bit thứ 1 của port 1)
ORG 2000H
MAIN:
MOV C,P1.0
MOV P1.1,C
SJMP MAIN
END
a. Khi nhấn có 2 đèn sáng cùng lúc: khi mình nhấn P1.0 (đèn sáng) thì dữ liệu từ P1.0 được chuyển
qua P1.1 thông qua cờ C, thời gian chuyển quá nhanh ( thời gian thực hiện lệnh là vài micro giây)
=> ta nhìn sẽ thấy 2 đèn cùng sáng/tắt cùng lúc.
b. Các bit của 4 port được sử dụng trong thì nghiệm trên: Vì EME-MC8 thiết kế hoat động ở chế độ 3
bus, nên port 0: bus dữ liệu, port 2: bus địa chỉ, P3.0, P3.1, P3.6, P3.7 dùng làm bus điều khiển.
Các chân còn lại của các port đều có thể dùng trong thí nghiệm này.
2. Thí nghiệm 2: Viết chương trình tạo xung vuông 1Hz được nối đến chân P1.0 với tần số dao động
dùng trong hệ thống là 11.059MHz
a. Duty cycle: 50% - Hz ORG 2000H
LAP:
CPL P1.0
CALL DL
SJMP LAP
DL:
MOV R5,#10
L2:
MOV R6,#100
L1:
MOV R7,#250
DJNZ R7,$
DJNZ R6,L1
DJNZ R5,L2
RET
END
Dùng vòng lặp để tạo trễ 0.5s, với giá trị nạp cho R5, R6, R7 như trên tính theo công thức gần đúng là
t=2*m*n*p
Với giá trị nạp: R5 = 10, R6 = 200, R7 = 250 để giảm sai số.
b. Duty cycle: 30% - tần số 0.5Hz ORG 2000H
LAP:
MOV R1,#3
MOV R2,#7
CLR P1.0
LAP1:
ACALL DL
DJNZ R1,LAP1
SETB P1.0
LAP2:
ACALL DL
DJNZ R2,LAP2
SJMP LAP
DL:
MOV R6,#100
L1:
![Page 2: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/2.jpg)
MOV R7,#250
DJNZ R7,$
DJNZ R6,L1
RET
END
3. Thí nghiệm 3:
a. Viết chương trình tạo xung vuông 1Hz dùng timer 0
ORG 2000H
MAIN:
CPL P1.0
ACALL DL500
SJMP MAIN
DL500:
MOV TMOD,#01H
MOV R7,#10
LOOP:
MOV TH0,#HIGH(-50000) ; giá trị nạp là 50000*10 = 500000us = 0.5s
MOV TL0,#LOW(-50000)
SETB TR0
JNB TF0,$ ; đợi cờ TF0 tràn và xóa cờ tràn
CLR TF0
CLR TR0
DJNZ R7,LOOP
RET
END
b. Dùng ngắt Timer 0:
ORG 2000H
LJMP MAIN
ORG 200BH
LJMP ISRT0
MAIN:
MOV TMOD,#01H
SETB TF0
MOV IE,#82H
MOV R7,#11
SJMP $
ISRT0:
DJNZ R7,NAP
CPL P1.0
MOV R7,#10
SJMP KT
NAP:
CLR TR0
MOV TH0,#HIGH(-50000)
MOV TL0,#LOW(-50000)
SETB TR0
KT: RETI
END
4. Thí nghiệm 4: Viết chương trình làm cho led nối đến chân P1.0 chớp tắt với tần số có thể tăng hoặc
giảm bằng cách nhấn nút nối đến chân P1.1 hoặc P1.2. Chu kì chớp tắt trung bình là 1s
ORG 2000H
MAIN:
CPL P1.0
MOV A,#10
JNB P1.1,KT_GIAM
DEC A ;Khi nhấn P1.1 thì f tăng => Chu kỳ giảm => giảm R7
MOV R7,A
![Page 3: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/3.jpg)
SJMP LAP ; mỗi lần giảm là 1*25000us = 0.025s
KT_GIAM:
JNB P1.2,LAP
INC A
MOV R7,A
LAP:
ACALL DL500
DJNZ R7,LAP
SJMP MAIN
DL500:
MOV TMOD,#01H
MOV TH0,#HIGH(-25000) ; giá trị là 50000*R7 (R7TB = 10) = 500000us = 0.5s
MOV TL0,#LOW(-25000)
SETB TR0
JNB TF0,$ ; đợi cờ TF0 tràn và xóa cờ tràn
CLR TF0
CLR TR0
RET
END
BÀI TẬP:
1. Viết chương trình thực hiện cổng logic: XOR 2 ngõ vào ORG 2000H
MAIN:
CLR A
MOV C,P1.0
MOV ACC.0,C
MOV R0,A
MOV C,P1.1
MOV ACC.0,C
XRL A,R0
MOV C,ACC.0
MOV P1.5,C
SJMP MAIN
END
2. Viết chương trình thực hiện mạch đèn chạy: STTTTTT-SSTTTTTT-SSSTTTTT-SSSSTTTT…….-SSSSSSSS-TTTTTTT. Thời gian thực hiện chương trình là 4.5s (với S: đèn sáng, T: đèn tắt)
ORG 2000H
MAIN:
CLR A
MOV DPTR,#TABLE
MOV R7,#8
LAP:
MOVC A,@A+DPTR
ACALL DL500
INC A
DJNZ R7,LAP
SJMP MAIN
DL500:
MOV TMOD,#01H
MOV R6,#10
LOOP:
MOV TH0,#HIGH(-50000) ; giá trị nạp là 50000*10 = 500000us = 0.5s
MOV TL0,#LOW(-50000)
SETB TR0
JNB TF0,$ ; đợi cờ TF0 tràn và xóa cờ tràn
CLR TF0
CLR TR0
DJNZ R6,LOOP
RET
TABLE:
![Page 4: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/4.jpg)
DB 7FH,3FH,1FH,0FH,07H,03H,01H,00H,0FFH
END
3. Viết chương trình thực hiện phép logic: P1.5 = (P1.0 XOR P1.1) AND P1.2) ORG 2000H
MAIN:
CLR A
MOV C,P1.0
MOV ACC.0,C
MOV R0,A
MOV C,P1.1
MOV ACC.0,C
XRL A,R0
MOV R0,A ; R0 = P1.0 XOR P1.1
MOV C,P1.2
MOV ACC.0,C
ANL A,R0
MOV C,ACC.0
MOV P1.5,C
SJMP MAIN
END
BÀI 2: THÍ NGHIỆM HIỂN THỊ DÙNG LED 7 ĐOẠN
1. Thí nghiệm 1:Viết chương trính thực hiện bộ đếm từ 0->9 và hiển thị trên led 7 đoạn, mỗi lần cách nhau 2s
ORG 2000H
MAIN:
MOV R7,#10
MOV R5,#0
LOOP:
MOV DPTR,#TABLE
MOV A,R5
MOVC A,@A+DPTR
ACALL DL2S
MOV DPTR,#0000H
MOVX @DPTR,A
INC R5
DJNZ R7,LOOP
SJMP MAIN
DL2S:
MOV R6,#40
MOV TMOD,#01H
LAP:
MOV TH0,#HIGH(-50000)
MOV TL0,#LOW(-50000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
DJNZ R6,LAP
RET
TABLE:
DB 70H,71H,72H,73H,74H,75H,76H,77H,78H,79H
END
![Page 5: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/5.jpg)
2. Thí nghiệm 2:
a. Viết chương trình hiển thị giá trị 1234 lên led 7 đoạn ORG 2000H
MAIN:
MOV R7,#4
MOV R5,#0
LOOP:
MOV DPTR,#TABLE
MOV A,R5
MOVC A,@A+DPTR
ACALL DL2MS
MOV DPTR,#0000H
MOVX @DPTR,A
INC R5
DJNZ R7,LOOP
SJMP MAIN
DL2MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-2000)
MOV TL0,#LOW(-2000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
TABLE:
DB 71H,0B2H,0D3H,0E4H ;tương ứng với giá trị 1234 hiển thị lên Led 1 2 3
4
END
b. Thay đổi chương trình để giá trị 1234 có thể hiển thị thông qua mã BCD nén chứa trong cặp thanh ghi R7 & R6,Biết R7 là MSB
ORG 2000H
MAIN:
MOV R7,#12H
MOV R6,#34H
MOV A,R7
ANL A,#0F0H
SWAP A
ADD A,#70H
MOV R1,A ; R1 chưa gía trị 71H tương ứng với giá trị 1 đươc xuất ra led 1
MOV A,R7
ANL A,#0FH
ADD A,#0B0H
MOV R2,A ; R2 chưa giá trị 0B2H tương ứng với giá trị 1 được xuất ra led 2
MOV A,R6
ANL A,#0F0H
SWAP A
ADD A,#0D0H
MOV R3,A ; R3 chưa giá trị 0D3H tương ứng với giá trị 1 được xuất ra led 3
MOV A,R6
ANL A,#0FH
ADD A,#0E0H
MOV R4,A ; R4 chưa giá trị 0E4H trương ứng với giá trị 1 đươc xuất ra led
4
LAP:
MOV DPTR,#0
MOV A,R1
MOVX @DPTR,A
ACALL DL2MS
MOV A,R2
MOVX @DPTR,A
![Page 6: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/6.jpg)
ACALL DL2MS
MOV A,R3
MOVX @DPTR,A
ACALL DL2MS
MOV A,R4
MOVX @DPTR,A
ACALL DL2MS
SJMP LAP
DL2MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-2000)
MOV TL0,#LOW(-2000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
END
3. Thí nghiệm 3: Viết chương trình hiển thị giá trị nhị phân trong thanh ghi R7 lên led 7 đoạn ORG 2000H
MAIN:
MOV R7,#254 ; nạp tùy ý giá trị R7 để kiểm tra
MOV B,#10
MOV A,R7
DIV AB
MOV R4,B ; R4 chứa giá trị hàng đơn vị
MOV B,#10
DIV AB
MOV R3,B ; R3 chứa giá trị hàng chục
MOV R2,A ; R2 chưa giá trị hàng trăm
LAP:
MOV DPTR,#0
MOV A,R2
ADD A,#0B0H
MOVX @DPTR,A
ACALL DL2MS
MOV A,R3
ADD A,#0D0H
MOVX @DPTR,A
ACALL DL2MS
MOV A,R4
ADD A,#0E0H
MOVX @DPTR,A
ACALL DL2MS
SJMP LAP
DL2MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-2000)
MOV TL0,#LOW(-2000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
END
![Page 7: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/7.jpg)
BÀI TẬP:
1. Đếm số từ 0-99 (giả sử <100) xuất ra led 7 đoạn. Mỗi lần xuất cách nhau ORG 2000H
MAIN:
MOV DPTR,#0
MOV R7,#0
MOV R6,#0
JNB P1.0,NHAY ; nhảy khi nhấn P1.0
SJMP MAIN
NHAY:
INC R7
CJNE R7,0AH,SKIP ; nhảy đến SKIP khi R7 # 0AH
MOV R7,#0
INC R6
SKIP:
MOV A,R7
ADD A,#0E0H
MOVX @DPTR,A
ACALL DL2MS
MOV A,R6
ADD A,#0D0H
MOVX @DPTR,A
JB P1.0,SKIP ; nhảy đến SKIP khi không nhấn P1.0
SJMP NHAY
DL2MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-2000)
MOV TL0,#LOW(-2000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
END
2. Viết chương trình đếm từ 0-60 rồi lặp lại, mỗi lần đếm cách nhau 1s ORG 2000H
MOV R6,#0
MOV R7,#0
LOOP1:
MOV R5,#100 ; gán R5 = 100*(5ms+5ms) = 1s để led xuất ra có sự lưu ảnh.
LOOP:
MOV DPTR,#0
MOV A,R7
ADD A,#0E0H
MOVX @DPTR,A
ACALL DL5MS
MOV A,R6
ADD A,#0D0H
MOVX @DPTR,A
ACALL DL5MS
DJNZ R5,LOOP
INC R7
CJNE R7,#0AH,LOOP1
MOV R7,#0
INC R6
CJNE R6,#6,LOOP1
MOV R6,#0
SJMP LOOP1
DL5MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-5000)
![Page 8: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/8.jpg)
MOV TL0,#LOW(-5000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
END
![Page 9: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/9.jpg)
BÀI 3: THÍ NGHIỆM HIỂN THỊ BẰNG LCD
1. Thí nghiệm 1: Hiển thị chuỗi “Hello world” lên LCD ORG 2000H
MAIN:
MOV DPTR,#8000H
ACALL CLEAR
ACALL INIT_LCD
ACALL HIEN_CHU
ACALL DELAY1
SJMP MAIN
;=============================================Chương trình con LCD
INIT_LCD:
MOV A,#38H
ACALL WRITECOM
MOV A,#0EH
ACALL WRITECOM
MOV A,#06H
ACALL WRITECOM
RET
CLEAR:
MOV A,#01H
ACALL WRITECOM
RET
WRITECOM:
SETB P3.4
CLR P3.5
MOVX @DPTR,A
CLR P3.4
ACALL DELAY_50MS
RET
WRITETEXT:
SETB P3.4
SETB P3.5
MOVX @DPTR,A
CLR P3.4
ACALL DELAY2
RET
HIEN_CHU:
MOV A,#'D'
ACALL WRITETEXT
MOV A,#'H'
ACALL WRITETEXT
MOV A,#'E'
ACALL WRITETEXT
MOV A,#'L'
ACALL WRITETEXT
MOV A,#' 'O’
ACALL WRITETEXT
MOV A,#'’W'
ACALL WRITETEXT
MOV A,#'’O'
ACALL WRITETEXT
MOV A,#'’R'
ACALL WRITETEXT
MOV A,#'’L'
ACALL WRITETEXT
MOV A,#'’D'
ACALL WRITETEXT
![Page 10: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/10.jpg)
RET
; ===============================================Chương trình DELAY
DELAY_50MS:
MOV R3,#100
LOOP1:
MOV R7,#250
DJNZ R7,$
DJNZ R3,LOOP1
RET
DELAY1: ; delay 300ms
MOV R6,#3
LOP1:
MOV R5,#200
LOP:
MOV R4,#250
DJNZ R4,$
DJNZ R5,LOP
DJNZ R6,LOP1
RET
DELAY2:
MOV R3,#1
LOOP2:
MOV R7,#50
DJNZ R7,$
DJNZ R3,LOOP2
RET
END
BÀI TẬP:
Viết chương trình hiển thị chuỗi: “DHBK TPHCM” chạy trên màn hình, khi hết màn hình thì chạy ngược lại, lặp lại quá trình trên
ORG 2000H
MAIN:
MOV DPTR,#8000H
MOV R1,#6
ACALL CLEAR
ACALL INIT_LCD
ACALL HIEN_CHU
ACALL DELAY
LAP1:
MOV A,#1CH ; dịch phải
ACALL WRITECOM
ACALL DELAY
DJNZ R1,LAP1
MOV R1,#6
LAP:
MOV A,#18H ; dịch trái
ACALL WRITECOM
ACALL DELAY
DJNZ R1,LAP
MOV R1,#6
SJMP LAP1
;=============================================Chương trình con LCD
INIT_LCD:
MOV A,#38H
ACALL WRITECOM
MOV A,#0EH
ACALL WRITECOM
MOV A,#06H
![Page 11: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/11.jpg)
ACALL WRITECOM
RET
CLEAR:
MOV A,#01H
ACALL WRITECOM
RET
WRITECOM:
SETB P3.4
CLR P3.5
MOVX @DPTR,A
CLR P3.4
ACALL DELAY_50MS
RET
WRITETEXT:
SETB P3.4
SETB P3.5
MOVX @DPTR,A
CLR P3.4
ACALL DELAY2
RET
HIEN_CHU:
MOV A,#'D'
ACALL WRITETEXT
MOV A,#'H'
ACALL WRITETEXT
MOV A,#'B'
ACALL WRITETEXT
MOV A,#'K'
ACALL WRITETEXT
MOV A,#' '
ACALL WRITETEXT
MOV A,#'T'
ACALL WRITETEXT
MOV A,#'P'
ACALL WRITETEXT
MOV A,#'H'
ACALL WRITETEXT
MOV A,#'C'
ACALL WRITETEXT
MOV A,#'M'
ACALL WRITETEXT
RET
; ===============================================Chương trình DELAY
DELAY_50MS:
MOV R3,#100
LOOP1:
MOV R7,#250
DJNZ R7,$
DJNZ R3,LOOP1
RET
DELAY:
MOV R6,#3
LOP1:
MOV R5,#200
LOP:
MOV R4,#250
DJNZ R4,$
DJNZ R5,LOP
DJNZ R6,LOP1
RET
DELAY2:
MOV R3,#1
LOOP2:
![Page 12: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/12.jpg)
MOV R7,#50
DJNZ R7,$
DJNZ R3,LOOP2
RET
END
![Page 13: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/13.jpg)
BÀI 4: THÍ NGHIỆM GIAO TIẾP QUA CỔNG NỐI TIẾP
1. Thí nghiệm 1: Phát chuỗi “Hello World” ra port nối tiếp ORG 2000H
MAIN:
MOV SCON,#52H
MOV TMOD,#20H
MOV TH1,#-3
SETB TR1
MOV DPTR,#TABLE
LAP:
CLR A
MOVC A,@A+DPTR
INC DPTR
ACALL OUT_CHAR
JNZ LAP
SJMP $
OUT_CHAR: ;phát kí tự ra port nối tiếp
JNB TI, $
CLR TI
MOV SBUF, A
RET
TABLE:
DB 'Hello, world',0 ; phát tới khi gặp kí tự 0 thì dừng
END
2. Thí nghiệm 2: Nhận kí tự từ port nối tiếp hiển thị ra LCD (tốc độ port chọn là 9600pbs) ORG 2000H
EN BIT P3.4
RS BIT P3.5
MAIN:
MOV DPTR, #8000H
ACALL LCD_INIT
ACALL UART_INIT
ACALL CLEAR
LOOP:
MOV R4,#16
LAP1:
ACALL IN_CHAR
ACALL WRITE_TEXT
DJNZ R4,LAP1
MOV R4,#16
MOV A,#0C0H ;để con trỏ xuống hàng
ACALL WRITE_COM
LAP2:
ACALL IN_CHAR
ACALL WRITE_TEXT
DJNZ R4,LAP2
ACALL CLEAR
SJMP LOOP
;============================================ Chương trình con port nối tiếp
UART_INIT:
MOV SCON,#52H
MOV TMOD,#20H
MOV TH1,#-3
SETB TR1
RET
OUT_CHAR:
JNB TI, $ ;khi phát hết TI=1
![Page 14: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/14.jpg)
CLR TI
MOV SBUF, A
RET
IN_CHAR:
JNB RI, $
CLR RI
MOV A, SBUF
RET
;============================================== Chương trình con LCD
LCD_INIT:
MOV A,#38H
ACALL WRITE_COM
MOV A,#0EH
ACALL WRITE_COM
MOV A,#06H
ACALL WRITE_COM
RET
CLEAR:
MOV A,#01H
ACALL WRITE_COM
RET
WAIT_LCD:
MOV R7, #100
DEL1:
MOV R6, #250
DJNZ R6, $
DJNZ R7, DEL1
RET
WRITE_TEXT:
ACALL WAIT_LCD
SETB RS
MOVX @DPTR, A
SETB EN
CLR EN
RET
WRITE_COM:
ACALL WAIT_LCD
CLR RS
MOVX @DPTR, A
SETB EN
CLR EN
RET
END
3. Thí nghiệm 3: Nhận kí tự từ port nối tiếp hiển thị ra LCD đồng thời phát ra lại port nối tiếp (tốc độ port chọn là 9600pbs)
ORG 2000H
EN BIT P3.4
RS BIT P3.5
MAIN: ; chương trình chính
MOV DPTR, #8000H
ACALL LCD_INIT
ACALL UART_INIT
ACALL CLEAR
LOOP:
MOV R4,#16 ; gán R4 = 16 để nhập chữ đđủ trên hàng 1 rồi
xuống hàng 2
LAP1:
ACALL IN_CHAR
ACALL WRITE_TEXT
![Page 15: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/15.jpg)
ACALL OUT_CHAR
DJNZ R4,LAP1
MOV R4,#16
MOV A,#0C0H ; để con trỏ xuống hàng
ACALL WRITE_COM
LAP2:
ACALL IN_CHAR
ACALL WRITE_TEXT
ACALL OUT_CHAR
DJNZ R4,LAP2
ACALL CLEAR
SJMP LOOP
;========================================= Chương trình con port nối tiếp
UART_INIT: ; khởi đđộng port nối tiếp
MOV SCON,#52H
MOV TMOD,#20H
MOV TH1,#-3
SETB TR1
RET
OUT_CHAR: ; phát kí tự ra port nối tiếp
JNB TI, $ ;khi phát hết TI = 1
CLR TI
MOV SBUF, A
RET
IN_CHAR: ; thu kí tự từ port nối tiếp
JNB RI, $
CLR RI
MOV A, SBUF
RET
;============================================== Chương trình con LCD
LCD_INIT: ; khởi đđộng LCD
MOV A,#38H
ACALL WRITE_COM
MOV A,#0EH
ACALL WRITE_COM
MOV A,#06H
ACALL WRITE_COM
RET
CLEAR:
MOV A,#01H
ACALL WRITE_COM
RET
WAIT_LCD: ; chương trình tạo delay chờ cho LCD
MOV R7, #100
DEL1:
MOV R6, #250
DJNZ R6, $
DJNZ R7, DEL1
RET
WRITE_TEXT: ; ghi kí tự ra LCD
ACALL WAIT_LCD
SETB RS
MOVX @DPTR, A
SETB EN
CLR EN
RET
![Page 16: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/16.jpg)
WRITE_COM: ; ghi lệnh ra LCD
ACALL WAIT_LCD
CLR RS
MOVX @DPTR, A
SETB EN
CLR EN
RET
END
BÀI TẬP:
Viết chương trình nhập kí tự từ bàn phím về làm công việc sau đây:
a. Kiểm tra xem kí tự nhận được là A-Z hoặc a-z thì hiển thị lên LCD
b. Kiểm tra xem kí tự nhận nhấn được số từ 0-9 thì hiển thị qua led 7 đoạn c. Nếu nhấn phím Enter thì xuống hàng mã ASCII 13H
d. Nếu nhấn phím ESC thì xóa màn hình LCD mã ASCII 27H
ORG 2000H
EN BIT P3.4
RS BIT P3.5
MAIN:
MOV DPTR, #8000H
ACALL LCD_INIT
ACALL UART_INIT
ACALL CLEAR
LOOP:
MOV R4,#16
LAP1:
ACALL IN_CHAR
ACALL NHANKYTU
ACALL OUT_CHAR
DJNZ R4,LAP1
MOV R4,#16
MOV A,#0C0H ;để con trỏ xuống hàng
ACALL WRITE_COM
LAP2:
ACALL IN_CHAR
ACALL NHANKYTU
ACALL OUT_CHAR
DJNZ R4,LAP2
ACALL CLEAR
SJMP LOOP
;=======================================Chương trình con Port nối tiếp
UART_INIT:
MOV SCON,#52H
MOV TMOD,#20H
MOV TH1,#-3
SETB TR1
RET
OUT_CHAR:
JNB TI, $ ;khi phát hết TI = 1
CLR TI
MOV SBUF, A
RET
IN_CHAR:
JNB RI, $
CLR RI
MOV A, SBUF
RET
;========================================== Chương trình con LCD
LCD_INIT:
MOV A,#38H
ACALL WRITE_COM
![Page 17: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/17.jpg)
MOV A,#0EH
ACALL WRITE_COM
MOV A,#06H
ACALL WRITE_COM
RET
CLEAR:
MOV A,#01H
ACALL WRITE_COM
RET
WAIT_LCD:
MOV R7, #100
DEL1:
MOV R6, #250
DJNZ R6, $
DJNZ R7, DEL1
RET
WRITE_TEXT:
ACALL WAIT_LCD
SETB RS
MOVX @DPTR, A
SETB EN
CLR EN
RET
WRITE_COM:
ACALL WAIT_LCD
CLR RS
MOVX @DPTR, A
SETB EN
CLR EN
RET
;=========Chương trình con kiểm tra kí tự nhận được từ Port nối tiếp về xử lí theo
đề bài
NHANKYTU:
PUSH ACC
;................................... kiểm tra ESC VA ENTER
CJNE A,#13,SKIP1
MOV A,#0C0H ;để con trỏ xuống hàng
ACALL WRITE_COM
SJMP THOAT
SKIP1:
CJNE A,#27,TIEP
ACALL CLEAR
SJMP THOAT
;.................................. kiểm tra 0-9
TIEP:
CJNE A,#30H,$+3
JNC KTRA3
SJMP THOAT
KTRA3:
CJNE A,#3AH,$+3
JC XUAT_LED
;................................... kiểm tra A-Z
CJNE A,#41H,$+3
JNC KTRA1
SJMP THOAT
KTRA1:
CJNE A,#5BH,$+3
![Page 18: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/18.jpg)
JC XUAT_LCD ; C=1 thì A < 5AH
;..................................... kiểm tra a-z
CJNE A,#61H,$+3
JNC KTRA2
SJMP THOAT
KTRA2:
CJNE A,#7BH,$+3
JC XUAT_LCD
XUAT_LED:
PUSH DPH
PUSH DPL
MOV DPTR,#0
ANL A,#0FH
ADD A,#0E0H
MOVX @DPTR,A
ACALL DELAY_2MS
POP DPL
POP DPH
SJMP THOAT
XUAT_LCD:
ACALL WRITE_TEXT
THOAT:
POP ACC
RET
;========================Chương trình con tạo trễ tạo sự lưu ảnh trên led 7 đoạn
DELAY_2MS:
MOV R1,#4
LAP9:
MOV R2,#250
DJNZ R2,$
DJNZ R1,LAP9
RET
END
![Page 19: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/19.jpg)
BÀI 5: THÍ NGHIỆM ĐIỀU KHIỂN ADC
1. Thí nghiệm 1: Viết chương trình thực hiện đọc điện áp của biến trở trên kênh 0 và hiển thị ra led 7 đoạn. ORG 2000H
MAIN:
MOV DPTR,#4000H ;địa chỉ khối ADC
MOV A,#0
MOVX @DPTR,A
ACALL DELAY_100US
MOVX A,@DPTR
MOV DPTR,#0000H
MOV B,#10
DIV AB
MOV R7,B
MOV B,#10
DIV AB
ORL A,#0B0H
MOVX @DPTR,A
ACALL DELAY_1MS
MOV A,B
ORL A,#0D0H
MOVX @DPTR,A
ACALL DELAY_1MS
MOV A,R7
ORL A,#0E0H
MOVX @DPTR,A
ACALL DELAY_1MS
SJMP MAIN
DELAY_100US:
MOV R6,#200
DJNZ R6,$
RET
DELAY_1MS:
MOV R6,#5
LOOP:
MOV R5,#100
DJNZ R5,$
DJNZ R6,LOOP
RET
END
2. Thí nghiệm 2: Viết chương trình đọc điện áp của kênh 0 và hiển thị lên LCD
ORG 2000H
MAIN:
MOV DPTR,#4000H ;địa chỉ khối ADC
MOV A,#0
MOVX @DPTR,A
ACALL DELAY_100US
MOVX A,@DPTR
MOV B,#10
DIV AB
MOV R2,B
MOV B,#10
DIV AB
MOV DPTR,#8000H
ACALL CLEAR
ACALL INIT_LCD
ACALL HIEN_CHU
![Page 20: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/20.jpg)
ACALL DELAY1
SJMP MAIN
;=============================================Chương trình con LCD
INIT_LCD:
MOV A,#38H
ACALL WRITECOM
MOV A,#0EH
ACALL WRITECOM
MOV A,#06H
ACALL WRITECOM
RET
CLEAR:
MOV A,#01H
ACALL WRITECOM
RET
WRITECOM:
SETB P3.4
CLR P3.5
MOVX @DPTR,A
CLR P3.4
ACALL DELAY_50MS
RET
WRITETEXT:
SETB P3.4
SETB P3.5
MOVX @DPTR,A
CLR P3.4
ACALL DELAY2
RET
HIEN_CHU:
ACALL WRITETEXT
MOV A,B
ACALL WRITETEXT
MOV A,R2
ACALL WRITETEXT
RET
; ===============================================Chương trình DELAY
DELAY_50MS:
MOV R3,#100
LOOP1:
MOV R7,#250
DJNZ R7,$
DJNZ R3,LOOP1
RET
DELAY1: ; delay 300ms
MOV R6,#3
LOP1:
MOV R5,#200
LOP:
MOV R4,#250
DJNZ R4,$
DJNZ R5,LOP
DJNZ R6,LOP1
RET
DELAY2:
MOV R3,#1
LOOP2:
MOV R7,#50
DJNZ R7,$
DJNZ R3,LOOP2
RET
DELAY_100US:
![Page 21: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/21.jpg)
MOV R6,#200
DJNZ R6,$
RET
END
![Page 22: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/22.jpg)
BÀI 6: THÍ NGHIỆM VỚI LED MA TRẬN
1. Thí nghiệm 1: Viết chương trình hiển thị kí tự A lên LED ma trận.
ORG 2000H
LOOP:
MOV A,#0
MOV R7,#8
LAP:
MOV R4,A
MOV DPTR,#COT ;quét cột của LED ma trận
MOVC A,@A+DPTR
ACALL XUAT_COT
MOV A,R4
MOV DPTR,#HANG
MOVC A,@A+DPTR
ACALL XUAT_HANG ;quét hàng của LED ma trận
ACALL DL2MS
MOV A,R4
INC A
DJNZ R7,LAP
SJMP LOOP
XUAT_COT:
MOV DPTR,#0C00H ;địa chỉ cột của LED ma trận
MOVX @DPTR,A
RET
XUAT_HANG:
MOV DPTR,#0A00H ;địa chỉ hàng của LED ma trận
MOVX @DPTR,A
RET
DL2MS:
MOV R6,#4
LAP1:
MOV R5,#250
DJNZ R5,$
DJNZ R6,LAP1
RET
COT: DB 01H, 02H, 04H, 08H, 10H, 20H, 40H, 80H
HANG:DB 03H, 0EDH, 0EEH, 0EEH, 0EDH, 03H, 0FFH, 0FFH
END
2. Thí nghiệm 2: Viết chương trình chạy chữ A B từ phải sang trái hiển thị lên LED ma trận
ORG 2000H
TT:
MOV R4,#10
MOV R0,#0
MOV DPTR,#CHAR
MOV R5,#24
LOOP1:
MOV R2,DPH
MOV R3,DPL
LOOP:
MOV DPH,R2
MOV DPL,R3
MOV R1,#8
MOV A,#00000001B
LAP:
ACALL HT_COT
![Page 23: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/23.jpg)
PUSH ACC
CLR A
MOVC A,@A+DPTR
ACALL HT_HANG
INC DPTR
POP ACC
RL A
DJNZ R1, LAP
DJNZ R4,LOOP
MOV R4,#10
INC R0
MOV A,R0
MOV DPTR,#CHAR
ADD A,DPL
MOV DPL,A
DJNZ R5,LOOP1
SJMP TT
CHAR:
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,03H, 0EDH, 0EEH,
DB 0EEH, 0EDH, 03H, 0FFH, 0FFH,00H, 76H, 76H, 76H, 89H, 0FFH, 0FFH, DB
0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
HT_COT:
PUSH DPH
PUSH DPL
MOV DPTR,#0C000H
MOVX @DPTR,A
POP DPL
POP DPH
RET
HT_HANG:
PUSH DPH
PUSH DPL
MOV DPTR,#0A000H
MOVX @DPTR,A
ACALL DELAY_1MS
POP DPL
POP DPH
RET
DELAY_1MS:
MOV R7,#5
DL:
MOV R6,#100
DJNZ R6,$
DJNZ R7,DL
RET
END
![Page 24: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/24.jpg)
BÀI 7: THÍ NGHIỆM VỚI ĐỘNG CƠ DC
1. 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, nghỉ 2s, chạy theo chiều ngược 2s, nghỉ 2s và lặp lại.
ORG 2000H
MAIN:
MOV DPTR,#0E000H ;địa chỉ của động cơ
LOOP:
MOV A,#02H ;động cơ quay ngược (theo quy ước)
MOVX @DPTR,A
ACALL DL2S
MOV A,#00H ;động cơ dừng
MOVX @DPTR,A
ACALL DL2S
MOV A,#01H ;động cơ quay thuận (theo quy ước)
MOVX @DPTR,A
ACALL DL2S
MOV A,#00H
MOVX @DPTR,A
ACALL DL2S
SJMP LOOP
DL2S:
MOV R5,#40
LAP1:
MOV R6,#100
LAP:
MOV R7,#250
DJNZ R7,$
DJNZ R6,LAP
DJNZ R5,LAP1
RET
END
2. Thí nghiệm 2: Viết chương trình điều khiển động cơ với phương pháp PWM, trong đó thời gian “bật”
của xung là 50% chu kỳ.
ORG 2000H
LJMP MAIN
ORG 200BH ;địa chỉ ngắt timer 0
LJMP ISRT0
ORG 201BH ;địa chỉ ngắt timer 1
LJMP ISRT1
MAIN:
MOV DPTR,#0E000H ;địa chỉ của động cơ
MOV A,#01H
MOVX @DPTR,A
MOV TMOD,#11H
SETB TF0
MOV IE,#8AH ;cho phép ngắt timer 0 và timer 1
SJMP $
ISRT0: ;ngắt timer 0 tạo chu kỳ 1000us
SETB ACC.0
CLR ACC.1
MOVX @DPTR,A
CLR TR0
MOV TH0,#HIGH(-1000)
MOV TL0,#LOW(-1000)
SETB TR0
![Page 25: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/25.jpg)
CLR TR1
MOV TH1,#HIGH(-500)
MOV TL1,#LOW(-500)
SETB TR1
RETI
ISRT1: ;ngắt timer 1 tạo độ rộng xung 500us
CLR ACC.0
CLR ACC.1
MOVX @DPTR,A
RETI
END
3. Thí nghiệm 3: Viết chương trình điều khiển động cơ vơi phương pháp PWM, trong đó thời gian “bật”
của xung lần lượt là 20%, 50%, 80% chu kỳ. Mỗi độ rộng xung cách nhau 5s. Qui trình được lặp lại
liên tục.
ORG 2000H
LJMP MAIN
ORG 200BH
LJMP ISRT0
ORG 201BH
LJMP ISRT1
MAIN:
MOV R7,#250
MOV R6,#20
MOV R3,#0
MOV DPTR,#0E000H
MOV A,#01H
MOVX @DPTR,A
MOV TMOD,#11H
SETB TF0
MOV IE,#8AH
SJMP $
ISRT0:
CJNE R3,#0,NHAY
DJNZ R7,LOP
DJNZ R6,LOP1
INC R3
MOV R6,#20
MOV R7,#250
SJMP LOP2
LOP1:
MOV R7,#250
LOP:
SETB ACC.0
CLR ACC.1
MOVX @DPTR,A
CLR TR0
MOV TH0,#HIGH(-1000)
MOV TL0,#LOW(-1000)
SETB TR0
CLR TR1
MOV TH1,#HIGH(-200)
MOV TL1,#LOW(-200)
SETB TR1
SJMP THOAT
NHAY:
CJNE R3,#1,NHAY1
DJNZ R7,LOP2
DJNZ R6,LOP3
INC R3
MOV R6,#20
![Page 26: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/26.jpg)
MOV R7,#250
SJMP LOP2
LOP3:
MOV R7,#250
LOP2:
SETB ACC.0
CLR ACC.1
MOVX @DPTR,A
CLR TR0
MOV TH0,#HIGH(-1000)
MOV TL0,#LOW(-1000)
SETB TR0
CLR TR1
MOV TH1,#HIGH(-500)
MOV TL1,#LOW(-500)
SETB TR1
SJMP THOAT
NHAY1:
DJNZ R7,LOP4
DJNZ R6,LOP5
MOV R3,#0
MOV R6,#20
MOV R7,#250
SJMP THOAT
LOP5:
MOV R7,#250
LOP4:
SETB ACC.0
CLR ACC.1
MOVX @DPTR,A
CLR TR0
MOV TH0,#HIGH(-1000)
MOV TL0,#LOW(-1000)
SETB TR0
CLR TR1
MOV TH1,#HIGH(-800)
MOV TL1,#LOW(-800)
SETB TR1
SJMP THOAT
THOAT:
RETI
ISRT1:
CLR ACC.0
CLR ACC.1
MOVX @DPTR,A
RETI
END
4. Thí nghiệm 4: Viết chươg trình thực hiện việc tăng hoặc giảm dần tốc độ động cơ nhờ hai nút nhấn
P1.4 và P1.5. Khi không nhấn nút, tốc độ động cơ không đổi. Khi nút P1.4 được nhấn và giữ thì tốc
độ động cơ tăng dần. Khi nút P1.5 được nhấn và giữ thì tốc độ động cơ giảm dần.
ORG 2000H
MAIN:
MOV DPTR,#0E000H
MOV R3,#5
MOV R4,#5
KT:
JNB P1.4,NHAY1 ;nhấn P1.4 thì đến NHAY1
MOV A,#01H
MOVX @DPTR,A
ACALL DLC
MOV A,#00H
![Page 27: Bao Cao TNVXL Nhom3 Senie](https://reader034.fdocuments.net/reader034/viewer/2022042613/5430464e219acdf5478b573c/html5/thumbnails/27.jpg)
MOVX @DPTR,A
ACALL DLT
JNB P1.5,NHAY2 ;nhấn P1.5 thì đến NHAY2
MOV A,#01H
MOVX @DPTR,A
ACALL DLC
MOV A,#00H
MOVX @DPTR,A
ACALL DLT
SJMP KT
NHAY1:
INC R3
DEC R4
MOV A,#01H
MOVX @DPTR,A
ACALL DLC
MOV A,#00H
MOVX @DPTR,A
ACALL DLT
SJMP KT
NHAY2:
INC R4
DEC R3
SKIP2:
MOV A,#01H
MOVX @DPTR,A
ACALL DLC
MOV A,#00H
MOVX @DPTR,A
ACALL DLT
SJMP KT
DLC:
MOV R6,03H
LAP1:
MOV R5,#100
DJNZ R5,$
DJNZ R6,LAP1
RET
DLT:
MOV R6,04H
LAP:
MOV R5,#100
DJNZ R5,$
DJNZ R6,LAP
RET
END