Mỗi khi nhấn nút thì cổng P0.1 điều khiển led đơn nhấp nháy AB lần... Thực hành 2 Viết chương trình điều khiển 4 led 7 thanh hiển thị số ABCD... Viết chương trình dùng ngắt bộ định thời
Trang 1BÀI BÁO CÁO THỰC HÀNH KẾT THÚC
TÊN SINH VIÊN: VŨ VIỆT KIỀU
LỚP: 61TDH2
MSV: 1951211959
1.Thực hành 1
1.1 Viết chương trình xuất số AB ra led đơn trên cổng P1
Mã số sinh viên : 1951211959 -> AB = 59
BÀI LÀM
ORG 0000H
LOOP:
MOV P1,#59D
JMP LOOP
END
1.2 Đọc tín hiệu từ nút nhấn tại cổng P0.0 Mỗi khi nhấn nút thì cổng P0.1 điều
khiển led đơn nhấp nháy AB lần.
Mã số sinh viên : 1951211959 -> AB = 59
BÀI LÀM
org 0000H
NUT: MOV P0, #11111111b
JB P0.0, NUT
main:
Mov R0,#0D
LOOP:
Trang 2cpl p0.1
inc R0
CJNE R0,#118d, LOOP ;;;;;;;;;;;; 59 lần sáng, 59 lần tối JMP NUT
END
Trang 31.3 Mỗi khi nhấn nút nối với cổng P0.0, vi điều khiển điều khiển cổng P1 hiển thị
8 led đơn thể hiện đếm từ 0 đến số AB.
Mã số sinh viên : 1951211959 -> AB = 59
BÀI LÀM
ORG 0000H
NUT:
MOV P0,#11111111B
JB P0.0,NUT
MOV R1,#0D
LOOP:
MOV P1,R1
INC R1
CJNE R1,#60D,LOOP
JMP NUT
END
2 Thực hành 2
Viết chương trình điều khiển 4 led 7 thanh hiển thị số ABCD.
Mã số sinh viên : 1951211959 -> ABCD = 1959
BÀI LÀM
ORG 000H
START:
Mov R0, #04H
Mov R1, #00H
Mov R6, #0EEH
LABEL:
Mov A, R1
Mov DPTR, #Zezo
Movc A, @A+DPTR
Mov P0, A
Mov P2, R6
Mov A, R6
Mov R6, A
Mov P2, #0FFH
INC R1
Trang 4DEC R0 ;;;;;;giảm giá trị dữ liệu trên thanh ghi R0 xuống 1 đơn vị
Mov A, R0
;;;;;;;;;;;;;;;;;;;;;Lệnh JZ (nhảy nếu A = 0)
JZ START
Zezo: DB 0F9H, 090H, 092H, 090H
Trang 5END
3 Thực hành 3
3.1 Viết chương trình hiển thị trên LCD 16x2
+ Họ và tên sinh viên trên hàng 1
+ Mã số sinh viên trên hàng 2
BÀI LÀM
jmp start
cmd macro cmd_code
setb E
mov D, cmd_code
string: db 'TEN VU VIET KIEU \0'
string2: db 'MSV: 1951211959\0'
ORG 0100H
start: mov D, #0
mov DPTR, #string
main: clr RS
mov DPTR, #string
; Dong 1
cmd #00000001b ; Clear display
cmd #00000010b ; Cursor home
cmd #00000110b ; Entry mode set
cmd #00001111b ; Display ON/OFF control cmd #00011110b ; Cursor/display shift cmd #00111100b ; Function set
cmd #10000001b ; Set DDRAM address setb RS
mov R0, #0; Gia tri sai lech duoc khoi tao la 0 print: mov A, R0
movc A, @A+DPTR
Trang 6;Dong 2
main2:
A,#0, print
cmd #11000001b
mov DPTR, #string2
setb RS
mov R0, #0
print2: mov A, R0
movc A, @A+DPTR
cjne A, #0, print2
jmp main
end
3.2 Viết chương trình giao tiếp với ma trận bàn phím và LCD 16x2
+ Nhấn số 1 thì hiển thị Họ và tên sinh viên
+ Nhấn số 2 thì hiển thị Mã sinh viên
BÀI LÀM
ORG 0000H
BACK:
MOV P2, #11111111B
CLR P2.0
JB P2.4, NEXT1
ACALL start
NEXT1:
JB P2.5, BACK
ACALL start2
jmp start
cmd macro cmd_code
setb E
mov D, cmd_code
Trang 7string: db 'TEN VU VIET KIEU \0' string2: db 'MSV: 1951211959\0'
Trang 8ORG 0100H
start: mov D, #0
mov DPTR, #string
main: clr RS
mov DPTR, #string
in: ;;;;;Dong 1
cmd #00000001b ; Clear display
cmd #00000010b ; Cursor home
cmd #00000110b ; Entry mode set
cmd #00001111b ; Display ON/OFF control
cmd #00011110b ; Cursor/display shift
cmd #00111100b ; Function set
cmd #10000001b ; Set DDRAM address
; Print the string
setb RS
mov R0, #0; Gia tri sai lech duoc khoi tao la 0:
print: mov A, R0
movc A, @A+DPTR
cjne A,#0, print
JMP BACK
; Dong 2
start2: mov D, #0
mov DPTR, #string2
main2: clr RS
mov DPTR, #string2
end acall in
4 Thực hành 4
4.1 Viết chương trình dùng ngắt bộ định thời 0 để tạo xung vuông tuần hoàn có
tần số f=2kHz tại P0.0 Biết rằng vi điều khiển dùng thạch anh 12MHz.
BÀI LÀM
; Chuong trinh tao xung vuong co tan so f = 2kHz tai P0.0 voi thach anh 12MHz
; Thach anh 12Mhz, tan so xung clock la 12Mhz/12 = 1Mhz
; Moi chu ki dem se la 1/1Mhz = 01 micro giay
; Xung tan so 2kHz: chu ki la 1/2000 = 0,5 mili giay = 500 micro giay
Trang 9;Vay 1/2 chu ki la 250 micro giay => 250 lan dem cua bo dinh thoi < 255 (Gia tri lon nhat cua thanh ghi 8 bit)
; Nen chi can su dung bo dem 8 bit tu dong nap lai
ORG 0000h
LJMP main
;;;;;; Ngat bo dinh thoi 0
ORG 000Bh
CPL P0.0
RETI
;;;;;;;;;;;;;;; Chuong trinh chinh;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0030h
main:
;;;; Khoi tao gia tri ban dau
MOV R0, #LOW(65535-250); 2^16 = 65536 (0-65535)
MOV A, R0
ADD A, #1D
MOv R0, A
;;MOV R1, #HIGH(65535-250); 2^16 = 65536 (0-65535)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Cai dat cho bo dinh thoi 0 o che do tu dong nap lai 8 bit\
;xxxx-xxM1M0
MOV TMOD,#00000010B ;Chế độ định thời 8 bit tu dong nap lai
MOV TH0, R0 ; Gia tri xac lap cho TL0 khi xay ra tran
MOV TL0, R0 ; Gia tri xac lap gia tri ban dau cho TL0
;SETB IE.7
vonglap:
JMP vonglap
END
4.2 Dùng ngắt bộ định thời 0 và 1 để tạo đồng thời 2 xung vuông tuần hoàn có
tần số lần lượt là 1kHz và 100Hz tại chân P1.0 và P1.1 khi 8051 sử dụng thạch anh 12Mhz.
BÀI LÀM
ORG 0000h
LJMP main
JMP NBDT0
Trang 10ORG 001BH ;ngat bo dinh thoi 1
JMP NBDT1
;;;;;;;;;;;;;;; Chuong trinh chinh;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Trang 11ORG 0030h
main:
; Khoi tao gia tri ban dau cho 100hz
MOV R0,
#LOW(65535-5000) MOV A, R0
ADD A, #1D
MOv R0, A
MOV R1, #HIGH(65535-5000)
; Khoi tao gia tri ban dau cho 1khz
MOV R2,
#LOW(65535-500) MOV A, R2
ADD A, #1D
MOv R2,A
MOV R3, #HIGH(65535-500)
;;;;;;;;;;;;;;;;; XAC LAP GIA TRI CUA BO DINH THOI ;;;;;;;;;;;;;;;;;;;;;;;
MOV TMOD,#00010001B ;Chế độ định thời 16 bit
MOV TH0, R3 ; Gia tri xac lap cho TL0 khi xay ra tran MOV TL0, R2 ; Gia tri xac lap gia tri ban dau cho TL0 MOV TH1, R1 ; Gia tri xac lap cho TL1 khi xay ra tran MOV TL1, R0 ; Gia tri xac lap gia tri ban dau cho TL1
;SETB IE.7
SETB EA
SETB IE.3
SETB IE.1
SETB TR1
SETB TR0
; cho phep ngat
; cho phep ngat bo dinh thoi 1
; cho phep ngat bo dinh thoi 0
; cho phep bo dinh thoi hoat dong
; cho phep bo dinh thoi hoat dong
vonglap:
JMP vonglap
NBDT0:
CPL P1.0
MOv TH0,R3
MOV TL0, R2
RETI
NBDT1:
Trang 12CPL P1.1 MOV TH1, R1 MOV TL1, R0 RETI
END
Trang 134.3 Viết chương trình phát một chuỗi kí tự là tên sinh viên qua cổng truyền thông
nối tiếp ở chế độ UART 8 bit, 9600bps (bit/giây) Có sử dụng ngắt truyền thông nối tiếp Biết rằng vi điều khiển sử dụng thạch anh 11.0592Mhz.
BÀI LÀM
ORG 0000h
LJMP main
;;;;;; Ngat truyen thong noi tiep
ORG 0023h
LJMP SERISR
;;;;;;;;;;;;;;; Chuong trinh chinh;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0030h
main:
mov DPTR,#string
mov R0,#0D
;Che do 8-bit UART mode
clr SM0
setb SM1
;setb REN ; Cho phep nhan ky tu bang truyen thong noi tiep
;set bit double
rate mov A,
PCON; setb A.7
mov PCON, A ;set smod (double rate)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov TMOD, #20H; timer 1 in mode 8 bit auto reload
;;; double rate thach anh 12MHz, baurdrate la 1200 thi
mov TH1, #253D ;TH1=256-[(11.0592*10^6)/(12*32)]/9600
mov TL1, TH1
clr ET0 ;Cho phép ngắt bộ định thời 0
setb TR1; start timer 1
setb TI
setb ES
setb EA
; Ngắt truyền thông
; cho phep ngat truyen thong
; cho phep ngat
vonglap:
cjne R0, #00001011b, vonglap
mov R0,#0D
jmp vonglap
Trang 14clr TI
;clr RI
mov A,R0
movc A,@A+DPTR
Trang 15mov SBUF,A
INC R0
RETI
string: db 'VU VIET KIEU'
END
4.4 Viết chương trình chờ nhận 1 xung âm tại chân P3.2 Khi xuất hiện xung thì
gửi một ký tự $@$ ra cổng truyền thông nối tiếp ở chế độ UART 9 bit, tốc độ baud
9600 bps (bit/giây) Trong đó bit thứ 9 là bit kiểm lỗi chẵn/lẻ và vi điều khiển dùng thạch anh 11.0592MHz.
BÀI LÀM
; Chuong trinh cho dem tien tai cong P3.2
; Chan P3.2 la chan noi voi ngat ngoai 0: INT0
; Dem theo xung am:
ORG 0000h
LJMP main
;;;;;;;;;;;;;;; Chuong trinh chinh;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0030h
main:
mov DPTR, #string mov R0, #0D
; Che do 9-bit UART mode
setb SM0
setb SM1
setb REN ; Cho phep nhan ky tu bang truyen thong noi tiep
; set bit double rate
Trang 16clr ET0 ;Cho phép ngắt bộ định thời
; Cai dat cho ngat ngoai 0 SETB
IE.7; cho phep ngat
SETB IE.0; cho phep ngat bo ngoai 0
Trang 17SETB IT0 ; cho phep ngoai ngoai theo suon xung am
mov A, PCON;
setb A.7
mov PCON, A ; set smod (double rate)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov TMOD, #20H ; timer 1 in mode 8 bit auto reload
;;; double rate thach anh 12MHz, baurdrate la 1200 thi
mov TH1, #253D ; TH1=256-[(11.0592*10^6)/(12*32)]/9600
mov TL1, TH1
JMP $
ORG 0003H
Clr IE0
vonglap:
mov A, R0
movc A, @A+DPTR
mov SBUF, A MOV
C, P MOV TB8, C
INC R0
CJNE R0, #3D,vonglap
mov R0, #0D RETI
string: db '$@$'
END
;ngat ngoài 0
;Cho phép ngắt ngoài 0
;Nạp byte dữ liệu từ ACC
;Đọc bit chẵn lẻ trong PSW
; Chuyển bit chẵn lẻ vào TB8