Tải bản đầy đủ (.ppt) (21 trang)

Bài tập kỹ thuật vi điều khiển potx

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 (540.81 KB, 21 trang )

-Ghép nối với bàn phím:
-
Ghép nối vi điều khiển với led đơn:
+ Kết nối trực tiếp
LED được kết nối trực tiếp với AT89C51
theo hai chế độ là hút dòng và xả dòng.
Nguyên lý kết nối như sau :
Ở chế độ xả dòng thì LED sẽ không sáng được hết công suất vì đầu ra
dòng của chân vi xử lý thường thấp
Ở chế độ hút dòng thì LED sẽ sáng được hết công suất nhưng sẽ làm
hại vi xử lý nếu LED có công suất lớn vì dòng qua vi xử lý quá mức cho
phép. Trong các mạch ghép nối với LED có dòng tiêu thụ thấp thì người
ta sẽ dùng kiểu ghép hút dòng này.
+ Kết nối thông qua IC đệm
Đối với kiểu này thì LED được kết nối thông qua các
IC đệm như transitor, các IC đệm dòng chuyên dụng
như ULN2803 Đối với kiểu này thì LED được mắc
như sau :
Đối với kiểu ghép này đảm bảo cho vi xử lý không
bị quá tải và cho LED sáng nhất. Với kiểu ghép này
thì có thể chạy được LED công suất lớn. Ngoài
transitor còn có các loại IC đệm dòng tương đối như
(500mA ULN2803)
-
Ghép nối vi điều khiển với led 7 đoạn:
Để ghép nối với LED7 có thể có nhiều
cách, nhưng phải đảm bảo sao có thể điều
khiển tắt mở riêng từng LED đơn trong đó để
tạo ra các số và các ký tự mong muốn.Các
ICs điều khiển đều khó khả năng sinh dòng
kém tức là dòng đầu ra của các chân ICs nhỏ


hơn khả năng nuốt dòng. Do vậy, nếu ghép
nối trực tiếp các net với các chân cổng IC thì
loại Anode chung là thích hợp hơn cả. Cần
phải chú ý dòng dồn về ICs quá mức chịu
được thì cũng không được vì làm nóng và dei
ICs điều khiển
* 2 cách ghép nối thường dùng:
+ Cách 1 : Dùng trực tiếp các chân điều khiển (vi
xử lý)
Đối với cách này thì nhìn thì rất tốn chân của vi xử lý. Và
dòng của LED sẽ dồn tất cả về vi xử lý. Nếu một hệ thống lớn
thì cách này không ổn vì ảnh hưởng đến vi xử lý và nhiều
dòng dồn về vi xử lý sẽ làm vi xử lý nóng và dẫn tới chết
( chúng ta tưởng tượng xem nếu mà hệ thống nhiều phần điều
khiển từ các chân vi xử lý mà tất cả các tải điều khiển dồn trực
tiếp dòng về vi xử lý thì lúc đó dòng trong 1 thời điểm khá lớn
vượt quá ngưỡng cho phép của vi xử lý.
Dòng mà vi xử lý chịu đựng được cũng khá nhỏ đâu dưới
100mA ). Các này chỉ dùng được hệ thống điều khiển ít, mạch
dùng vi xử lý khá đơn giản như hiện thị LED, đếm số từ 0 đến
9 chả hạn
+ Cách 2 : Dùng IC giải mã BCD sang LED 7 thanh
Sử dụng IC giải mã 7447 để giả mã từ mã BCD sang mã
LED7. Đối với cách này thì trông rất ổn. Vừa tiếp kiệm
được chân vi xử lý và tránh được dòng dồn về vi xử lý
(dòng ở đây được dồn về 7447). Đây là cách mà người
thiết kế thường dùng trong các hệ thống cần đến hiện thị.
Thông thường các thiết kế, LED 7 thanh được dùng để
hiện thị các giá trị các giá trị số từ 0 đến 9 và đôi khi cần
phải hiện thị các kí tự đơn giản như A đến F trong hệ

thống để báo trạng thái của hệ thống. Các giá trị hiện thị
bao gồm nhiều chữ số tức là chúng ta phải dùng đến
nhiều LED7 ghép lại thì mới hiện thị được nhiều số. Ví dụ
như muốn hiện thị số 123 chả hạn thì chúng ta phải dùng
đến 3 LED 7 thanh ghép lại.
ORG 000H ; khai bao dia chi de bat
dau chuong trinh tren Rom
Tudau:
Mov P1,#1B ;==>>lam 1 led noi P1
sang
LCall Delay ;===>>>> goi chuong
trinh con Delay
Mov P1,#0 ;===>>>> lam 1 led
noi P1 tat
LCall Delay
Sjmp Tudau ;===>>>> nhay ve
thuc hien tu dau

Delay: ;>>>>chương trình con tạo độ trễ 1s
PUSH 00H
PUSH 01H
MOV R1,#5
Here:
MOV R0,#250
DJNZ R0,$
DJNZ R1,here
POP 01H
POP 00H
RET
end

;/////>>>>>Chữ “HELLO” chạy từ phải sang trái:
ORG: 00H
Main:
Mov DISP,#CODEDISP ;nạp địa chỉ vùng mã hiển thị
MIP:
Mov R0,#20 ;>>>biến lặp-thời gian của 1 trạng thái màn hình
STATICDISP:
LCALL DISP7SEGMUL ;hiển thị chuỗi lý tự
DJNZ r0,STATICDISP ;giảm biến lặp
INC DPTR ;dịch chuỗi đi 1 mã ký tự
Mov A,DPL
CJNE A,#LOW(CODEDISP+16),Mp1 ; kiểm tra hiển thị xong
chuỗi
SJMP MAIN
DISP7SEGMUL:
PUSH ACC ;cất tạm thời giá trị các thanh ghi
PUSH 00H
PUSH 01H
Mov R0,#7FH ;mã quét
Mov R1,#00H ;vị trí của dữ liệu trong vùng nhớ
DPTR
SETB C
DISP:
Mov A,R1
Mov A,@A+DPTR ;lấy mã hiện thị
Mov P0,A ;Xuất mã hiển thị
MOV P1, R0 ;xuất mã quét
LCALL DELAYLED
MOV P1,#0FFH
INC R1 ;lấy mã hiển thị kế tiếp

MOV A,R0 ;Lấy mã quyets kế tiếp
RRC A ;quay phải A qua cờ C
MOV R0,A
JC DISP ;kiểm tra mã quét xong(C=0)
POP 01H
POP 00H ;phục hồi giá trị cho các thanh ghi
POP ACC
RETDelay: ;>>>>chương trình con tạo độ trễ 1s
PUSH 00H
PUSH 01H
MOV R1,#5
Here:
MOV R0,#250
DJNZ R0,$
DJNZ R1,here
POP 01H
POP 00H
RET
CODEDISP: ;vùng chứa mã chữ hiển thị
DB 089H,086H,0A7H,0A7H,0A0H ;mã chuỗi HELLO
end

ORG 000H ; khai bao dia chi de
bat dau chuong trinh tren Rom
Mov P0,#0 ;===>>>>
|||
Mov P1,#0 ;===>>>>
||| cac led deu tat
LCall Delay
;===>>>>goi chuong trinh con Delay

Xuat: ;**>>>>>>>>>>>>>>>>>>> lam led P0 sang
<<<<<<<<<<<<<<<<<<<<<<<<<<
Mov P0,#00000001B ;===>>>> lam led 1 sang
LCall Delay ;===>>>>goi chuong trinh con Delay
Mov P0,#00000011B ;===>>>> lam led 2 sang
LCall Delay
Mov P0,#00000111B ;===>>>> lam led 3 sang
LCall Delay
Mov P0,#00001111B ;===>>>> lam led 4 sang
LCall Delay
Mov P0,#00011111B ;===>>>> lam led 5 sang
LCall Delay
Mov P0,#00111111B ;===>>>> lam led 6 sang
LCall Delay
Mov P0,#01111111B ;===>>>> lam led 7 sang
LCall Delay
Mov P0,#11111111B ;===>>>> lam led 8 sang
LCall Delay
;**>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>lam led P1 sang
<<<<<<<<<<<<<<<<<<<
Mov P1,#00000001B ;===>>>> lam led 1 sang
LCall Delay
Mov P1,#00000011B ;===>>>> lam led 2 sang
LCall Delay
Mov P1,#00000111B ;===>>>> lam led 3 sang
LCall Delay
Mov P1,#00001111B ;===>>>> lam led 4 sang
LCall Delay
Mov P1,#00011111B ;===>>>> lam led 5 sang
LCall Delay

Mov P1,#00111111B ;===>>>> lam led 6 sang
LCall Delay
Mov P1,#01111111B ;===>>>> lam led 7 sang
LCall Delay
Mov P1,#11111111B ;===>>>> lam led 8 sang
:>>>>>>>>>>>>>>>>>>>>>>>>>lam led p1 tat dan
Mov P1,#01111111B ;===>>>> lam led 1 sang
LCall Delay
Mov P1,#00111111B ;===>>>> lam led 2 sang
LCall Delay
Mov P1,#00011111B ;===>>>> lam led 3 sang
LCall Delay
Mov P1,#00001111B ;===>>>> lam led 4 sang
LCall Delay
Mov P1,#00000111B ;===>>>> lam led 5 sang
LCall Delay
Mov P1,#00000011B ;===>>>> lam led 6 sang
LCall Delay
Mov P1,#00000001B ;===>>>> lam led 7 sang
LCall Delay
Mov P1,#00000000B ;===>>>> lam led 8 sang
:>>>>>>>>>>>>>>>>Lam led p0 tat dan
Mov P1,#01111111B ;===>>>> lam led 1 sang
LCall Delay
Mov P1,#00111111B ;===>>>> lam led 2 sang
LCall Delay
Mov P1,#00011111B ;===>>>> lam led 3 sang
LCall Delay
Mov P1,#00001111B ;===>>>> lam led 4 sang
LCall Delay

Mov P1,#00000111B ;===>>>> lam led 5 sang
LCall Delay
Mov P1,#00000011B ;===>>>> lam led 6 sang
LCall Delay
Mov P1,#00000001B ;===>>>> lam led 7 sang
LCall Delay
Mov P1,#00000000B ;===>>>> lam led 8 sang
Ljmp Xuat ; ===>>>> nhay ve thuc hien tu dau
Delay:
Mov R7,#0FFH ;===>>>> gan R7=#0FFH, 1 chu ki may
Kt2: Mov R6,#0FFH ;===>>>> gan R6=#0FFH, 1 chu ki may
Kt1: Djnz R6,Kt1 ;===>>>> giam R6 xuong 1, R6 khac 0-> giam tiep
Djnz R7,Kt2 ;===>>>> giam R7 xuong 1, R6 khac 0-> ve Kt2
Ret ;===>>>> ket thuc chuong trinh con
End ;>>>>>>>kết thúc trương trình<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Chú thích: Lệnh Kt1: Djnz R6,Kt1
Lệnh Djnz R6,Kt1 này giảm
R6 đi một đơn vị, nếu R6 chưa bằng 0, chương trình
lại nhảy về nhãn Kt1, mà nhãn Kt1 lại gọi lại lệnh này,
do đó toàn câu lệnh thực hiện giảm R6 cho đến khi R6
về 0 thì thực hiện lệnh kế tiếp. Câu lệnh này thực hiện,
không ảnh hưởng hay thay đổi giá trị của các ô nhớ
khác, vì vậy ngõ ra từ các Port cũng không thay đổi
trạng thái.

×