BÀI 1
THIẾT KẾ VÀ MÔ PHỎNG MẠCH ĐIỂN TỬ BẰNG PHẦN MỀM PROTEUS
- SỬ DỤNG PHẦN MỀM KEIL C LẬP TRÌNH VI ĐIỀU KHIỂN
File mô phỏng
BÀI 2
TẬP LỆNH CỦA AT89C51 VÀ PORT XUẤT NHẬP
I. Tóm tắt lý thuyết
1. Các Port xuất nhập của AT89C51
AT89C51 có 4 Port xuất nhập tương ứng P0, P1, P2, P3 như hình H.2.1.
Bảng 2.1. Chức năng của các chân trên Port 3
- Port 0 khi được dùng làm Port xuất nhập cần phải sử dụng điện trở kéo lên bên ngoài
Port0 như hình H.2.2.
- Port P1, P2, P3 có thể cấu hình làm port xuất nhập mà không cần dùng điện trở kéo lên do
bên trong đã tích hợp sẵn điện trở.
- Port P0, P2, P3 ngoài chức năng làm Port xuất nhập còn có thêm các chức năng khác
(Hình H.2.1 và Bảng 2.1)
2. Tập lệnh của AT89C51
Lệnh của AT89C51 có độ dài 8bit, tương ứng có 256 câu lệnh, được chia thành các nhóm
cơ bản như sau:
• Nhóm lệnh di chuyển dữ liệu
• Nhóm lệnh số học
• Nhóm lệnh logic
• Nhóm lệnh nhảy
• Nhóm lệnh xử lý bit
II. Nội dung thực hành:
Bài2.1: Cấu hình port P1 là Port đầu vào, port P0 là Port đầu ra. Khi ấn Button (P1.0) thì gửi ra
P0 giá trị bằng 45.
djnz r6,d2
djnz r5,d1
ret
end
Tín hiệu xuất ra chân p0.0
Bài 2.3 Viết chương trình để các Led trên Port 0 sáng xen kẽ nhau: led 1,3,5,7 sáng – 2,4,6,8 tắt
và ngược lại.
Quá trình được lặp đi lặp lại.
org 0000H
mov a,#01010101b
main:
mov p0,a
delay: mov r0,#255
agin: mov r1,#255
here: nop
djnz r1,here
djnz r0,agin
rl a
sjmp main
end
Tín hiệu xuất ra mạch mô phỏng
Bài 2.4 Viết chương trình để các led trên Port 0 lần lượt sáng từ 1-8. Quá trình trên lặp lại
không ngừng.
org 0000H
main:
mov a,1f
Bảng 3.1. Bảng mã hiển thị của Led 7 thanh có anot chung:
Bảng 3.2. Bảng mã hiển thị của Led 7 thanh có catot chung:
2. Hiển thị nhiều Led 7 đoạn:
a. Phƣơng pháp quét Led:
Phương pháp này dựa trên hiện tượng lưu ảnh trên võng mạc, tức là nếu một hình ảnh
xuất hiện tối thiểu 24 lần/s sẽ tạo cho người quan sát cảm giác là một hình ảnh liên tục.
Khi nhiều led cùng dùng chung một đường dữ liệu như Hình 3.3, dữ liệu từ vi xử lý sẽ
đồng thời được gửi đến tất cả các Led, do đó ta không thể để các Led sáng cùng một lúc. Tại
mỗi thời điểm chỉ có duy nhất một led sáng, các led còn lại sẽ tắt. Sau thời gian duy trì, Led đó
sẽ tắt và Led tiếp theo sẽ sáng. Do hiện tượng lưu ảnh trên mắt nên người quan sát sẽ nhìn thấy
các led sẽ hiển thị đồng thời với các số khác nhau. Quá trình quét LED được hiển thị như sau:
Bật led sáng – Hiển thị dữ liệu Trễ Tắt Led xóa dữ liệu.
Phương pháp quét Led
Do đó có thể tính được thời gian duy trì cho từng led sáng như sau:
Giả sử có n Led cần hiển thị.
-Tần số cho một chu kỳ quét n led = 25hz X n
-Thời gian duy trì cho một lần sáng của từng led = 1/Tần số chu kỳ quét led.
Phương pháp này tiện dụng ở phần cứng lẫn phần mềm, tuy nhiên nếu số lượng led qu
nhiều thì thời gian sáng trung bình dành cho mỗi led giảm đi. Điều này kéo theo các led sẽ su
giảm độ sáng. Mặt khác phải tích hợp thêm IC giải mã, nhiều việc phát sinh cho thiết kế mạch
lẫn lập trình. Phương pháp này ứng dụng cho các hiển thị thông tin ít, khoảng 20 led bảy đoạ
trở xuống nhưng thông tin nhiều như bảng tỉ giá ngoại tệ cần vài trăm led thì không được.
b. Phương pháp chốt Led:
call delay
mov p2,#0F8h
call delay
mov p2,#80h
call delay
mov p2,#90h
call delay
jmp main
delay:
mov r0,#200
gain: mov r1,#200
loop: djnz r1,loop
djnz r0,gain
ret
end
Tín hiệu xuất ra mạch mô phỏng
Bài3.2 Chương trình đếm từ 0-99
org 0000h
main:
mov dptr,#maled
mov r0,#00
lap:
call ht
call delay
call delay
call delay
jnb tf0,here
clr tr0
clr tf0
ret
end.
Tín hiệu xuất ra
Bài3 chương trình hien thi so 56
org 0000h
main:
setb p1.1
mov p2,#82h
call delay
clr p1.1
setb p1.0
mov p2,#92h
call delay
clr p1.0
sjmp main
delay:
mov tmod,#01h
mov th0,#0b1h
Tín hiệu xuất ra.
mov tl0,#0e0h
setb tr0
here:
- C/T: Bit lựa chọn chế độ đếm (counter) hay định thời (Timer).
C/T = 0: chế độ Timer
C/T=1: chế độ định thời.
- M0,M1: Lựa chọn chế độ định thời.
2. Ngắt:
89C51 có 5 nguồn ngắt: 2 ngắt ngoài, 2 ngắt timer và ngắt nối tiếp.
Thanh ghi điều khiển ngắt IE:
- EA: =1 cho phép ngắt toàn cục
=0 không cho phép ngắt
- ES: cho phép ngắt nối tiếp
- ET1, ET0: cho phép ngắt Timer 1, Timer0.
- EX1, EX0: cho phép ngắt ngoài 1, ngắt ngoài 0.
Muốn cho phép một ngắt nào xảy ra phải set 2 bit: Bit cho phép ngắt toàn cục và bit cho
phép từng ngắt riêng rẽ.
Dưới đây là các vector ngắt và vị trí ngắt tương ứng:
II. Nội dung thực hành:
Bài4.1 Chương trình đếm từ 0-9 dùng Timer/counter.
org 0000h
main:
mov P2,#0C0h
call delay
mov p2,#0F9h
call delay
mov p2,#0A4h
call delay
mov p2,#0B0h
call delay
mov p2,#99h
call delay
clr p3.7
call delay
sjmp main
delay:
mov tmod,01h
mov th0,#0f
mov tl0,#06h
setb tr0
here:
jnb tf0,here
clr tr0
clr tf0
ret
end
Bài4.3 Chương trình tạo đàn điện tử với các phím tạo ra âm thanh có tần số như sau:
Các phím tương ứng từ button 1 Button 8.
org 0000h
main:
jnb p1.0,nhan1
jnb p1.1,nhan2
jnb p1.2,nhan3
jnb p1.3,nhan4
jnb p1.4,nhan5
jnb p1.5,nhan6
jnb p1.6,nhan7
jnb p1.7,nhan8
clr p3.7
call delay6
sjmp main
nhan7: setb p3.7
call delay7
clr p3.7
call delay7
sjmp main
nhan8: setb p3.7
call delay8
clr p3.7
call delay8
sjmp main
delay1:
mov r1,#191
loop1:
call delaydv
djnz r1 , loop1
ret
delay2:
mov r1,#170
loop2:
call delaydv
djnz r1 , loop2
ret
delay3:
mov r1,#152
loop3:
call delaydv
djnz r1 , loop3
call delaydv
djnz r1 , loop8
ret
delaydv:
mov TMOD,#02h
Mov TH0 , #246
setb TR0
loop9: JNB TF0 ,loop9
clr TR0
clr TF0
ret
end.
Tín hiệu xuất ra là dạng âm thanh. Đô rể mi pha son la si đố