LỜI NÓI ĐẦU Bộ vi xử lý là hạt nhân của hệ VXL.Nó thực hiện các phép tính logic hoặc số học để điều khiển toàn bộ hoạt động của hệ.. - Có thể được điều khiển từ số tín hiệu bên ngoài để
Trang 1BỘ GIAO THÔNG VẬN TẢI ĐẠI HỌC HÀNG HẢI VIỆT NAM KHOA ĐIỆN – ĐIỆN TỬ MÔN ĐIỆN TỰ ĐỘNG CÔNG NGHIỆP
BÀI TẬP LỚN MÔN : KỸ THUẬT VI XỬ LÝ
ĐỀ 5: Thiết kế mạch đo khoảng thời gian giữa hai sự kiện có hiển thị trên
LED 7 đoạn
GV HƯỚNG DẪN : PHẠM TUẤN ANH
MÃ SINH VIÊN : 42217
Hải phòng,ngày 20 tháng 4 năm 2014
Trang 2LỜI NÓI ĐẦU
Bộ vi xử lý là hạt nhân của hệ VXL.Nó thực hiện các phép tính logic hoặc số học
để điều khiển toàn bộ hoạt động của hệ
- Đọc các lệnh từ ô nhớ ,giải mã lệnh và thực hiện lệnh
- Trao đổi số liệu với bộ nhớ và các thiết bị vào ra
- Có thể được điều khiển từ số tín hiệu bên ngoài để thực hiện một số chức
năng đặc biệt như thâm nhập bộ nhớ ,ngắt và treo
Một hệ VXL bao gồm 2 phần :
- Phần cứng
- Phần mềm
Phần cứng là toàn bộ các kết cấu vật lý cấu thành nên hệ như ROM, RAM …
Phần mềm là phần logic bao gồm hệ điều hành và chương trình ứng dụng (do người viết ).Chương trình được lưu trữ trong bộ nhớ bằng mã nhị phân của máy tính Một chương trình viết bằng ngôn ngữ máy là 1 chuỗi các byte nhị phân biểu diễn các lệnh mã máy tính thực hiện được Hợp ngữ thay thế các mã nhị phân của ngôn ngữ máy bằng các mã gợi nhớ giúp chúng ta dễ nhớ hơn và dễ lập trình hơn
Trong quá trình làm bài tập lớn do trình độ còn hạn chế nên không tránh khỏi có sai xót Em mong thầy giáo giúp đỡ và chỉ bảo Em trân thành cảm ơn
Sinh viên : Bùi Thế Cường
Trang 3CHƯƠNG 1 : GIỚI THIỆU PHẦN CỨNG
1.1 Vi xử lí - AT89C51
a) Chức năng: nhận tín hiệu từ bộ chuyển đổi ADC0804 Sau đó xử lý, chuyển tín hiệu số sang mã ASCII và xuất tín hiệu sang màn hình hiển thị LCD
b) Tổng quát về AT89C51:
AT89C51 là IC vi điều khiển (Microcontroller) do hãng Intel sản xuất IC này có đặc điểm như sau:
- 4k byte ROM,128 byte RAM
- 4 Port I/O 8 bit
- 2 bộ đếm/ định thời 16 bit
- Giao tiếp nối tiếp
- 64k byte không gian bộ nhớ chương trình mở rộng
- 64k byte không gian bộ nhớ dữ liệu mở rộng
- Một bộ xử lý luận lý (thao tác trên các bít đơn)
- 210 bit được địa chỉ hóa
- Bộ nhân / chia trong 4µs
* Tổ chức bộ nhớ RAM
Có 128 byte RAM trong 8051 (một số thành viên có 256 byte RAM) 128 byte RAM trong 8051 được gán địa chỉ từ 00 đến 7FH, chúng được phân chia thành từng nhóm như sau:
- Các bank thanh ghi và ngăn xếp có địa chỉ từ 00H đến 1Fh
- Ram địa chỉ hóa từng bit có địa chỉ từ 20H đến 2FH
- Ram đa dụng từ 30H đến 7FH
- Các thanh ghi chức năng đặc biệt từ 80H đến FFH
Trang 4* Sơ đồ chân AT89C51:
Hình 2.3 Sơ đồ chân AT89C51
- Bộ phận dao động của vi xử lý được kết nối như hình dưới: IC 89C51 với tần số làm việc là 12 MHz Chân 18, 19 của 89C51 được nối với thạch anh (cũng có thể thay thế thạch anh bằng tín hiệu xung clock) 1 chu kỳ máy của 89C51 là 1µs
s s
10
12
6
- Bộ phận Reset được kết nối như hình dưới: khi cấp nguồn, áp trên R2 (chân 9 của 89C51) lên mức cao 5V ( = VCC ) sau đó sẽ xuống 0V do tụ C nạp
Trang 51.2 Kết nối Vi điều khiển với LED 7 đoạn :
-Ngõ nhận tín hiệu điều khiển của led 7 đoạn có 8 đường, vì vậy có thể dùng 1 port nào đó của Vi điều khiển để điểu khiển led 7 đoạn Như vậy led 7 đoạn nhận một dữ liệu 8 bit từ VĐK led 7 đoạn thường gọi là “ Mã hiển thị led 7 đoạn ”.Có 2 kiểu mã hiển thị led 7 đoạn :
+ Mã hiện thị cho led 7 đoạn có Anode (cực +) chung
+ Mã hiện thị cho led 7 đoạn có Cathode(cực -)chung
Chẳng hạn :để hiện thị số 1 cần làm cho các led ở vị trí b cà c sáng ,nếu sử dụng led
7 đoạn có Anode chung thì phải đặt vào 2 chân b và c điện áp là 0V (mức 0),các chân còn lại thì đặt điện áp là 5V (mức 1).Nếu sử dụng led 7 đoạn có Cathode chung thì điện áp hoàn toàn ngược lại,tức là phải đặt vào chân b và c điện áp là 5V (mức 1)
-Bảng mã hiện thị led 7 đoạn : phần cứng được kết nối với 1 Port bất kỳ của vi điều khiển ,để thuận tiện cho việc sử lý về sau phần cứng nên được kết nối như sau: Px.0 nối với chân a ,Px.1 nối với chân b ,lần lượt theo thứ tự cho đến Px.7 nối với chân h
-Dữ liệu xuất có dạng nhị phân như sau :hgfedcba
-Bảng mã hiển thị led 7 đoạn dành cho led 7 đoạn có Anode chung (các led đơn sáng ở mức 0 ) :
h g f e d c b a
Trang 69 1 0 0 1 0 0 0 0 90
-Bảng mã hiển thị led 7 đoạn dành cho led 7 đoạn có Cathode chung (các led đơn sáng
ở mức 1 ) :
h g f e d c b a
1.3 Giao tiếp Vi điều khiển với nhiều led 7 đoạn
-Nếu kết nối mỗi Port của Vi điều khiển với 1 led 7 đoạn thì tối đa kết nối được 4
led 7 đoạn Mặt khác nếu kết nối như trên sẽ hạn chế khả năng thực hiện các công việc khác nhau của VĐK Cho nên cần phải kết nối,điều khiển nhiều led 7 đoạn với số
Trang 7lượng chân điều khiển từ VĐK càng ít càng tốt Có 2 giải pháp : - 1 là sử dụng các IC chuyên dụng cho công việc hiện thị led 7 đoạn.-2 là kết nối nhiều led 7 đoạn vào cùng
1 đường xuất tín hiệu hiển thị Nội dụng này sẽ được đề cập cách kết nối nhiều led 7 đoạn theo giải pháp thứ 2
-Mắt người có đặc điểm sinh lý là chỉ thu nhaanh 24 hình/giây để tổng hợp các hình ảnh về thế giới xung quanh Nếu một tín hiệu ánh sáng có chu kỳ sáng tắt hơn 24 lần trong 1 giây,mắt người luôn cảm nhận đó là 1 nguồn sáng lien tục Để minh họa cho điều này ,bạn hãy lấy các chương trình đã thực hiện với led đơn và làm ngắn thời gian delay lại đến ,ột giá trị nào đó bạn sẽ thấy các led đều sáng liên tục
-Để kết nối nhiều led 7 đoạn vào VĐK thực hiện như sau : nối tất cả các chân nhận tín hiệu của tất cả các led 7 đoạn ( chân abcdefgh ) cần sử dụng vào cùng 1 Port, 4 led
7 đoạn có các chân nhận tín hiệu cùng được nối với P0 Dùng các ngõ ra còn lại của VĐK điều khiển on/off cho led 7 đoạn , mỗi ngõ ra điều khiển on/off cho 1 led 7 đoạn -Trong sơ đồ trên, led 7 đoạn được sử dụng là loại có Anode chung ,với tất cả các chân nhận tín hiệu được kết nối với Port 0 đã qua điện trở hạn chế dòng Để điều khiển ON/OFF cho các led 7 đoạn ,Sử dụng Transistor loại PNP , transistor này nhận dòng điều khiển từ một ngõ ra của VĐK ,led 7 đoạn sẽ được ON khi tín hiệu điều khiển đến transistor ở mức 0 Có thể sử dụng transistor loại A564 hoặc 2N3905 hoặc một transistor PNP khác có thông số thích hợp Các điện trở 4.7 K và điện trở treo 4.7K đảm bảo transistor luôn hoạt động ở chế độ ngắt/dẫn (đảm bảo khi led 7 đoạn đang ở trạng thái OFF sẽ bị tắt hoàn toàn ,không bị sáng mờ mờ )
-Tại mỗi thời điểm chỉ nên cho VĐK điều khiển cho 1 led 7 đoạn hoạt động ,do
đó tại mỗi thời điểm chỉ có 1 ngõ ra duy nhất nối với transistor ở mức 0 Tại mỗi thời điểm chỉ có 1 led 7 đoạn được ON nên sẽ không xảy ra tình trạng quá tải và quá tải cho VĐK khi điều khiển nhiều led 7 đoạn
- Trong sơ đồ kết nối trên, chẳng hạn cần hiển thị số 451, qui ước thứ tự các led 7 được đếm từ phải sang trái, như vậy cần làm cho led 7 đoạn thứ nhất hiển thị
Trang 8số 1, led 7 đoạn thứ hai hiện thị số 5, led 7 đoạn thứ 3 hiện thị số 4, các led còn lại không hiện thị Đầu tiên OFF tất cả các led 7 đoạn Kế tiếp xuất mã hiển thị led 7 đoạn để hiển thị số 1, ON led 7 đoạn thứ nhất, lúc này dòng điện chỉ đi qua led 7 đoạn thứ nhất, làm cho led 7 đoạn thứ nhất hiển thị số 1, thời gian ON trong
khoảng vài chục µs(1µs=1/10-6s) Kế tiếp xuất mã hiển thị led 7 đoạn hiển thị số 5, OFF led 7 đoạn thứ nhất và đồng thời ON led 7 đoạn thứ 2, lúc này chỉ có led 7 đoạn thứ hai hiển thị và hiển thị số 5 Tiếp theo xuất mã hiển thị led 7 đoạn hiện thị
số 4, OFF led 7 đoạn thứ hai và ON led 7 thứ ba, lúc này chỉ duy nhất led 7 đoạn
thứ ba hiển thị số 4 Cứ thế lặp lại quá trình trên liên tục Thời gian ON/OFF chỉ
trong khoảng vài chục µs, và tại mỗi thời điểm chỉ có mỗi một led 7 đoạn hiện thị
số của chính nó, vì vậy mắt người thấy 3 led 7 đoạn không sáng đứt quãng, mà sáng liên tục, mỗi led hiển thị 1 số riêng của nó Thực hiện tương tự để mở rộng số lượng led 7 đoạn cần sử dụng
1.4 Mô hình mô phỏng :
Trang 9CHƯƠNG 2: LƯU ĐỒ THUẬT TOÁN VÀ CHƯƠNG TRÌNH HỢP NGỮ
2.1 Lưu đồ thuật toán:
Trang 102.2 Chương trình hợp ngữ:
#include <sfr51.inc>
ORG 0000H
SJMP MAIN
TOCDO EQU 40H
SAVE1 EQU 41H
SAVE2 EQU 42H
LED1 BIT P3.0
Trang 11LED2 BIT P3.1
ORG 003H
SJMP NGAT_INT0
ORG 013H
SJMP NGAT_INT1
;=========================================
MAIN:
MOV R1,#1
MOV TMOD,#12H
MOV TH1,#-3
MOV TH0,#0
MOV SCON,#50H
CLR TF0
SETB IT0;
SETB IT1;
MOV IE,#10000101B; cho phep ngat
CJNE R1,#0,$
;======================================= NGAT_INT0:
SETB TR0; khoi dong timer 0
RETI
NGAT_INT1:
LJMP HERE
RETI
‘=======================================
HERE:
CLR TR0; dung timer 0
MOV IE,#00H
Trang 12SETB TR1; cho timer 1 chay
MOV R1,TH0
LCALL TRUYEN
;================================================
TRUYEN:
MOV R3,#0;gán biến đếm R3=0
MOV DPTR,#MALED7V ;đưa mã led vào thanh ghi DPTR
HERE1: LCALL DECODE ; gọi chương trình giải mã led 7 thanh LCALL DISPLAY ; gọi chương trình hiển thị
INC R3 ; sau khi hiển thị xong thì tăng biến đếm lên 1 đơn vị
CJNE R3,R1,HERE1 ;so sánh R3 với R1
JMP TRUYEN ;
;===============================================
DECODE: ;chương trình giải mã
MOV A,R3
MOV B,#10 ; gán B=10
DIV AB ; lấy A chia B, phần nguyên lưu ở A, phần dư lưu ở B
MOVC A,@A+DPTR ; gán A= mã led tại vị trí A chỉ đến trong DPTR MOV SAVE1,A ; lưu A vào một ô nhớ SAVER1
MOV A,B ; đưa B vào A (A=B)
MOVC A,@A+DPTR ; gán A= mã led tại vị trí A chỉ đến trong DPTR MOV SAVE2,A ; ưu A vào một ô nhớ SAVER2
RET
;==============================================
DISPLAY: ; hiển thị
MOV TOCDO,#50; tần số 50Hz thì quét 50 hình trong 1S, như vậy 1 giây sẻ tăng số đếm lên 1 đơn vị
Trang 13CLR LED2; tắt led2
MOV P2,SAVE1; đưa saver1 vào P2
SETB LED1; bật led hiển thị
CALL DELAY; gọi chương trình trể 10uS
CLR LED1
CLR LED2
MOV P2,SAVE2; đưa data lưu trong saver2 vào P2
SETB LED2; bật led2
CALL DELAY
DJNZ TOCDO,LAP; giảm biến tốc độ nếu chưa=0 thì cho hiển thị và giảm tiếp đến =0 thì thoát
RET
;===============================================
DELAY: ;delay 10uS
MOV 43H,#20
LAP1: MOV 44H,#250
DJNZ 44H,$
DJNZ 43H,LAP1
RET
;================================================
MALED7V:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END