Xem bài viết riêng lẻ
Cũ 10-09-2012, 04:45 PM   #4
lengo_ltd
Member
 
Tham gia ngày: May 2012
Bài gửi: 51
Online Status: lengo_ltd đang online
Mặc định

Hệ thống quảng cáo SangNhuong.com

Thêm 1 bài nũa nhé

------------------------------ Bài 3: ------------------------------
Điều khiển đèn giao thông (2 hướng A và
Mục đích yêu cầu:
- Đèn đỏ A sáng khi và chỉ khi đèn xanh và đèn vàng B sáng. Đèn đỏ B sáng khi và chỉ khi đèn xanh và đèn vàng A sáng.
- Nút ưu tiên gắn với một ngắt ngoài (điều khiển bằng phím A)
- Khi kích hoạt ngắt (nút ưu tiên được ấn), đèn đỏ ở 2 hướng A và B đều sáng (cùng lúc) cho đến khi nút ưu tiên được ấn lần nữa, đèn giao thông trở lại trạng thái làm việc bình thường
----------------------------------------------------------
Sơ đồ thiết kế và mô phỏng trên Multisim (MultiMCU)





Mã:
$MOD52 ;Khai bao nhan va cac bien XA equ P1.0 DoA equ P1.1 VA equ P1.2 XB equ P1.3 DoB equ P1.4 VB equ P1.5 SELECT BIT p3.0 ;=1 thi hien thi thoi gian dem cot A ;=0 thi hien thi thoi gian dem cot B UT BIT P3.1 LJMP INIT ;Nhay toi chuong trinh INIT ORG 0013H ;Dia chi ngat EXT1 LJMP EXT1 ;go to EXT1 Interrupt handler LJMP MAIN ;Quay tro lai vong lap chinh INIT: MOV SP,#20h ;Di chuyen SP toi phan xa cua thanh ghi LCALL ENABLE_INTS;Bat dau ngat khi thay thich hop ;///////////////////////////////////////////////////////////////////////////// ORG 30H ; Dia chi bat dau chuong trinh chinh MAIN: MOV P2,#0 CALL CLEAR_ALL SETB DoB SETB XA MOV R0,#7 ; Thoi gian cho truoc khi den bat dau thay doi trang thai MOV R1,#10; thoi gian hien thi cua led 7 doan SETB SELECT LOOP1: LCALL HIENTHI LCALL ONESEC DJNZ R0,LOOP1 ;/////////////////////////////////////////////////////////////////////////// CLR XA SETB VA MOV R0,#3 ;THOI GIAN HIEN THI DEN VANG LA 5s LOOP2: CALL HIENTHI CALL ONESEC ; Doi 1s de chuyen trang thai tu den vang sang den do DJNZ R0,LOOP2 ;//////////////////////////////////////////////////////////////////// CALL CLEAR_ALL SETB DoA SETB XB MOV R0,#7 ; Thoi gian cho truoc khi den bat dau thay doi trang thai MOV R1,#10 CLR SELECT LOOP3: CALL HIENTHI LCALL ONESEC DJNZ R0,LOOP3 ;///////////////////////////////////////////////////// CLR XB SETB DoA SETB VB MOV R0,#3 LOOP4: CALL HIENTHI LCALL ONESEC ;Doi 1s de chuyen trang thai tu den vang sang den do DJNZ R0,LOOP4 JMP MAIN ;EXT1 Phuc vu ngat ngoai EXT1: CPL UT ; RETI ;Cac thu tuc con CLR_LCD: MOV P0, #00h RET ENABLE_INTS: SETB IT1 ;Co ngat ngoai 1(kich canh hoac muc). SETB EX1 ;Cho phep ngat ngoai 1 MOV TMOD,#01H ; SET 16 BIT COUNTER.Bo dinh thoi 1 che do 1 SETB EA ;Enable interrupt global RET ; CLEARS ALL THE LIGHTS CLEAR_ALL: MOV P1,#00H ; Xoa tat ca cac den CLR ACC.0 ; Xoa toan bo co ngat MOV P0,0 RET ;Bo dem trong 1s ONESEC: MOV R5,#12H ; COUNTER USED TO LOOP 20 TIMES, WHICH IS EQUIVALENT TO 1 SEC SEC_LOOP: MOV TH0,#00H; Xoa TIMER 0 MOV TL0,#00H CLR TF0 ; Xoa bit tran SETB TR0 ; Khoi dong TIMER 0 JNB TF0,$ ; WAIT FOR OVERFLOW FLAG CLR TR0 ; Dung TIMER 0 JB UT,HUONG_UT ; Nut danh cho nguoi di bo bi an,thoat khoi vong lap DJNZ R5,SEC_LOOP RET HUONG_UT: MOV P0,#0 MOV p1,#1 MOV P2,#1 LCALL ClEAR_ALL LOOP_UT: SETB DoB SETB DoA JB UT,LOOP_UT ; Nut danh cho nguoi di bo bi an,thoat khoi vong lap LCALL CLEAR_ALL LJMP MAIN RET HIENTHI: MOV A,R1 ;NAP SO DEM CHO LED 7 DOAN MOV B,#0AH DIV AB SWAP A ADD A,B JB SELECT,COTB COTA: MOV P2,A DEC R1;GIAM SO DEM CUA LED MOV A,#0 RET COTB: MOV P0,A DEC R1;GIAM SO DEM CUA LED MOV A,#0 RET ;/////////////////////////////////////// HALT: JMP $ END
  Trả lời với trích dẫn