52
ng dng ic lp trnh AT89C51: Dng bn phm điu khin motor, relay, đn... Rất vui khi thấy Bạn vào xem... Dn nhp Chng ta bit, mt "vt th t đng hoàn chnh" phi gm c: Ng vào - B nh - Ng ra . Ng vào là ch tc đng bên ngoài đi vào vt th, như con ngưi, chng ta c mt đ

ứNg dụng ic lập trình at89 c51

  • Upload
    dan-vu

  • View
    173

  • Download
    1

Embed Size (px)

Citation preview

Page 1: ứNg dụng ic lập trình at89 c51

Ưng dung ic lâp trinh AT89C51: Dung ban phim điêu khiên motor, relay, đen...

      

Rất vui khi thấy          Bạn vào xem...   Dân nhâp Chung ta biêt, môt "vât thê tư đông hoàn chinh" phai gôm co: Nga vào - Bô nhơ - Nga ra. Nga vào là chi tac đông bên ngoài đi vào vât thê, như ơ con ngươi, chung ta co măt đê ghi nhân cac thưc thê xuất hiên ơ dạng quang năng, co tai đê nghe biêt cac song âm, co mui đê nhân ra mui,co lươi đê nhân biêt vi và co lơp da bao boc toàn thân đê

Page 2: ứNg dụng ic lập trình at89 c51

cam nhân ra sư nong lạnh, cưng mêm, năng nhe... Đo là ngu quan cua con ngươi. Bô nhơ đươc dung đê lưu giư cac chương trinh, chương trinh là "tri tuê" mà thưc thê co thê truy câp, lấy ra thao tac môi khi găp cac đôi ưng cân giai quyêt và Nga ra chinh là cac tạo thê trang bi trên cac vât thê no chấp hành theo cac chương trinh, như trên cơ thê cua chung ta cac thưc thê thấy đươc như tư chi hai tay hai chân, tim, phôi, gan, ruôt...là cac tạo thê luôn vân hành theo cac chương trinh đa co trong bô nhơ. Khi con ngươi đưng gân chô qua nong, chung ta biêt nong và đa kip đi ra xa chô nong, đo là phan ưng rất cơ ban cua môt vât thê tư đông hoàn chinh. Con ngươi là sinh vât thông minh co kha năng hoc hoi cac chưng vât hiên diên chung quanh trong thiên nhiên chung quanh và con ngươi con muôn tư minh tạo ra cac "vât thê tư đông hoàn chinh" nưa. Ươc muôn này đa co bươc tiên vươt bâc tư khi ngươi ta chê tạo ra đươc cac ic lâp trinh, no hoạt đông theo cac chương trinh đa co trong cac bô nhơ. Trong lân này chung ta se noi đên tinh năng nhâp thông tin tư bên ngoài vào bên trong cua cac ic lâp trinh, cơ ban nhất là dung cac phim nhấn, sau đo se mơ rông qua cac cach lấy thông tin qua cac cam biên, như: quang trơ, nhiêt trơ, vi trơ, tư trơ, âm trơ, ap trơ, phong trơ, đông trơ, ... Vơi cac cam biên này, chung ta co thê mô phong nhiêu chưc năng giông như ngu quan cua cac sinh vât vây.   

  Trươc khi noi đên điêu cao siêu, chung ta hay tim hiêu môt hê vân hành cơ ban và đơn gian cai đa.    

Page 3: ứNg dụng ic lập trình at89 c51

Cac phim nhân dung vơi ic lâp trinh AT89C51  Chung ta biêt ic lâp trinh AT89C51 co 4 cang 8 bit nên tông công co 32 chân co thê xuất nhâp dư liêu dạng bit. Cach nhâp dư liêu đơn gian nhất là dung cac phim nhấn. Phim nhấn chi làm viêc theo logic nhi gia, nghia là đong hoăc hơ. Vơi cac phim nhấn, ngươi ta co thê dung đơn le hay tô hơp theo dạng matrix. Hinh ve dươi đây cho thấy:  

 Cac phim găn trên ma trân 4x4, ngươi ta noi matrix 4x4 co 4 hàng và 4 côt. Trên ma trân 4x4 chung ta chi dung co 8 dây mà co thê găn đươc đấn 16 phim, đo là môt ưu điêm cua loại bàn phim matrix, dung sô chân it mà găn đươc nhiêu phim. Vơi cac phim đơn lâp thi môi phim thương găn trên môt chân cua IC, vây trên môt cang 8 chân chung ta chi co thê găn đươc 8 phim. Cac phim nhấn phân ra làm 2 kiêu: Kiêu phim nhấn thương hơ và kiêu phim nhấn thương đong. Khi sư dung cac phim nhấn, chung ta thương găp vấn đê sau: Sư rung phim. Vây sư rung phim là gi?  

Page 4: ứNg dụng ic lập trình at89 c51

  Hinh ve cho thấy: Khi phim hơ thi no cho mưc ap cao, ngay khi phim đươc nhấn xuông, no se keo mưc ap xuông mưc thấp, nhưng do hiên tương rung phim, luc này co sư rung đông ơ tiêp xuc điêm, khiên cho tiêp điêm luc dinh luc hơ và mưc ap se dao đông luc lên luc xuông và phai sau môt luc mơi ôn đinh đươc ơ mưc thấp. Khi bo phim nhấn ra, chung ta cung găp hiên tương tương tư nhưng it tac hại hơn. Khi dung phim nhấn vơi cac ic lâp trinh co phan ưng cưc nhanh hiên tương rung phim se gây ra cac điêu khiên sai. Khi viêt chương trinh cho cac phim nhấn, chung ta phai chu y đên anh hương cua hiên tương rung phim, nhất là môi khi phim đươc đong lại. Trong thưc hành, ngươi ta thương dung môt đoạn chương trinh làm châm khoang 3ms đên 10ms và cho do lại lân nưa trạng thai cua phim đê tranh sư sai lâm co thê xây ra do hiên tương rung phim.  * Mach AT89C51 dung 8 phim nhân đơn lâp 

 

Page 5: ứNg dụng ic lập trình at89 c51

Khi dung sơ đô mạch điên này, trạng thai bit 1 trên cac chân cua cang p1 đươc xem như không co nhấn phim, khi co nhấn phim thi chân co phim đươc nhấn se xuất hiên bit 0. Khi môt trong 8 chân cua cang p1 co chân ơ bit 0, chung ta biêt là co nhấn phim, như vây chung ta se viêt câu lênh tim xem trên cang p1 co xuất hiên bit 0 hay không? Nêu không co bit 0 trên p1 thi tiêp tuc do tim, khi co chân co bit 0 thi hiêu là đa co phim bi nhấn xuông, luc đo chuyên qua tim xem phim nào đa đươc nhấn và rôi tiêp theo là cho chạy chương trinh tương ưng vơi phim đa đươc nhấn.  Sau đây là môt đoạn chương trinh dung do xem co phim nhấn không? loop:  ; đăt tên nhan cho lênh nhây    call do_key  ; cho goi chương trinh do phim, tên nhan do_key    jnb f0, ttuc    ; nhây theo bit cua f0, f0=0, tiêp tuc do phim    call tim_phim  ; cho goi trinh xac đinh phim nào đươc nhấn ttuc:  ; tên nhan cho lênh nhây    jmp loop  ; nhây vê tên nhan loop, băt đâu lại công viêc do phim....do_key:  ; tên nhan dung cho lênh nhây     clr f0   ; cho xoa bit f0, bit kiêm tra co phim nhấn hay không?     mov a, p1  ; chuyên trạng thai bit trên p1 vào thanh ghi a    orl a, #00000000b  ; lấy logic OR tri trong a vơi 00000000b, đê tim bit 0 trên p1    cpl a   ; đao tri trong thanh ghi a     jz key_ret  ; nêu tri trong a là 0, nhây đên key_ret, không co phim nhấn    call del   ; goi chương trinh trê    mov a, p1  ; lại chuyên trạng thai cua p1 vào a, kiêm tra lân nưa    orl a, #00000000b  ; lại cho lấy logic OR tri trong a vơi 00000000b    cpl a   ; đao tri trong a đê do xem co phim nhấn không    jz key_ret   ; nhây đên tên nhan key_ret nêu không co phim nào đươc nhấn    setb f0   ; nêu co phim nhấn, cho set bit kiêm tra f0    mov b,a  ; cho chuyên tri trong a cho cất vào b đê dung xac đinh phim nào đươc nhấn key_ret:   ; tên nhan dung cho lênh nhây    mov a, p1  ; cho chuyên trạng thai cang p1 vào a     orl a, #00000000b   ; lấy logic OR tri trong a vơi 00000000b    cpl a   ; đao tri trong thanh ghi a    jz key_ret1  ; nhây đên tên nhan key_ret1, nêu thanh a băng 0    jmp key_ret  ; nhây đên tên nhan key_ret, tiêp tuc kiêm tra p1key_ret1: ret  ; quay lại sau lênh: call do_key tim_phim:  ; chương trinh xac đinh phim nào đa đươc nhấn.....   

Page 6: ứNg dụng ic lập trình at89 c51

 Hinh đông trên đây cho thấy cach viêt cac câu lênh dung do xem co phim nhấn hay không?   * Mach AT89C51 dung 16 phim găn trên ma trân 4x4   

Page 7: ứNg dụng ic lập trình at89 c51

  Hinh ve cho thấy, 16 phim nhấn găn trên ma trân 4x4. Ơ đây 4 hàng cho nôi vào p2.0, p2.1, p2.2, p2.3, chung ta goi 4 hàng này là nga ra OUTPUT và 4 côt cho nôi vào p2.4, p2.5, p2.6, p2.7 và goi 4 côt là nga vào INPUT. Co thê thấy:   Trên cac cang p1 cho găn 8 Led và trên cang p3 chung ta cung cho găn 8 Led. Tư sơ đô mạch điên này, chung ta se lâp trinh đê dung cac phim trên bang ma trân điêu khiên cac Led.    Cach viêt chương trinh vân hanh cac phim rap theo kiêu ma trân 4x4:  Trươc hêt ngươi ta đăt cac hàng làm nga ra OUTPUT và đăt cac côt làm nga vào INPUT.

Page 8: ứNg dụng ic lập trình at89 c51

 Khơi đâu cho cac nga vào ơ bit 1 và cho cac nga ra ơ bit 0, và chạy trinh do phim, đê xem co phim nào đa đươc nhấn xuông không? * Khi đa xac nhân là đa co nhấn phim rôi thi cho chạy chương trinh tim phim nhấn. Luc này môi lân chi cho môt chân INPUT ơ bit 0, khơi đâu cho côt 1 ơ bit 0 rôi tim xem trong 4 hàng, xem trên nga ra OUTPUT nào đang ơ bit 0, làm vây se xac đinh đươc môt trong 4 phim cua côt 1. * Khi chi cho côt 2 ơ bit 0, rôi tim xem ơ hàng nào đang ơ bit 0, làm vây se xac đinh đươc môt trong 4 phim cua côt 2.  * Khi chi cho côt 3 ơ bit 0, rôi tim xem ơ hàng nào đang ơ bit 0, làm vây se xac đinh đươc môt trong 4 phim cua côt 3. * Khi chi cho côt 4 ơ bit 0, rôi tim xem ơ hàng nào đang ơ bit 0, làm vây se xac đinh đươc môt trong 4 phim cua côt 4.  

   Sau đây là môt chương trinh mâu: 

Page 9: ứNg dụng ic lập trình at89 c51

org 0000bstart:   ; đăt tên nhan dung cho lênh nhây  clr p2.0  ; cho Led chi thi trên chân p2.0 sang ; vào chương trinh do phim do_phim:   ; đoạn chương trinh dung đê do phim  mov p1, #00001111b  ; đăt 4 chân Input lên 1 và 4 chân Output xuông 0   mov a, p1   ; cho chuyên hiên trạng cua cang p1 vào a  orl a, #11110000b ; lấy logic OR a vơi tri 11110000b  cpl a   ; đao cac tri trong thanh ghi a  jz do_phim  ; nêu a băng 0 thi tiêp tuc do phim, nêu a khac 0 thi tim phim nhấn  jmp tim_phim   ; nhây đên chương trinh tim phim nhấn; vào chương trinh tim phin nhấntim_phim:  ; đoạn chương trinh tim phin nhấn  mov a, p1  ; chuyên hiên trạng cua cang p1 vào thanh ghi a  cjne a, #11101110b, tt1 ; chi cho chân p1.0 là 0, tim phim trên p1.4  jmp chtrinh1  ; nêu đung phim cho chạy chương trinh 1tt1:  ; đăt tên nhan dung cho lênh nhây  cjne a, #11011110b, tt2 ; chi cho chân p1.0 là 0, tim phim trên p1.5  jmp chtrinh2tt2:  ; đăt tên nhan dung cho lênh nhây  cjne a, #10111110b, tt3 ; chi cho chân p1.0 là 0, tim phim trên p1.6  jmp chtrinh3tt3:  ; đăt tên nhan dung cho lênh nhây  cjne a, #01111110b, tt4 ; chi cho chân p1.0 là 0, tim phim trên p1.7  jmp chtrinh4  ;tt4:  ; đăt tên nhan dung cho lênh nhây  cjne a, #11101101b, tt5 ; chi cho chân p1.1 là 0, tim phim trên p1.4  jmp chtrinh5tt5: ; đăt tên nhan dung cho lênh nhây  cjne a, #11011101b, tt6 ; chi cho chân p1.1 là 0, tim phim trên p1.5  jmp chtrinh6tt6:  ; đăt tên nhan dung cho lênh nhây  cjne a, #10111101b, tt7 ; chi cho chân p1.1 là 0, tim phim trên p1.6  jmp chtrinh7tt7:  ; đăt tên nhan dung cho lênh nhây  cjne a, #01111101b, tt8 ; chi cho chân p1.1 là 0, tim phim trên p1.7  jmp chtrinh8  ;tt8:  ; đăt tên nhan dung cho lênh nhây  cjne a, #11101011b, tt9  ; chi cho chân p1.2 là 0, tim phim trên p1.4  jmp chtrinh9tt9: ; đăt tên nhan dung cho lênh nhây  cjne a, #11011011b, tt10 ; chi cho chân p1.2 là 0, tim phim trên p1.5  jmp chtrinh10tt10:  ; đăt tên nhan dung cho lênh nhây  cjne a, #10111011b, tt11  ; chi cho chân p1.2 là 0, tim phim trên p1.6

Page 10: ứNg dụng ic lập trình at89 c51

  jmp chtrinh11tt11:  ; đăt tên nhan dung cho lênh nhây  cjne a, #01111011b, tt12  ; chi cho chân p1.2 là 0, tim phim trên p1.7  jmp chtrinh12  ;tt12:  ; đăt tên nhan dung cho lênh nhây  cjne a, #11100111b, tt13  ; chi cho chân p1.3 là 0, tim phim trên p1.4  jmp chtrinh13tt13:  ; đăt tên nhan dung cho lênh nhây  cjne a, #11010111b, tt14  ; chi cho chân p1.3 là 0, tim phim trên p1.5  jmp chtrinh14tt14:  ; đăt tên nhan dung cho lênh nhây  cjne a, #10110111b, tt15  ; chi cho chân p1.3 là 0, tim phim trên p1.6  jmp chtrinh15tt15:   ; đăt tên nhan dung cho lênh nhây  cjne a, #01110111b, start  ; chi cho chân p1.3 là 0, tim phim trên p1.7  jmp chtrinh16; Cac chương trinh ưng vơi cac phim nhấnchtrinh1: chtrinh2:chtrinh3:chtrinh4:chtrinh5:chtrinh6:chtrinh7:chtrinh8:chtrinh9:chtrinh10:chtrinh11:chtrinh12:chtrinh13:chtrinh14:chtrinh15:chtrinh16:end    Cac thi du cho thây cach dung ban phim trong điêu khiên   1. Cach dung phim kiêu đơn lâp

Page 11: ứNg dụng ic lập trình at89 c51

 Môt thi du vê cach dung cac phim nhấn đơn lâp  

  Phân tich mach: Sơ đô cho thấy, chung ta cấp điên cho ic lâp trinh AT89C51 vơi chân 20 cho nôi masse và chân 40 cho nôi vào đương nguôn 5V. Trên chân 9 găn tu C1 (10uF) và điên trơ R1 (10K) dung tạo tinh năng reset môi khi mạch đươc cấp nguôn. Trên chân 18, 19 găn thạch anh đinh tân, chung ta dung thạch anh 12MHz. Đê mạch chi làm viêc vơi bô nhơ trong chung ta cho chân 31 nôi vào đương nguôn 5V. Đê làm thưc hành vơi cac phim nhấn đơn lâp, chung ta dung 4 phim nhấn, găn trên cac chân p1.2, p1.3, p1.4, p1.5 cua cang p1 và găn 8 Led trên cang p3 đê hiên thi tac dung cua cac phim nhấn. Ơ đây chung ta se tạo tinh năng cho 4 phim nhấn như sau: phim S1 cho mơ phim, phim S4 cho tăt phim, phim S2 cho 8 Led trên p3 tuân tư dơi qua phai và phim S3 cho 8 Led trên p3 dơi qua trai.  Tom lại công dung cua cac phim như sau:  

Page 12: ứNg dụng ic lập trình at89 c51

* Nhấn nut S1 vào mode khơi đông, cho mơ phim. * Nhấn nut S2, 8 Led trên cang p3 dơi bit qua phai * Nhất nut S3, 8 Led trên cang p3 dơi bit qua trai * Nhấn nut S4 vào mode tăt phim   Chương trinh nguôn:   UpDown EQU 00H ; đăt tên bit 00h là updownStartEnd EQU 01H ; đăt tên bit 01h là startendLAMPCODE EQU 21H ; đăt tên thanh ghi 21h là lampcodeORG 0000H  ; đia chi thanh ghi khơi đâuJMP MAIN  ; nhây đên tên nhanORG 30H  ; vung đia chi bên ngoài chưc năng ngăt MAIN:  ; đăt tên nhan dung cho lênh nhâyMOV SP,#5FH  ; chon đia chi làm ngăn xêpMOV P3,#0FFH ; đăt tri 11111111b vào cang p3 đê tăt 8 led; điêu kiên khơi đâuCLR UpDown ; đăt bit 0 vào bit updownCLR StartEnd ; đăt bit 0 vào bit startendMOV LAMPCODE,#0FEH ; chuyên tri 11111110b vào lampcode LOOP:  ; đăt tên nhan dung cho lênh nhâyCALL KEY ; goi chương trinh do phim, tên nhan keyJNB F0,LNEXT ; cho nhây theo bit f0CALL KEYPROC ; goi chương trinh xư ly phim LNEXT:  ; đăt tên nhan dung cho lênh nhâyCALL LAMP ; goi chương trinh điêu khiên 8 Led trên cang p3JMP LOOP ; quay lại tên nhan loop DELAY: ; chương trinh tạo trêMOV R7,#100  ; đăt tri 100 vào thanh ghi r7 D1:      ; đăt tên nhan dung cho lênh nhâyMOV R6,#100 ; đăt tri 100 vào thanh ghi r6DJNZ R6,$   ; nhây tại chô, chơ tri trong r6 băng 0DJNZ R7,D1  ; giam tri trong r7 theo bươc -1, r7=0?, đinh hương nhâyRET  ; qua lại sau lênh call delay ;----------------------------------------KEYPROC:   ; chương trinh xư ly phimMOV A,B ;   chuyên tri trong b vào thanh ghi aJB ACC.2,KeyStart ; xet bit acc.2 đê đinh hương nhây JB ACC.3,KeyOver  ; xet bit acc.3 đê đinh hương nhây

Page 13: ứNg dụng ic lập trình at89 c51

JB ACC.4,KeyUp  ; xet bit acc.4 đê đinh hương nhâyJB ACC.5,KeyDown ; xet bit acc.5 đê đinh hương nhâyJMP KEY_RET  ; nhây vê tên nhan key_ret KeyStart:   ; trinh vào mode khơi đôngSETB StartEnd ; đăt bit startend lên 1, cho khơi đôngJMP KEY_RET  ; nhây đên tên nhan key_ret KeyOver:  ; trinh cho tăt, kêt thucCLR StartEnd ;  đăt bit startend xuông 0, kêt thucJMP KEY_RET  ; nhây đên tên nhan key_ret KeyUp:  ; trinh cho 8 Led dơi qua phaiSETB UpDown ; đăt bit updown lên 1, dơi qua phaiJMP KEY_RET ; nhây đên tên nhan key_ret KeyDown:  ; trinh cho 8 Led dơi qua traiCLR UpDown ; đăt bit updown xuông 0, dơi qua trai KEY_RET:  ; đăt tên nhan dung cho lênh nhâyRET  ; quay lại sau lênh call keyproc KEY:   ; đăt tên nhan dung cho lênh nhây, trinh dung do phimCLR F0 ;  xoa bit f0ORL P1,#00111100B ; lấy logic OR tri 00111100b và cang p1MOV A,P1 ;  chuyên tri hiên co cua p1 vào thanh ghi aORL A,#11000011B ; lấy logic OR a và 11000011b, xet trạng thai 4 phimCPL A ;  lấy bu a, đao 8 bit trong thanh ghi aJZ K_RET ; xet tri trong thanh a, co băng 0 không? đê nhâyCALL DELAY ; cho goi chương trinh trêOR P1,#00111100B  ; lại lấy logia OR tri 00111100b cho cang p1MOV A,P1 ; lại chuyên tri hiên co cua cang p1 vào thanh ghi aORL A,#11000011B ; cho lấy logic OR tri trong a và tri 11000011bCPL A   ; lại cho bu a, đao 8 bit trong thanh ghi aJZ K_RET  ; lại xet tri trong thanh a, co băng 0? đê nhâyMOV B,A ; chuyên tri trong a vào thanh bSETB F0 ; đăt bit kiêm tra f0 lên 1, bao đa co phim nhấn K_RET:  ; đăt tên nhan dung cho lênh nhâyORL P1,#00111100B ; Lấy logic OR tri hiên co trong p1 và 00111100bMOV A,P1   ; chuyên tri hiên co trên cang p1 vào thanh ghi aORL A,#11000011B  ; lấy logic OR tri trong a và 11000011bCPL A  ; lấy bu a, đao 8 bit trong thanh ghi aJZ K_RET1 ; xet tri trong a co băng 0 không? đê nhâyJMP K_RET  ; nhây đên tên nhan k_ret K_RET1: ; đăt tên nhan dung cho lênh nhâyRET   ; quay lại sau lênh call key D500MS: ; chương trinh làm trê

Page 14: ứNg dụng ic lập trình at89 c51

PUSH PSW  ; tạm cho cất tri trong thanh ghi psw vào ngăn xêpSETB RS0  ; đăt tri rs0 trong thanh ghi trạng thai psw lên 1MOV R7,#200  ; chuyên tri 200 vào thanh ghi r7 D51:  ; đăt tên nhan dung cho lênh nhâyMOV R6,#250  ; đăt tri 250 vào thanh ghi r6 D52:  ; đăt tên nhan dung cho lênh nhâyNOP ; dong không tac vuNOP ; dong không tac vuNOP ; dong không tac vuNOP ; dong không tac vuDJNZ R6,D52  ; giam tri trong r6 theo bươc -1, r6=0?, chon hương nhâyDJNZ R7,D51  ; giam tri trong r7 theo bươc -1, r7=0?, chon hương nhâyPOP PSW  ; lấy lại tri trươc đo cho thanh ghi pswRET  ; quay lại sau lênh goi call d500ms LAMP:  ; chương trinh điêu khiên 8 Led trên cang p3JB StartEnd,LampStart ; chon hương nhây theo bit startendMOV P3,#0FFH  ; đăt tri 11111111b vào cang p3, tăt hêt 8 LedJMP LAMPRET ;  nhây vê tên nhan lampret LampStart:  ; đăt tên nhan cho lênh nhây, trinh dơi 8 bit trong a qua traiJB UpDown,LAMPUP ; nhây theo bit updownMOV A,LAMPCODE ; chuyên tri trong lampcode cho thanh ghiRL A ;  cho quay vong 8 bit trong thanh ghi aqua hương traiMOV LAMPCODE,A ; chuyên tri trong a vào lampcodeMOV P3,A   ; cho xuất tri trong a ra cang p3CALL D500MS  ; goi chương trinh làm châm d500msJMP LAMPRET  ; nhây vê tên nhan lampret LAMPUP:  ; đăt tên nhan cho lênh nhây, trinh cho dơi 8 bit qua phaiMOV A,LAMPCODE  ; chuyên tri trong lampcode vào thanh ghi aRR A ;  cho quay vong 8 bit trong a qua hương phaiMOV LAMPCODE,A  ; chuyên tri trong a vào lampcodeMOV P3,A  ; xuất tri trong a ra cang p3CALL D500MS  ; cho goi chương trinh trê d500ms LAMPRET:  ; đăt tên nhan cho lênh nhâyRET  ; quay lại sau lênh callEND  ; dưng biên dich tại dong này  Phân tich cach viêt cac câu lênh chương trinh nguôn trên:    

Page 15: ứNg dụng ic lập trình at89 c51

 Tim hiêu thêm môt cach viêt khac. Bạn xem thi du sau:  Trong thi du này, chung ta găn 4 phim trên cang p3 và dung cac phim này điêu khiên trạng thai nhấp nhay cua 8 Led đăt trên cang p1. 

  

Page 16: ứNg dụng ic lập trình at89 c51

  Chương trinh nguôn viêt như sau: 

ORG 0000H   ; Khơi đâu tư thanh ghi 0000h    LJMP START  ; nhây đên tên nhan start; cac thanh ghi chuyên dung cho chưc năng ngătORG 0003H  ; vi tri chạy ngăt INT0    RETIORG 000BH  ; vi tri chạy ngăt TF0    RETIORG 0013H  ; vi tri chạy ngăt INT1    RETIORG 001BH  ; vi tri chạy ngăt TF1    RETIORG 0023H  ; vi tri chạy ngăt RI var TI    RETI;CLEAR:  ; đăt tên nhan cho lênh nhây    RET;START:   ; đăn tên nhan cho khơi đâu   CALL CLEAR  ; goi chương trinh clear; trinh do phimSTAR1:  ; đăt tên nhan dung cho lênh nhây

Page 17: ứNg dụng ic lập trình at89 c51

    MOV P3,#0FFH  ; đăt tri 11111111b vào p3, đinh trạng thai đâu    JNB P3.4,FUN0  ; do bit 0 trên chân p3.4, đê nhây    JNB P3.5,FUN1  ; do bit 0 trên chân p3.5 đê nhây    JNB P3.2,FUN2  ; do bit 0 trên chân p3.2 đê nhây    JNB P3.3,FUN3  ; do bit 0 trên chân p3.3 đê nhây    JNB F0,STAR1   ; nhây theo bit f0, f0=1, co nhấn phim    RET  ; quay lại sau lênh call start;FUN0:  ; tên nhan dung cho phim p3.4    CALL DL10MS ; goi chương trinh trê 10ms, tranh rung phim    JB P3.4,STAR1  ; kiêm tra lại phim nhấn trên p3.4WAITL0:   ; trinh chơ bo phim     JNB P3.4,WAITL0 ; chơ bo phim    SETB F0  ; đăt bit kiêm tra f0 lên 1FUN01:  ; đăt tên nhan dung cho lênh nhây    CALL FUN00  ; cho goi chương trinh fun00    CALL STAR1  ; quay lại tên nhan star1    JMP FUN01   ; nhây vê tên nhan fun01; Viêt tương dạng như trênFUN1:    CALL DL10MS ;    JB P3.5,STAR1WAITL1:    JNB P3.5,WAITL1 ;    SETB F0FUN10:    CALL FUN11    CALL STAR1   JMP FUN10; Viêt tương dạng như trênFUN2:   CALL DL10MS ;   JB P3.2,STAR1WAITL2:   JNB P3.2,WAITL2 ;   SETB F0FUN20:   CALL FUN22   CALL STAR1   JMP FUN20; viêt tương dạng như trênFUN3:   CALL DL10MS ; goi trê 10ms tranh anh hương cua rung phim   JB P3.3,STAR1 ; kiêm tra lân nưa phim trên p3.3WAITL3:   ; tên nhan   JNB P3.3,WAITL3 ; chơ bo phim ra   CLR F0   ; xoa bit f0, vê trạng thai chơ nhấn phim   MOV P1,#0FFH ; đăt tri 11111111b đê tăt 8 Led trên p1   JMP STAR1  ; quay lại tên nhan star1

Page 18: ứNg dụng ic lập trình at89 c51

;  trinh cho Led sang lan lênFUN00:     MOV A,#0FEHFUN000:   MOV P1,A   CALL DL05S   JNB ACC.7,OUT   RL A   JMP FUN000OUT: RET

;  trinh cho cac Led sang nhâyFUN11:   MOV A,#0FEHFUN111:   MOV P1,A   CALL DL05S   JZ OUT   RL A   ANL A,P1   JMP FUN111

; trinh cho cac 4 Led nhấp nhay xen ke FUN22:   MOV A,#0AAH   MOV P1,A   CALL DL30S   CPL A   MOV P1,A   CALL DL30S   RET

; chương trinh làm trêDL512:   MOV R2,#0FFHLOOP1:    DJNZ R2,LOOP1   RETDL10MS:   MOV R3,#14HLOOP2:    CALL DL512   DJNZ R3,LOOP2   RETDL05S:   MOV R4,#0AHLOOP3:    CALL DL10MS   DJNZ R4,LOOP3

Page 19: ứNg dụng ic lập trình at89 c51

   RETDL30S:   MOV R5,#03HLOOP4:   CALL DL05S   DJNZ R5,LOOP4   RETend      Môt thi du khac nưa: Dung 8 phim trên cang 1 đê điêu khiên cac đông thai cua môt motor DC Trươc hêt tim hiêu nguyên ly vân hành cua cac thành phân dung trong mạch điên: 1. Tim hiêu ic điêu khiên motor: 

 IC BA6209 co 10 chân, công dung cua cac chân như sau: Chân 1 cho nôi masse, chân 7 cho nôi nguôn VCC1, chân 8 lấy nguôn VCC2 qua môt điên trơ 10 ohm. Mưc ap chuân đinh tôc đô quay chon theo diode Zener trên chân sô 4. Chân sô 3 và sô 9 măc tu loc và chân sô 2 và chân sô 10 cấp điên cho motor. Ngang motor găn môt tu

Page 20: ứNg dụng ic lập trình at89 c51

loc nhiêu ôn phat ra tư motor. Tin hiêu điêu khiên đưa vào trên chân 5 và chân 6. Ban logic cho thấy: * Khi chân 5 Fin và chân 6 Rin đêu ơ mưc ap thấp, thi mưc ap nga ra trên chân 2, 10 đêu ơ mưc ap thấp: Motor không quay. * Khi chân Fin ơ mưc ap cao, chân Rin ơ mưc ap thấp, thi chân 2 ơ mưc cao và chân 10 ơ mưc ap thấp: Motor quay thuân. * Khi chân Fin ơ mưc ap thấp, chân Rin ơ mưc ap cao, thi chân 2 ơ mưc thấp và chân 10 ơ mưc ap cao: Motor quay ngươc. * Khi chân 5 Fin và chân 6 Rin đêu ơ mưc ap cao, thi mưc ap nga ra trên chân 2, 10 đêu ơ mưc ap thấp: Motor không quay.  Phân tich trên cho thấy, chung ta co thê dung 3 chân 4, 5, 6 cua ic lâp trinh đê điêu khiên cac trạng thai quay cua motor   2. Tim hiêu nguyên ly làm viêc cua motor DC. Motor DC gôm co: * Phân tinh là môt nam châm vinh cưu, đăt cô đinh, môt bên là cưc nam thi bên kia là cưc băc. * Phân quay gôm co cac cuôn dây ưng quấn trên cac tư cưc. Trên truc quay ngươi ta đăt môt cô lấy điên băng cac vong đông, dung chôi than đe lên cô lấy điên đê cấp điên cho cac cuôn dây ưng đăt trên phân quay, cuôn dây co điên se trơ thành cac nam châm điên. Do tương tac, cac nam châm (ơ đây là nam châm vinh cưu cua phân tinh và nam châm điên trên phân quay) đăt gân nhau, khi co tên cưc giông nhau se đây nhau và khac tên thi se hut nhau, điêu này se làm quay phân ưng, khi phân ưng quay no đông thơi làm quay cô lấy điên, điêu này se làm đao chiêu dong chay qua cac cuôn dây ưng, như vây cac nam châm se lại đôi cưc tinh, do vây cuôn dây se luôn phai ơ trạng thai quay. 

    

Page 21: ứNg dụng ic lập trình at89 c51

 Chung ta biêt, khi đươc cấp điên thi motor DC se quay, mưc ap cấp cho motor càng cao thi motor quay càng nhanh. Và nêu Bạn dung lưc làm quay môt motor DC thi trên 2 cưc cua motor DC se phat ra điên ap ưng, nêu motor bi keo quay càng nhanh thi mưc điên ap ưng phat ra càng cao. Điêu này cho thấy motor DC khi đươc cấp điên no se quay, và khi bi keo quay no se phat ra điên. Dung luât ohm, chung ta co thê viêt hê thưc sau:                           dong điên I = (điên ap cung cấp) - (điên ap ưng) / điên trơ R cua cuôn ưng Trong đo:    (điên ap ưng) là môt hàm cua tôc đô quay. Khi motor quay càng châm, điên ap ưng phat ra càng yêu và ngươc lại.  (lưc quay) là môt hàm cua dong điên I. Khi dong điên càng lơn thi lưc keo càng mạnh. Điêu nay cho thây: Khi bi tai năng, tôc đô quay cua motor se co khuynh hương bi châm lại, tôc đô quay giam se làm cho điên ap ưng

Page 22: ứNg dụng ic lập trình at89 c51

giam, hê thưc trên cho thấy dong điên I se tăng lên, dong điên I tăng se gia tăng kha năng mang tai cua motor DC, nhơ phan ưng này, mà motor DC co kha năng mang tai rất tôt.   Khi dung motor DC chung ta chu y cac điêm sau: * Điên ap DC cấp cho motor DC càng cao, motor quay càng nhanh. * Đao chiêu điên ap cấp điên, chiêu quay cua motor se đôi chiêu quay. * Điên trơ phân ưng càng nho, dong chay qua motor DC càng lơn, lưc quay se càng mạnh. * Khi motor DC quay, tư hai chôi quet điên se luôn phat ra nhiêu ôn rất lơn, phai dung tu và cuôn dây đê loc nhiêu. * Không đê motor bi ket truc không quay, điêu này se khiên cho dong chay qua motor se rất lơn, motor co thê bi chay.   3. Phân tich sơ đô điêu khiên cac đông thai cua motor dung ic AT89C51  Mạch điên cho thấy: 

Page 23: ứNg dụng ic lập trình at89 c51

 8 nut nhấn dung điêu khiên 2 motor DC găn trên xe đêu cho kêt nôi trên cang p1. Motor DC găn bên phai qua ic BA6209, chân p3.0 điêu khiên chiêu quay thuân, chân p3.1 điêu khiên chiêu quay nghich và chân p3.2 điêu khiên tôc đô quay. Motor DC găn bên trai qua ic BA6209, vơi chân p3.3 điêu khiên chiêu quay thuân, chân p3.4 điêu khiên chiêu quay ngươc và chân p3.5 điêu khiên tôc đô quay.  4. Viêt chương trinh nguôn theo yêu câu trên:  org 0000hqua0:         jb p1.0, qua1        call del   ; goi trinh làm trê, tranh anh hương rung phim        jnb p1.0, $        jmp chay_toi ; Cho chạy tơi, 2 motor quay cung chiêu

Page 24: ứNg dụng ic lập trình at89 c51

qua1:          jb p1.1, qua2        call del        jnb p1.1, $        jmp chay_lui ; chạy lui, 2 motor cho quay ngươc chiêu

qua2:         jb p1.2, qua3        call del        jnb p1.2, $        jmp queo_trai ; queo trai, motor trai dưng, motor phai quay tơi

qua3:          jb p1.3, qua4        call del        jnb p1.3, $        jmp queo_phai ; queo phai, motor phai dưng và motor trai quay tơi 

qua4:          jb p1.4, qua5        call del        jnb p1.4, $        jmp dung  ; dưng, ca 2 motor đêu dưng, không quay

qua5:          jb p1.5, qua6        call del        jnb p1.5, $        jmp cham_lai ; châm lại, 2 motor quay vơi tôc đô châm 

qua6:         jb p1.6, qua7        call del        jnb p1.6, $        jmp quay_trai ; quay vong qua trai, motor trai quay ngươc, motor phai quay thuân

qua7:          jb p1.7, qua0        call del        jnb p1.7, $        jmp quay_phai ; quay vong qua phai, motor trai quay thuân, motor phai quay ngươc chay_toi: ; trinh cho chạy tơi        setb p3.0        clr p3.1        setb p3.2

Page 25: ứNg dụng ic lập trình at89 c51

        setb p3.3        clr p3.4        setb p3.5        jmp qua0  ; trơ lại chương trinh que phim

chay_lui: ; trinh cho chạy lui         clr p3.0        setb p3.1        setb p3.2        clr p3.3        setb p3.4        setb p3.5        jmp qua0  ; trơ lại trinh quet phim

queo_trai: ; cho queo trai          setb p3.0        clr p3.1        setb p3.2        setb p3.3        clr p3.4        clr p3.5        jmp qua0  ; trơ lại trinh quet phim queo_phai: ; cho queo phai         setb p3.0        clr p3.1        clr p3.2        setb p3.3        clr p3.4        setb p3.5        jmp qua0  ; trơ lại trinh quet phim

dung:  ;  cho dưng        setb p3.0        clr p3.1        clr p3.2        setb p3.3        clr p3.4        clr p3.5        jmp qua0  ; trơ lại trinh quet phim

cham_lai: ;  cho châm lại         setb p3.0        clr p3.1        setb p3.3        clr p3.4        mov r4, #100llai:   setb p3.2        setb p3.5        call delay

Page 26: ứNg dụng ic lập trình at89 c51

        clr p3.2        clr p3.5        call delay        djnz r4, llai        jmp qua0  ; trơ lại trinh quet phim quay_trai: ; cho quay vong qua trai         setb p3.0        clr p3.1        setb p3.2        clr p3.3        setb p3.4        setb p3.5        jmp qua0  ; trơ lại trinh quet phim quay_phai: ; cho quay vong qua phai          clr p3.0        setb p3.1        setb p3.2        setb p3.3        clr p3.4        setb p3.5        jmp qua0  ; trơ lại trinh quet phim del:   ; đăt tên nhan dung cho lênh nhây      mov r3, # 10  ; nạp tri 10 vào thanh ghi r3      mov r4, #200  ; nạp tri 200 vào thanh ghi r4v_r4:   ; đăt tên nhan dung cho lênh nhây      djnz r4, $  ; giam -1 đên khi tri trong r4 băng 0      djnz r3, v_r4  ; giam tri trong r3 theo bươc -1, r3 0?, đinh hương nhây      ret  ; quay lại sau lênh call del

delay:   ; đăt tên nhan cho trinh làm trê        mov r5, #100  ; nạp tri 100 vào thanh ghi r5v_r6:   ; đăt tên nhan dung cho lênh nhây        mov r6, #250  ; nạp tri 250 vào thanh ghi r5        djnz r6, $ ; giam theo bươc -1 cho đên khi băng 0         djnz r5, v_r6 ; giam r5 theo bươc -1, r5=0? chon hương nhây        ret   ; quay lại sau lênh call delayend  ; dưng biên dich tại dong này   Phân tich cac câu lênh viêt trong chương trinh trên:    2. Cach dung phim kiêu ma trân  

Page 27: ứNg dụng ic lập trình at89 c51

 Chung ta se viêt chương trinh nguôn cho kiêu bàn phim ma trân 4x4 như hinh ve.  

Page 28: ứNg dụng ic lập trình at89 c51
Page 29: ứNg dụng ic lập trình at89 c51

 

   Trong bài thưc hành này, chung ta se cho lấy ma co trong bang xuất ra trên cang p3 khi nhấn môt trong cac phim trên ma trân 4x4.   org 0000h  ; Khơi đâu tư thanh nhơ 0000h    mov p2, #11111111b   ; đăt cac chân Input lên 1k1:  ; tên nhan    mov p1, #00000000b  ; đăt cac chân Ouput xuông 0    mov a, p2  ; chuyên hiên trạng cua p2 vào a    anl a, #00001111b  ; lấy logic AND đê che 4 bit cao    cjne a, #00001111b, k1 ; kiêm tra xem co phim nhấn chưa?k2:  ; đăt tên nhan    call delay  ; goi chương trinh trê tranh rung phim    mov a, p2  ; chuyên trạng thai p2 vào a    anl a, #00001111b  ; lấy logic AND che 4 bit cao    cjne a, #00001111b, tim_hang ; so sanh đê nhây    jmp k2  ; nhây vê k2tim_hang:  ; đăt tên nhan    mov p1, #11111110b  ; đăt hàng 0, xuông bit 0

Page 30: ứNg dụng ic lập trình at89 c51

    mov a, p2  ; chuyên p2 vào a    anl a, #00001111b  ; lấy logic AND, che 4 bit cao    cjne a, #00001111b, hang_0  ; so sanh đê nhây ;    mov p1, #11111101b ; đăt hàng 1, xuông bit 0    mov a, p2  ; chuyên p2 vào a    anl a, #00001111b  ; lấy logic AND, che 4 bit cao    cjne a, #00001111b, hang_1 ; so sanh đê nhây ;    mov p1, #11111011b ; đăt hàng 2, xuông bit 0    mov a, p2  ; chuyên p2 vào a    anl a, #00001111b  ; lấy logic AND, che 4 bit cao    cjne a, #00001111b, hang_2  ; so sanh đê nhây ;    mov p1, #11110111b  ; đăt hàng 3, xuông bit 0    mov a, p2  ; chuyên p2 vào a    anl a, #00001111b  ; lấy logic AND, che 4 bit cao    cjne a, #00001111b, hang_3  ; so sanh đê nhây ;hang_0:  ; tim ra môt trong 4 phim hàng 0    mov dptr, #m_hang_0    jmp tim_phim  ; qua trinh tim phimhang_1:  ; tim ra môt trong 4 phim hàng 1    mov dptr, #m_hang_1    jmp tim_phim  ; qua trinh tim phimhang_2:  ; tim ra môt trong 4 phim hàng 2    mov dptr, #m_hang_2    jmp tim_phim  ; qua trinh tim phimhang_3:  ; tim ra môt trong 4 phim hàng 3    mov dptr, #m_hang_3    jmp tim_phim     ; qua trinh tim phim ;tim_phim:  ; đăt tên nhan cho trinh tim phim    rrc a  ; cho 8 bit trong a quay vong co qua bit cơ C    jnc out  ; kiêm tra bit 0 vào bit cơ C đê nhây    inc dptr  ; cho tăng tri trong bang lên môt nhip    jmp tim_phim  ; quay lại tên nhan tim_phimout:  ; đăt tên nhan    clr a ; xoa sạch tri trong thanh a    movc a, @a+dptr  ; lấy ma trong  bang theo a và cất vào a    mov p3, a  ; chuyên kêt qua ra cang p3    jmp k1   ; nhây vê k1m_hang_0:  ; đăt tên bangdb 01h, 02h, 03h, 04h  ; ma trong bang hàng 0m_hang_1: ; đăt tên bangdb 05h, 06h, 07h, 08h  ; ma trong bang hàng 1m_hang_2:  ; đăt tên bangdb 09h, 0ah, 0bh, 0ch  ; ma trong bang hàng 2m_hang_3:   ; đăt tên bangdb 0dh, 0eh, 0fh, 00h  ; ma trong bang hàng 3    

Page 31: ứNg dụng ic lập trình at89 c51

;delay:  ; trinh làm trê    mov r5, #100  ; đăt tri 100 vào thanh ghi r5v_r6:   ; đăt tên nhan cho lênh nhây    mov r6, #100  ; đăt tri 100 vào thanh ghi r6    djnz r6, $  ; giam theo bươc -1 tri trong r6 cho đên khi băng 0    djnz r5, v_r6  ; giam tri trong r5 theo bươc -1, r5=0?, chon hương nhây    ret  ; quay lại sau lênh call delayend  ; dưng biên dich tại dong này     Giai thich cach dung cac câu lênh trên:  Bươc 1: viêt trinh do xem co phim nào đươc nhấn xuông không.  

Page 32: ứNg dụng ic lập trình at89 c51

   Bươc 2: Do co phim nhấn không, tranh anh hương cua rung phim 

Page 33: ứNg dụng ic lập trình at89 c51

 

    Bươc 3: Tim xem phim trên hàng nào đa đươc nhấn xuông 

Page 34: ứNg dụng ic lập trình at89 c51

    Bươc 4 và Bươc 5: Tim xem phim nào đa đươc nhấn xuông và xuất kêt qua 

Page 35: ứNg dụng ic lập trình at89 c51

  Nhăn Ban: Ma xuất theo phim nhấn đăt trong cac bang: m_hang_0, m_hang_1, m_hang_2 và m_hang_3. Vây nêu Bạn muôn dung cac ma đê điêu khiên cac thiêt bi theo bang 16 phim nhấn này, thi cac ma điêu khiên do Bạn tạo ra hay cho cất trong cac bang theo đung vi tri. Vây, khi Bạn nhấn phim 0 se co ma 0 xuất ra trên cang p3, nhấn phim 1 se co ma 1 xuất ra trên cang p3, nhấn phim 2 se co ma 2 xuất ra trên cang p3....Bạn se co 16 ma điêu khiên ưng vơi 16 phim nhấn. Nêu Bạn dung ma trân 8 chân trên cang p1 làm 8 hàng và dung 8 chân trên cang p2 làm 8 côt. Bạn se co ma trân 8x8, trên ma trân này Bạn co thê găn đên 64 phim nhấn và như vây Bạn co thê co đên 64 ma lênh dung đê điêu khiên cac thiêt bi. Phai không?     Mơ rông: Nhâp tin hiêu vào ic lâp trinh lấy tư cac bô cam biên

Page 36: ứNg dụng ic lập trình at89 c51

 Chung ta biêt trong thiên nhiên co rất nhiêu "thưc thê" không thuôc điên, vây nêu muôn đưa cac "thưc thê" này vào cac ic lâp trinh, chung ta phai dung đên cac sensor, quen goi là cac cam biên. Phân tiêp theo chung ta se tim hiêu môt vài cam biên thương dung, dê tim, trong viêc biên đôi cac đại lương không thuôc điên ra điên và tim cach chuyên cac đại lương này vào ic lâp trinh đê đươc xư ly.    Trươc hêt, hay noi đên cam biên quang. Chung ta biêt, anh sang là môt thưc thê rất phô biên, chung ta nhân biêt anh sang băng cac tê bào thi giac đăt ơ măt. Trong ky thuât điên tư, ngươi ta cung chê tạo đươc nhiêu bô cam biên co thê chuyên đôi anh sang ra dạng tin hiêu điên, như: quang trơ, quang diode, pin quang điên... Ơ đây chung ta thư dung quang cam biên đê tạo ra cac tin hiêu cho nhâp vài ic lâp trinh và viêt cac chương trinh nguôn dung đê điêu khiên cac thiêt bi theo quang năng   

 Quang trơ là môt điên trơ, nghia là no co thê cho dong điên chay qua theo ca hai chiêu như nhau, Bạn cung co thê dung quang trơ kêt hơp vơi cac điên trơ khac làm thành cac câu chia ap. Quang trơ khi bi chiêu sang se giam ohm, do vây no se làm thay đôi cương đô dong điên chay qua no. Trong cac may anh ngươi ta thương dung quang trơ và may đo dong đê làm thiêt bi đo cương đô anh sang. Trong cac TV đơi mơi, ngươi ta dung quang trơ làm thiêt bi tư đông điêu chinh mưc sang

Page 37: ứNg dụng ic lập trình at89 c51

cua màn hinh tuy theo mưc sang cua phong. Trong cac đâu do PIR, ngươi ta dung quang trơ đê cho mơ mạch tăt mơ sang môi khi trơi vê tôi, ngươi ta dung quang trơ vơi cac kinh loc màu đê làm cac bô cam biên do tim màu...Bạn co thê dung môt Ohm kê thông thương đê kiêm tra cac quang trơ. Khi đo ohm, nêu cho chiêu sang, quang trơ se giam ohm và khi bi che sang quang trơ se tăng ohm.    

 Photo diode, hay diode hông ngoại vôn là môt môi nôi ban dân PN, no co đăc tinh làm thay đôi cương đô dong điên môi khi môi nôi PN bi kich sang. Trong mạch, photo diode thương cho ghep vơi môt điên trơ lơn ohm, no đăt ơ trạng thai phân cưc nghich. Khi bi che sang, photo diode dân điên yêu và khi bi chiêu sang, no se dân điên mạnh hơn. Ơ trạng thai phân cưc thuân, no cung co tinh ghim ap như cac diode thông thương khac. Photo diode co hoan tinh nho, cho thay đôi nhanh, nên ngươi ta thich dung photo diode trong cac thiêt bi điêu khiên hông ngoại, dung trong cac thiêt bi điêu khiên tôc đô quay cua cac motor, dung trong mạch đo tôc. Bạn cung co thê dung ohm kê thông thương đê kiêm tra cac photo diode, dung thang đo Rx10K, luc này điên ap co trên 2 dây đo là 12V, đăt photo diode vào dây đo theo kiêu phân cưc nghich, dung môt hôp điêu khiên Remote thông dung, cho phat lênh điêu khiên, chiêu remote vào photo diode, Bạn se thấy kim may đo rung theo xung lênh, dấu hiêu này cho biêt photo diode con tôt. Photo diode co rất nhiêu trong cac đâu may hat băng hinh.  

Page 38: ứNg dụng ic lập trình at89 c51

 

 Diode Laser, vôn là môt môi nôi ban dân PN, khi bi kich thich, cấp dong, no se phat ra thư anh sang Laser. Anh sang Laser khac vơi anh sang thương là cac tia sang phat ra co tinh đông pha, nghia là no tac kich vào cac vât can vơi pha giông nhau, nhơ vây khi Bạn cho hôi tu cac chum tia sang Laser tại môt điêm nho, tại điêm này cương đô sang vân se rất mạnh và rất nong (Điêu này se không làm đươc vơi loại anh sang thương), nên điêm hôi tu goi là tiêu điêm (tiêu 焦 co nghia là điêm nong). Ngày nay ngươi ta dung điêm sang Laser đê đoc lại cac điêm tin hiêu lôi lom rất nho đa đăt trên cac vong quay năm trên cac măt đia CD hay DVD. Tia sang Laser con dung làm tia chiêu đinh vi cho cac may ngăm, và vơi cac chum tia laser co cương đô mạnh, no con dung làm vu khi tấn công đôt chay cac vât bay. Bạn co thê dung môt Ohm kê thông thương đê đo cac diode Laser. Lấy thang đo Rx1 đê co dong chay ra trên 2 dây đo lơn, trên 100mA, khi đo, diode Laser đươc cho phân cưc thuân, bên trong se anh lên môt điêm sang màu đo rất nho. Khi xư dung cac diode Laser, Bạn tranh nhin thăng vào tia sang Laser vi mưc sang qua mạnh co thê làm hư măt.  

Page 39: ứNg dụng ic lập trình at89 c51

 Opto là cac bô ghep quang điên. Ngươi ta cho tô hơp môt bên là diode phat quang, phat ra tia sang hông ngoại và môt bên là quang transistor dung thâu nhân tia sang hông ngoại. Hai thành phân này co thê đăt trên hai mạch điên riêng biêt cach ly nhau, và trao đôi thông tin vơi nhau qua cac tia sang cua bên phat và cua bên nhân. Opto co 2 dạng: dạng đong kin và dạng đê hơ. Dạng đong kin thương dung đê trao đôi thông tin giưa cac bo mạch, và dạng đê hơ thương dung đê phat hiên cac vât thê, như: do tim vât quay, do tim cac chuyên đông, do tim cac đương ke, dung đê đo tôc...Bạn co thê tim thấy cac loại opto co trong cac mạch điêu khiên và di nhiên, Bạn cung co thê dung Ohm kê đê đo kiêm tra cac opto. Dung tinh thuân (kim lên) nghich (kim không lên) đê kiêm tra quang diode trong opto, rôi tim cach cho cấp dong qua quang diode, dung ohm kê đo thuân nghich trên quang transistor đê kiêm tra bên nhân.    

Page 40: ứNg dụng ic lập trình at89 c51

  Solar Cell hay pin măt trơi, là môt bô chuyên đôi năng lương, no chuyên đôi quang năng ra dạng điên năng. Khi trên măt pin solar cell đươc chiêu sang, trên cac dây cưc âm và dương se xuất hiên điên ap, mưc ap thương biên đôi theo cương đô sang và tuy theo nôi trơ cua tai. Trong ưng dung ngươi ta thương dung pin măt trơi phat ra điên năng đê nạp tich trư vào cac nguôn pin charge, và dung nguôn pin này đê thăp sang hay làm quay cac motor. Chung ta thương thấy trên cac may tinh sô (calculator) co trang bi la pin măt trơi đê co thê vân hành trong cac nguôn sang trong phong. Ngày nay, ngươi ta co nhiêu nghiên cưu vê cach khai thac dung năng lương sạch, như năng như gio, vơi năng pin măt trơi là không thê thiêu đươc. Ngày mai, vơi cac tấm pin hiêu suất cao, ngươi ta se co thê dung điên lấy tư nguôn sang tư nhiên, đo là anh năng vô tân cua thai dương. Bạn hay dung môt Volt kê thông thương đê đo kiêm tra cac Solar Cell, và dung cac Led đê kiêm tra kha năng cấp tai cua cac pin măt trơi.   Khao sat: Cach dung cam biên quang điên đê tạo xung nhip đưa vào ic lâp trinh.  

Page 41: ứNg dụng ic lập trình at89 c51

  Trong sơ đô này chung ta dung bô đêm cua timer 0 chạy ơ mode 2 đê đêm xung nhip đưa vào trên chân p3.4, tưc chân T0, đê đơn gian qua bài thưc hành chung ta chi dung sô đêm trong thanh tl0, nghia là đêm tôi đa 255 nhip và quay lại. Kêt qua đêm se cho hiên thi trên bang đen sô dung ma 7 đoạn. Mạch dung cam biên quang điên, chung ta dung Led hông ngoại cho chiêu sang vào môt quang transistor, binh thương quang transistor dân điên, no kich dân Q1 và tạo mưc ap cao trên chân T0, khi co ngươi đi qua, tia sang bi che và làm cho quang transistor ngưng dân, Q1 tăt và mưc ap trên chân p3.4 giam xuông mưc ap 0V và luc này xung nhip vào thanh ghi tl0, thanh ghi tl0 se tiêp tuc tich cất sô liêu này và luôn cho hiên thi kêt qua con sô co trong tl0 trên bang đen sô.  

Page 42: ứNg dụng ic lập trình at89 c51

Chương trinh nguôn này đơn gian, dung cho thưc hành, tim hiêu cach viêt cac câu lênh cơ ban:  ; Chu thich; a,b,c,d,e,f,g -> Đen sô 7 đoạn trên Port 2; P3.0 -> đen LED1 hàng đơn vi  ; P3.1 -> đen LED2 hàng chuc; P3.2 -> đen LED3 hàng trăm; P3.4(T0) -> cam biên quang điên; 30h  ; thanh ghi giư sô hàng đơn vi; 31h  : thanh ghi giư sô hàng chuc; 32h  : thanh ghi giư sô hàng trăm

; Chi đêm vơi thanh tl0, trong đo hàng đơn vi đêm đên  10, hàng chuc đên 5 hàng trăm đên 2. ORG     0000h        SJMP    MAIN        ORG     0030HMAIN:          MOV     DPTR,#LED7SEG   ; vào bang lấy ma hiên sô trên đen 7 đoạn        MOV     TMOD,#06h       ; counter 0, mode 2, đêm xung vào trên chân T0                MOV     TH0,#0C4H       ; nạp tri vào thanh th0        SETB    P3.0                  ; tăt đen sô hàng đơn vi        SETB    P3.1                  ; tăt đen sô hàng chuc        SETB    P3.2                  ; tăt đen sô hàng trăm        SETB    P3.4             ; xung đêm vào ơ chân này, T0        SETB    TR0             ; mơ mạch cho xung đêm vào thanh ghi tl0BEGIN:          MOV     A,TL0              ; cho chuyên tri trong tl0 vào thanh ghi a        CALL   BIN2BCD         ; goi chương trinh đôi sô ra dạng thâp phân        MOV     A,30h              ; chuyên tri co trong thanh 30h vào thanh ghi a         CJNE    A, #10,qua1 ; so sanh tri trong a vơi sô 10, đê đinh hương nhây        MOV     A,#00H   ; tra tri trong a vê 0qua1:   ; đăt tên nhan cho lênh nhây        MOVC    A,@A+DPTR  ; lấy tri trong bang cho vào thanh ghi a        MOV     30h,A      ; cất tri trong a vào thanh 30h        MOV     A,31h      ; chuyên tri co trong thanh 31h vào thanh ghi a        CJNE    A,#6,qua2  ; so sanh tri trong a vơi sô 6, đê chon hương nhây         MOV     A,#00   ; tra tri trong a vê 0qua2:  ; đăt tên nhan cho lênh nhây        MOVC    A,@A+DPTR  ; lấy tri trong bang cho vào thanh ghi a

Page 43: ứNg dụng ic lập trình at89 c51

        MOV     31h,A   ; cất tri trong a vào thanh 31h        MOV     A,32h   ; chuyên tri co trong thanh 32h vào thanh ghi a        CJNE    A,#1, qua3  ; so sanh tri trong a vơi sô 1, đê chon hương nhây        MOV     A,#00H  ; tra tri trong a vê 0qua3:  ; đăt tên nhan cho lênh nhây        MOVC    A,@A+DPTR  ; lấy tri trong bang cho vào thanh ghi a        MOV     32h,A  ; cất tri trong a vào thanh 32hKET_THUC:   ; đăt tên nhan        CALL   DISPLAY ; cho goi chương trinh hiên thi sô        JMP    BEGIN  ; trơ lại tên nhan beginDISPLAY:  ; trinh hiên thi sô trên bang đen        MOV     P1,30H          ; xuất tri trong thanh 30h ra cang p1        CLR     P3.0                ; mơ đen hàng đơn vi        CALL   DELAY            ; goi delay        SETB    P3.0               ; tăt đen tranh lem        MOV     P1,31H          ;  xuất tri trong thanh 31h ra cang p1        CLR     P3.1                ; mơ đen Led hàng chuc        CALL   DELAY            ; goi delay        SETB    P3.1              ; tăt đen tranh lem        MOV     P1,32H          ; xuất tri trong thanh 32h ra cang p1        CLR     P3.2                ; mơ đen Led hàng trăm        CALL   DELAY            ; goi delay        SETB    P3.2               ; tăt đen tranh lem        RETBIN2BCD:  ; trinh làm phep toan đôi tri nhi phân ra dạng sô thâp phân        MOV     B,#10           ;  đăt tri 10 vào thanh b, đê làm phep toan chia 10        DIV     AB                   ; chia tri trong a cho 10        MOV     30h,B           ; cất kêt qua trong b vào thanh 30h        MOV     B,#10           ; đăt tri 10 vào thanh b, đê làm phep toan chia 10        DIV     AB                  ; chia tri trong a cho 10        MOV     31H,B          ; cất kêt qua trong b vào thanh 31h        MOV     32h,A           ; cất kêt qua trong a vào 32h        RET                          ; quay lại sau lênh goi call bin2bcdDELAY:   ; đăt tên nhan cho lênh nhây        MOV     R6,#10   ; nạp tri 10 vào thanh ghi r6v_r7:        MOV     R7,#0FFh ; nạp tri 0ffh vào thanh ghi r7        DJNZ    R7, $        ; cho tri trong r7 giam theo bươc -1 đên luc băng 0         DJNZ    R6, v_r7  ; cho tri trong r6 giam theo bươc -1, r6=0?, đinh hương nhây        RET      ; quay lại sau lênh call delay;  Bang tạo ma hiên sô trên đen Led 7 đoạnLED7SEG:   ; ma 7 đoạn cho hiên cac sô 0, 1, 2, 3, 4, 5, 6, 7, 8, 9DB      0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HEND             ; dưng biên dich tại dong này 

Page 44: ứNg dụng ic lập trình at89 c51

  Phân tich y nghia cac câu lênh trong chương trinh nguôn trên:  

  

Page 45: ứNg dụng ic lập trình at89 c51

 

Page 46: ứNg dụng ic lập trình at89 c51

   Tạm kêt Khi viêt đên đây, tôi mơi môt đông nghiêp vào xem thư, anh noi bài viêt qua dài đoc thấy mêt, tôi cung cam thấy như vây, nên cho dưng ơ đây. Phân viêt mơ rông noi vê cach dung cac dạng cam biên se đươc viêt lại trong môt bài khac. Chung ta chuyên qua môt đê tài khac cung cơ ban và cân thiêt cho dân điên tư, đo là: "Thư dung trinh PSpice đê mô phong nguyên ly làm viêc cua môt mạch nâng ap dạng xung".