Tải bản đầy đủ (.doc) (35 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (267.29 KB, 35 trang )

Thí nghiệm Vi xử lí – Học kì hè 09-10

Nhóm 07

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
----------KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ

BÁO CÁO THÍ NGHIỆM VI XỬ LÍ
Lớp : DD07TD
Nhóm : 01
Tổ : 07

Họ và tên SV:
Nguyễn Thành Nam
Vũ Xuân Tầm
Dương Lâm Phương
Nguyễn Thanh Nam
Phương
Lê Bá Tấn

MSSV:
40701531
40702162
40701876


Thí nghiệm Vi xử lí – Học kì hè 09-10

Nhóm 07




Thí nghiệm Vi xử lí – Học kì hè 09-10

Phần 1:

Nhóm 07

Làm việc với Vi điều khiển 89C51

Bài 1:

Thí Nghiệm với nút nhấn và LED đơn
Thí nghiệm 1: Viết chương trình thực hiện việc đọc liên tục trạng trạng thái của nút nhấn P1.0 và hiển thị ra
LED được nối tại chân P1.1
Code:

ORG 2000H
;Doc trang thai cua chan P1.0 va xuat ra P1.1
LOOP:
MOV C, P1.0
MOV P1.1, C
SJMP LOOP
END
Thí nghiệm 2: Viết chương trình tạo xung vuông 1Hz ra chân P1.0,biết tần số dao động được dùng trong KIT
là 11.059MHz
Code:

ORG 2000H
;Tao xung vuong 1Hz tren P1.0 dung vong lap

LAP:
CPL P1.0
ACALL DL500
SJMP LAP
DL500:
PUSH 05
PUSH 06
PUSH 07
MOV R5, #10
L2:
MOV R6, #100
L1:
MOV R7, #250
DJNZ R7, $
DJNZ R6, L1
DJNZ R5, L2


Thí nghiệm Vi xử lí – Học kì hè 09-10
POP 07
POP 06
POP 05
RET
END
Thí nghiệm 2: (Mở rộng)
Thay đổi tần số xung vuông thành 0.5Hz, với chu kì nhiệm vụ là 30%
Code:

ORG 2000H
;Tao xung tan so 0.5Hz tren P1.0 voi chu ki nhiem vu 30%

LAP:
SETB P1.0 ;
LCALL DL150 ;
CLR P1.0 ;
LCALL DL350 ;
SJMP LAP ;
DL150: PUSH 07
PUSH 06
PUSH 05
MOV R5, #2 ;
L1_2:
MOV R6, #150 ;
L1_1:
MOV R7, #250 ;
DJNZ R7, $ ;
DJNZ R6, L1_1;
DJNZ R5, L1_2;
POP 05
POP 06
POP 07
RET
DL350: PUSH 07
PUSH 06
PUSH 05
MOV R5, #7 ;
L2_2:
MOV R6, #100 ;
L2_1:
MOV R7, #250 ;
DJNZ R7, $ ;

DJNZ R6, L2_1;
DJNZ R5, L2_2;
POP 05
POP 06
POP 07
RET
END
Thí nghiệm 3:
Viết chương trình tạo xung vuông 1 Hz dùng Timer0
Code:

ORG 2000H
;Tao xung vuong 1Hz tren P1.0 su dung Timer0
LAP:
CPL P1.0
CALL DL500
SJPM LAP
DL500: MOV TMOD, #01H ;Goi Timer0, Mode1
PUSH 05
MOV R5, #10
LOOP:
MOV TH0, #HIGH(-50000)
MOV TL0, #LOW(-50000)

Nhóm 07


Thí nghiệm Vi xử lí – Học kì hè 09-10

Nhóm 07


SETB TR0
JNB TF0, $
CLR TF0
CLR TR0
DJNZ R5, LOOP
POP R5
RET
END
Thí nghiệm 3: (Mở rộng)
Tận dụng ngắt Timer để tạo xung
Code:

ORG 2000H
;Tao xung 1Hz tren P1.0 dung ngat Timer0
LJMP MAIN
ORG 200BH
INC R5
CJNE R5, #10, ISRT0
MOV R5, #1
CPL P1.0
ISRT0: CLR TR0
CLR TF0
MOV TH0, #HIGH(-50000)
MOV TL0, #LOW(-50000)
SETB TR0
RETI
ORG 2030H
MAIN:
MOV TMOD ,#01H

SETB TF0
MOV IE, #82H
SJMP $
END
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ể thay đổi được bằng cách nhấn
P1.1 (tăng) hoặc P1.2 (giảm)
Code:

ORG 2000H
;Tao xung tren P1.0 va thay doi theo P1.1 (tang), P1.2 (giam)
MOV TMOD, #01H
MOV A,#10
LOOP:
JNB P1.1,TANG
JNB P1.2,GIAM
;Tan so 1Hz lam trung binh,neu ko nhan nut nao thi van giu nguyen tan so cu
CALL XUNG
SJMP LOOP
TANG:
;Xet xem A co la 255 hay chua
CJNE A, #255, TANG1
SJMP LOOP
; A khac 255
TANG1:
INC A
CALL XUNG
SJMP LOOP



Thí nghiệm Vi xử lí – Học kì hè 09-10

Nhóm 07

GIAM:

CJNE A, #1, GIAM1
SJMP LOOP
GIAM1:
DEC A
CALL XUNG
SJMP LOOP

XUNG:
MOV R5, A
DL50:
MOV TH0, #HIGH(-50000)
MOV TL0, #LOW(-50000)
SETB TR0
JNB TF0, $
CLR TR0
CLR TF0
DJNZ R5, DL50
CPL P1.0
RET
END

Bài 2:

Thí nghiệm hiển thị dùng LED 7 đoạn

Thí nghiệm 1:
Viết chương trình thực hiện bộ đếm từ 0 đến 9 và hiển thị ra LED 7 đoạn,mỗi lần cách nhau 2s
Code:

ORG 2000H
;bo dem tu 0 toi 9, hien thi tren LED 7 doan, moi lan cach nhau 2s
CLR A
MAIN:
MOV R1, #10
MOV A,#0E0H
LOOP:
MOV DPTR, #0000H
MOVX @DPTR, A
INC A
CALL DL2000
DJNZ R1,LOOP
SJMP MAIN
DL2000: PUSH 05 ;Delay 2s
PUSH 06
PUSH 07
MOV R5, #20
DL2:
MOV R6, #200
DL1:
MOV R7, #250
DJNZ R7, $
DJNZ R6, DL1
DJNZ R5, DL2
POP 07



Thí nghiệm Vi xử lí – Học kì hè 09-10
POP 06
POP 05
RET
END

Thí nghiệm 2: Viết chương trình hiển thị giá trị 1234 ra LED 7 đoạn.
Code:

ORG 2000H
;Bai 2, Thi nghiem 2
;Hien thi 1234 len 4 LED 7 doan
AGAIN: CLR A
MOV R1, #4
LOOP:
MOV DPTR, #TABLE
MOVC A,@A+DPTR
DJNZ R1,NEXT
SJMP AGAIN ;lien tuc de tao hinh anh tren mat
NEXT:
CALL XUAT
CALL DL3
INC DPTR
SJMP LOOP
XUAT:
PUSH DPH
PUSH DPL
MOV DPTR, #0000H
MOVX @DPTR, A

POP DPL
POP DPH
RET
DL3:
PUSH 05
PUSH 06
MOV R5, #12
L1:
MOV R6, #250
DJNZ R6, $
DJNZ R5, L1
POP 06
POP 05
RET
TABLE: DB 71H,0B2H,0D3H,0E4H
END

Thí nghiêm 2: Mở rộng
Code:

ORG 2000H
;Bai 2 Thi nghiem 2 mo rong
;Hien thi gia tri la ma BCD nen trong R7_R6 ra 4 LED
;R7=1_2, R6=3_4
MOV R7, #00010010B
MOV R6, #00110100B
CALL BP_2_B
LOOP:
;Copy R5=>A,roi OR voi 70H
MOV A,R5

ORL A, #70H
CALL XUAT

Nhóm 07


Thí nghiệm Vi xử lí – Học kì hè 09-10

Nhóm 07

;Copy R4=>A,OR voi 0B0H
MOV A, R4
ORL A, #0B0H
CALL XUAT
;Copy R3=>A,OR voi 0D0H
MOV A, R3
ORL A, #0D0H
CALL XUAT
;Copy R2=>A,OR voi 0E0H
MOV A,R2
ORL A, #0E0H
CALL XUAT
SJMP LOOP
BP_2_B: ;R7=>R5_R4,R6=>R3_R2
MOV A,R7
PUSH ACC
ANL A, #0FH
MOV R4, A
POP ACC
ANL A, #0F0H

SWAP A
MOV R5,A
MOV A,R6
PUSH ACC
ANL A, #0FH
MOV R2, A
POP ACC
ANL A, #0F0H
SWAP A
MOV R3,A
RET
XUAT:
;Xuat + Delay 3ms
MOV DPTR, #0000H
MOVX @DPTR, A
;Delay 3ms
PUSH 00
PUSH 01
MOV R0, #6
L1:
MOV R1, #250
DJNZ R1, $
DJNZ R0, L1
POP 01
POP 00
RET
END

Thí nghiệm 3: Viết chương trình thể hiện giá trị nhị phân trong thanh ghi R7 ra LED 7 đoạn.
Code:


ORG 2000H
;Bai 2 Thi nghiem 3
;Hien thi gia tri nhi phan trong R7 len LED 7 doan
MOV R7, #0A0H ;Example R7= 160


Thí nghiệm Vi xử lí – Học kì hè 09-10
MOV A, R7
CALL BIN_2_BCD
LOOP:
;R6=>A,OR voi 0B0H roi xuat ra LED_2
MOV A, R6
ORL A, #0B0H
CALL XUAT
;R5=>A,OR voi 0D0H xuat ra LED_3
MOV A, R5
ORL A, #0D0H
CALL XUAT
;R4=>A,OR voi 0E0H xuat ra LED_4
MOV A, R4
ORL A, #0E0H
CALL XUAT
SJMP LOOP
BIN_2_BCD:
;R7=R6_R5_R4
MOV B, #10
DIV AB
MOV R4,B
MOV B, #10

DIV AB
MOV R6, A
MOV R5, B
RET
XUAT:
;Xuat + Delay 3ms
MOV DPTR, #0000H
MOVX @DPTR, A
;Delay 3ms
PUSH 02
PUSH 03
MOV R2, #6
L1:
MOV R3, #250
DJNZ R3, $
DJNZ R2, L1
POP 03
POP 02
RET
END

Bài 3:

Thí nghiệm hiển thị dùng LCD
Thí nghiệm 1:
Code:

ORG
2000H
;****************************************************

;Hien thi chuoi "Hello" tren LCD
;****************************************************
EN
BIT
P3.4
RS
BIT
P3.5
CALL

INIT_LCD

Nhóm 07


Thí nghiệm Vi xử lí – Học kì hè 09-10
MAIN:

MOV
CLR
MOVC
CJNE
SJMP
CALL
INC
SJMP

LOOP:

NEXT:


Nhóm 07

DPTR, #TABLE
A
A, @A+DPTR
A, #0, NEXT
$
WRITE_LCD
DPTR
LOOP

;-----------------------------------------------------INIT_LCD:
SETB
EN
CLR
RS
MOV
A, #38H
CALL
SEND_COM
MOV
A, #06H
CALL
SEND_COM
MOV
A, #0EH
CALL
SEND_COM
RET

SEND_COM:

PUSH
PUSH
SETB
CLR
MOV
MOVX
CLR
LCALL
POP
POP
RET

DPH
DPL
EN
RS
DPTR, #8000H
@DPTR, A
EN
WAIT_LCD
DPH
DPL

PUSH
PUSH
SETB
SETB
MOV

MOVX
CLR
LCALL
POP
POP
RET

DPH
DPL
EN
RS
DPTR, #8000H
@DPTR, A
EN
WAIT_LCD
DPH
DPL

MOV
MOV
DJNZ
DJNZ
RET

R6,
R7,
R7,
R6,

DB

END

'Hello',0

WRITE_LCD:

WAIT_LCD:
DL1:

TABLE:



#200
#250
$
DL1

Thí nghiệm thêm: viết chương trình hiển thị lên LCD chữ “DHBK TPHCM” dịch trái và dịch phải:


Thí nghiệm Vi xử lí – Học kì hè 09-10
ORG 2000H
RS BIT P3.5
EN BIT P3.4
CALL LCD_INIT
MOV DPTR, #TABLE
MAIN: CLR A
MOVC A,@A+DPTR
CJNE A,#0,NEXT

SJMP KT
NEXT: CALL WRITE_LCD
INC DPTR
SJMP MAIN
KT:

MOV R1, #6

KT1:

MOV A,#1CH
CALL WRITE_COM
CALL WAIT_LCD
DJNZ R1,KT1
MOV R1,#6

KT2:

MOV A,#18H
CALL WRITE_COM
CALL WAIT_LCD
DJNZ R1,KT2
SJMP KT

LCD_INIT:
MOV A,#01H
CALL WRITE_COM
MOV A,#38H
CALL WRITE_COM
MOV A, #0EH

CALL WRITE_COM

Nhóm 07


Thí nghiệm Vi xử lí – Học kì hè 09-10
MOV A,#06H
CALL WRITE_COM
RET
WRITE_COM:
PUSH DPH

PUSH DPL
MOV DPTR, #8000H
CLR RS
SETB EN
MOVX @DPTR, A
CLR EN
CALL WAIT_LCD
POP DPL
POP DPH
RET
WAIT_LCD:
MOV R6 ,#250
LOOP: MOV R7,# 250
DJNZ R7,$
DJNZ R6, LOOP
RET
WRITE_LCD:
PUSH DPH

PUSH DPL
MOV DPTR ,#8000H
SETB RS
SETB EN
MOVX @DPTR,A
CLR EN
LCALL WAIT_LCD

Nhóm 07


Thí nghiệm Vi xử lí – Học kì hè 09-10

Nhóm 07

POP DPL
POP DPH
RET
TABLE:
DB 'DHBK TPHCM',0
END

Bài 4:

Thí nghiệm giao tiếp qua cổng nối tiếp
Thí nghiệm 1: Viết chương trình phát chuỗi ký tự “Hello, world” lên máy tính thông qua Hyper Terminal với
tốc độ 19200pbs.
Code:

MAIN:


NEXT:

SEND:

ORG 2000H
MOV TMOD, #20H
MOV SCON, #42H
MOV TH1, #-3
SETB TR1
MOV DPTR, #TABLE
CLR A
MOVC A, @A+DPTR
CJNE A, #0, SEND
SJMP $
JNB TI,$
CLR TI
MOV SBUF,A
INC DPTR
SJMP NEXT

TABLE: DB 'HELLO, WORLD',0
END
Thí nghiệm 2: Viết chương trình nhận các ký tự từ máy tính gửi đến EME-MC8 thông qua Hyper Terminal
(bằng cách gõ các ký tự trên bàn phím khi đang ở trong chương trình Hyper Terminal) và hiển thị lên LCD.
Code:

ORG 2000H
EN BIT P3.4
RS BIT P3.5

MAIN:

LOOP:

MOV DPTR,#8000H
CALL LCD_INTL
CALL CLR_LCD
CALL UART_INTL
CALL IN_CHAR
CALL WRT_TXT
SJMP LOOP


Thí nghiệm Vi xử lí – Học kì hè 09-10

Nhóm 07

UART_INTL:
MOV SCON,#52H
MOV TMOD,#20H
MOV TH1,#-3
SETB TR1
RET
OUT_CHAR:
JNB TI,$
CLR TI
MOV SBUF,A
RET
IN_CHAR:
JNB RI,$

CLR RI
CALL CLR_LCD
MOV A,SBUF
RET
LCD_INTL:
MOV A,#38H
CALL WRT_COM
MOV A,#0EH
CALL WRT_COM
MOV A,#06H
CALL WRT_COM
MOV A,#0CH
CALL WRT_COM
RET
WAIT_LCD:
MOV R7,#50
DEL:
MOV R6,#250
DJNZ R6,$
DJNZ R7,DEL
RET
WRT_TXT:
CALL WAIT_LCD
SETB RS
MOVX @DPTR,A
SETB EN
CLR EN
RET
WRT_COM:
CALL WAIT_LCD

CLR RS
MOVX @DPTR,A
SETB EN
CLR EN
RET
CLR_LCD:
LCALL WAIT_LCD
MOV A,#01H
CALL WRT_COM
RET
END

Thí nghiệm 3: Viết chương trình nhận một ký tự từ cổng nối tiếp hiển thị lên LCD đồng thời phát ra cổng nối
tiếp. Tốc độ tuỳ chọn.
Code:


Thí nghiệm Vi xử lí – Học kì hè 09-10

MAIN:

ORG 2000H
EN BIT P3.4
RS BIT P3.5

MOV DPTR,#8000H
CALL LCD_INTL
CALL CLR_LCD
CALL UART_INTL
LOOP:

CALL IN_CHAR
CALL WRT_TXT
CALL OUT_UART
SJMP LOOP
UART_INTL:
MOV SCON,#52H
MOV TMOD,#20H
MOV TH1,#-3
SETB TR1
RET
OUT_CHAR:
JNB TI,$
CLR TI
MOV SBUF,A
RET
IN_CHAR:
JNB RI,$
CLR RI
MOV A,SBUF
RET
LCD_INTL:
MOV A,#38H
CALL WRT_COM
MOV A,#0EH
CALL WRT_COM
MOV A,#06H
CALL WRT_COM
MOV A,#0CH
CALL WRT_COM
RET

WAIT_LCD:
MOV R7,#50
DEL:
MOV R6,#250
DJNZ R6,$
DJNZ R7,DEL
RET
WRT_TXT:
CALL WAIT_LCD
SETB RS
MOVX @DPTR,A
SETB EN
CLR EN
RET
WRT_COM:
CALL WAIT_LCD
CLR RS
MOVX @DPTR,A
SETB EN
CLR EN
RET
OUT_UART:

Nhóm 07


Thí nghiệm Vi xử lí – Học kì hè 09-10

Nhóm 07


PUSH ACC
MOV SBUF, A
JNB TI,$
CLR TI
POP ACC
RET
CLR_LCD:
LCALL WAIT_LCD
MOV A,#01H
CALL WRT_COM
RET
END

BÀI TẬP THÊM : Viết chương trình nhận ký tự từ cổng nối tiếp, đông thới phát ra cổng nối tiếp, với điều kiện:
- Nếu ký tự nhân được là số thì xuất ra Led
- Nếu ký tự nhân được là chữ A-Z, a-z thì xuất ra LCD
- Nếu ký tự nhận được là Enter thì xuống hàng , là ESC thì xóa trong màn hình LCD. Mã ASCII của Enter là 13,
ESC là 27
ORG 2000H
EN BIT P3.4
RS BIT P3.5
MOV TMOD,#20H
MOV TL1,#-3
MOV TH1,#-3
MOV SCON,#52H
SETB TR1
MOV R1,#0
MOV DPTR,#8000H
ACALL LCD_INIT
LAP:

ACALL RECEIVE
CJNE A,#13,TT
; kiểm tra phím nhấn Enter
MOV A,#0C0H
ACALL WRITE_CMD
SJMP THOAT
TT:
CJNE A,#27,TT1
; kiểm tra phím nhấn ESC
MOV A,#01H
ACALL WRITE_CMD
SJMP THOAT
TT1:
CJNE A,#30H,SO
; bắt đầu kiểm tra phím nhấn là số
SO:
JC THOAT
CJNE A,#3AH,CHU ; kết thúc kiểm tra phím nhấn là số
CHU:
JC LED
CJNE A,#41H,KHAC ; bắt đầu kiểm tra phím nhấn là chữ hoa
KHAC:
JC THOAT
CJNE A,#5BH,HOA ; kết thúc kiểm tra phím nhấn là chữ hoa
HOA:
JC NHO
CJNE A,#61H,KHAC1 ; bắt đầu kiểm tra phím nhấn là chữ thường
KHAC1:
JC THOAT
CJNE A,#7BH,THUONG ; kết thúc kiểm tra phím nhần là chữ thường

THUONG:
JC NHO
SJMP THOAT
NHO:
MOV DPTR,#8000H
INC R1
CJNE R1,#17,XUONG
; kiểm tra nếu hiển thị hết hàng đầu tiên thì xuông hàng trong màn hình LCD


Thí nghiệm Vi xử lí – Học kì hè 09-10
XUONG:
JC XUATLCD
PUSH ACC
MOV A,#0C0H
ACALL WRITE_CMD
POP ACC
MOV R1,#0
XUATLCD:
ACALL WRITE_cHAR
SJMP THOAT
LED:
MOV DPTR,#0000H
ANL A,#0FH
ORL A,#0E0H
MOVX @DPTR,A
THOAT:
MOV DPTR,#8000H
ACALL SEND
SJMP LAP

LCD_INIT:
MOV A, #38H
ACALL WRITE_CMD
MOV A, #0EH
ACALL WRITE_CMD
MOV A, #06H
ACALL WRITE_CMD
MOV A, #01H
ACALL WRITE_CMD
RET
WAIT_LCD: MOV R7,#100
LOOP: MOV R6, #250
DJNZ R6,$
DJNZ R7, LOOP
RET
WRITE_CHAR:
ACALL WAIT_LCD
SETB RS
MOVX @DPTR,A
SETB EN
CLR EN
RET
WRITE_CMD:
ACALL WAIT_LCD
CLR RS
MOVX @DPTR,A
SETB EN
CLR EN
RET
RECEIVE:

JNB RI,RECEIVE
MOV A, SBUF
CLR RI
RET
SEND:
JNB TI,SEND
MOV SBUF,A

Nhóm 07


Thí nghiệm Vi xử lí – Học kì hè 09-10

Nhóm 07

CLR TI
RET
END

Bài 5:

Thí nghiệm điều khiển ADC
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.
Code:

ORG 2000H
MAIN:
LOOP:

MOV TMOD,#20H

MOV DPTR,#4000H
MOV A,#0
MOVX @DPTR,A
CALL DELAY100US
MOVX A,@DPTR
CALL BINTOBCD
MOV DPTR,#0000H
MOV A,R2
ORL A,#0E0H
MOVX @DPTR,A
CALL DELAY3MS
MOV A,R3
ORL A,#0D0H
MOVX @DPTR,A
CALL DELAY3MS
MOV A,R4
ORL A,#0B0H
MOVX @DPTR,A
CALL DELAY3MS
SJMP LOOP

DELAY100US:
MOV TH1,#-100
MOV TL1,#-100
SETB TR1
JNB TF1,$
CLR TF1
CLR TR1
RET
BINTOBCD:

MOV
DIV
MOV
MOV
DIV
MOV
MOV
RET

B,#10
AB
R2,B
B,#10
AB
R3,B
R4,A

DELAY3MS:
MOV R5,#10
LOOP1: MOV R6,#150
DJNZ R6,$
DJNZ R5,LOOP1


Thí nghiệm Vi xử lí – Học kì hè 09-10

Nhóm 07

RET
END


Thí nghiệm 2: 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 LCD.
Code:

MAIN:

ORG 2000H
CALL LCD_INIT
MOV TMOD,#21H

LOOP:

MOV DPTR,#4000H
MOV A,#0
MOVX @DPTR,A
CALL DELAY100US
MOVX A,@DPTR
CALL BINTOASCII
CALL CLR_LCD
MOV A,R4
CALL WRITE_TEXT
MOV A,R3
CALL WRITE_TEXT
MOV A,R2
CALL WRITE_TEXT
CALL DELAY3MS
CALL DELAY3MS
SJMP LOOP

DELAY100US:

MOV TH1,#-100
MOV TL1,#-100
SETB TR1
JNB TF1,$
CLR TF1
CLR TR1
RET
BINTOASCII:
MOV
DIV
MOV
MOV
DIV
MOV
MOV
MOV
ADD
MOV
MOV
ADD
MOV
MOV
ADD
MOV
RET
DELAY3MS:

B,#10
AB
R2,B

B,#10
AB
R3,B
R4,A
A,#30H
A,R2
R2,A
A,#30H
A,R3
R3,A
A,#30H
A,R4
R4,A


Thí nghiệm Vi xử lí – Học kì hè 09-10

Nhóm 07

CLR TF0
MOV TH0,#HIGH(-10000)
MOV TL0,#LOW(-10000)
SETB TR0
JNB TF0,$
CLR TR0
RET
LCD_INIT:
MOV DPTR,#8000H
SETB P3.4
CLR P3.5

MOV A,#38H
MOVX @DPTR,A
CLR P3.4
CALL DELAY3MS
SETB P3.4
CLR P3.5
MOV A,#0EH
MOVX @DPTR,A
CLR P3.4
CALL DELAY3MS
SETB P3.4
CLR P3.5
MOV A,#06H
MOVX @DPTR,A
CLR P3.4
CALL DELAY3MS
RET
WRITE_TEXT:
MOV DPTR,#8000H
SETB P3.4
SETB P3.5
MOVX @DPTR,A
CLR P3.4
CALL DELAY3MS
RET
CLR_LCD:
MOV DPTR,#8000H
SETB P3.4
CLR P3.5
MOV A,#01H

MOVX @DPTR,A
CLR P3.4
CALL DELAY3MS
RET
END

BÀI TẬP THÊM : Viết chương trình đọc điện áp thực của kênh 0 và hiển thị lên LCD
ORG 2000H
RS BIT P3.5
EN BIT P3.4
MOV DPTR,#8000H
ACALL LCD_INIT
LAP:

MOV DPTR,#4000H
MOV A,#0


Thí nghiệm Vi xử lí – Học kì hè 09-10
MOVX @DPTR,A
ACALL DELAY_100US
MOVX A,@DPTR
MOV DPTR,#8000H
ACALL CHIA
MOV A, #80H
ACALL WRITE_CMD
SJMP LAP

LCD_INIT:


MOV A, #38H
ACALL WRITE_CMD
MOV A, #0CH
ACALL WRITE_CMD
MOV A, #04H
ACALL WRITE_CMD
MOV A, #01H
ACALL WRITE_CMD
RET

WAIT_LCD:
LOOP:

MOV R7,#100
MOV R6, #250
DJNZ R6,$
DJNZ R7, LOOP
RET

WRITE_CHAR:

SETB RS
MOVX @DPTR,A
SETB EN
CLR EN
ACALL WAIT_LCD
RET

WRITE_CMD:


CLR RS
MOVX @DPTR,A
SETB EN
CLR EN
ACALL WAIT_LCD
RET

DELAY_100US:

MOV R6,#200
DJNZ R6,$
RET

CHIA:

PUSH ACC
PUSH B
MOV B,#51
DIV AB
ORL A,#30H
ACALL WRITE_CHAR
MOV A,#0A5H
ACALL WRITE_CHAR
MOV A,B

Nhóm 07


Thí nghiệm Vi xử lí – Học kì hè 09-10
MOV B,#5

DIV AB
ORL A,#30H
ACALL WRITE_CHAR
POP B
POP ACC

RET
END

Bài 6:

Thí nghiệm với LED ma trận
Thí nghiệm 1: Viết chương trình hiển thị chữ A ra LED ma trận
Code:

ORG
2000H
;========================================
;Xuat ky tu A tren LED ma tran
;========================================
MAIN:
MOV
A, #01H
MOV
R0, #0
LAP:
ACALL
QUET_COT
ACALL
QUET_HANG

INC
R0
ACALL
DELAY
CJNE
R0, #5, LAP
SJMP
MAIN
;----------------------------------------QUET_COT:
PUSH
DPH
PUSH
DPL
RR
A
MOV
DPTR, #
MOVX
@DPTR, A
POP
DPH
POP
DPL
RET
QUET_HANG:
PUSH
PUSH
PUSH
MOV
ACALL

MOVX
POP
POP
POP
RET

ACC
DPH
DPL
DPTR, #
DU_LIEU_HANG
@DPTR, A
ACC
DPH
DPL

Nhóm 07


Thí nghiệm Vi xử lí – Học kì hè 09-10

Nhóm 07

DU_LIEU_HANG:
PUSH
PUSH
MOV
MOV
MOVC
POP

POP
RET

DPH
DPL
A, R0
DPTR, #CHAR_A
A, @A+DPTR
DPH
DPL

DELAY:
MOV
LAPC1: MOV
DJNZ
DJNZ
RET

R7,
R6,
R6,
R7,

#4
#250
$
LAPC1

CHAR_A: DB 03H, 0EDH, 0EEH, 0EEH, 0EDH, 03H
END


Thí nghiệm 2: Viết lại chương trình hiển thị chữ A ra LED ma trận có sử dụng chương trình con
Code:

ORG
2000H
;==========================================
;Xuat ky tu A tren LED ma tran (dung CTCon)
;==========================================
MAIN:
MOV
R0, #8
MOV
R1, #30H
MOV
DPTR, #CHAR_A
MOV
A, #0
LAP:
MOVC
A, @A+DPTR
MOV
@R1, A
INC
R1
INC
A
DJNZ
R0, LAP
ACALL

XUAT
;----------------------------------------XUAT:
PUSH
ACC
PUSH
R0
PUSH
R1
MOV
A, #01H
MOV
R0, #0
MOV
R1, #30H
LAPC:
ACALL
QUET_COT
ACALL
QUET_HANG
INC
R0
INC
R1
ACALL
DELAY
CJNE
R0, #7, LAPC
PUSH
ACC
PUSH

R0


Thí nghiệm Vi xử lí – Học kì hè 09-10
PUSH
SJMP
RET

R1
XUAT

QUET_COT:
PUSH
PUSH
RR
MOV
MOVX
POP
POP
RET

DPH
DPL
A
DPTR, #
@DPTR, A
DPH
DPL

QUET_HANG:

PUSH
PUSH
PUSH
MOV
MOV
MOVX
POP
POP
POP
RET

ACC
DPH
DPL
DPTR, #
A, @R1
@DPTR, A
ACC
DPH
DPL

DELAY:

MOV
LAPC1: MOV
DJNZ
DJNZ
RET

Nhóm 07


R7,
R6,
R6,
R7,

#4
#250
$
LAPC1

CHAR_A: DB 03H, 0EDH, 0EEH, 0EEH, 0EDH, 03H
END

Bài 7:

Thí nghiệm với động cơ DC

Thí nghiệm1: 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.
Code:

MAIN:
NEXT:

ORG 2000H
MOV TMOD, #01H
MOV R1, #40
MOV DPTR, #0E000H
CLR A

CALL THUAN


Thí nghiệm Vi xử lí – Học kì hè 09-10
MOVX
CALL
CALL
MOVX
CALL
CALL
MOVX
CALL
CALL
MOVX
CALL
SJMP

@DPTR,
DELAY
NGHI
@DPTR,
DELAY
NGHICH
@DPTR,
DELAY
NGHI
@DPTR,
DELAY
NEXT


Nhóm 07

A
A
A
A

NGHICH:

NGHI:

THUAN:

DELAY:
LAP:

SETB ACC.0
CLR ACC.1
RET
CLR ACC.0
CLR ACC.1
RET
CLR ACC.0
SETB ACC.1
RET
PUSH 01
MOV TH0, #HIGH(-50000)
MOV TL0, #LOW(-50000)
SETB TR0
JNB TF0, $

CLR TR0
CLR TF0
DJNZ R1,LAP
POP 01
RET

Thí nghiệm2: 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ỳ
Code:

ORG 2000H
LJMP MAIN
ORG 200BH
LJMP ISR_T0
ORG 201BH
LJMP ISR_T1
MAIN:

MOV TMOD,#11H
MOV IE,#10001010B
MOV DPTR,#0E000H
SJMP $

ISR_T0:
CLR TR0
MOV TH0,#HIGH(-50000)


×