Thông báo

Collapse
No announcement yet.

Bàn phím + 8255A

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Bàn phím + 8255A

    mình đã làm xong cái bài tập lớn này, đã mô phỏng tốt (đang làm mạch thật, chưa test mạch thật) post lên cho mọi người, không có ngụ ý "khoe" , mà để anh em tham khảo.


    Code:
    ; ------------- READS51 generated header -------------- 
    
    ; ----------------------------------------------------- 
    ;*****************************************
    ;	CHO PHIM BAM. 
    ;	NEU BAM PHAM 	1  -----> CHUYEN DEN CHUONG TRINH 1
    ;	NEU BAM PHIM  2 -------> CHUYEN DEN CHUONG TRINH 2
    ;	P3.1 DEN P3.4 : COT CUA MA TRAN PHIM
    ;	P1.0 DEN P1.3: HANG CUA MA TRAN PHIM	
    ;*****************************************
    #include <sfr51.inc>	
    
    ;*****************************************
    
    ;*****************************************
    	ORG 0000H
    	MOV P1, #00H
    	MOV P3,#FFH		;CẤU HÌNH CỔNG P3 LÀM ĐẦU VÀO
    	MOV A, #P3
    	CJNE A,#00001111B, PHIMDINH		;KIỂM TRA PHÍM DÍNH
    	SJMP K1;         NẾU KHÔNG CÓ PHÍM DÍNH THÌ TIẾP TỤC NHẢY ĐẾN K1
    PHIMDINH:	
    MOV A, #80H        ;        CHƯƠNG TRÌNH NẾU CÓ PHÍM DÍNH THÌ GHI RA LED SỐ “9”
    	MOV DPTR,#4003H        	; CẤU HÌNH PA, PB , PC CỔNG RA,
    	MOVX @DPTR, A        	; 
           MOV DPTR,#4002H		; TRỎ ĐẾN PC
    	MOV A,#10010000B;		;  GHI RA LED HIEN THI SO “9999”	
    	MOVX @DPTR, A   
        	HERE:  SJMP HERE	;Ở LẠI VÒNG LẶP VÔ TẬN
    
    K1:	MOV A,P3		;            ĐỌC CỔNG P3
    	ANL A, #00001111B		;CHE CAC BIT CAO CUA P3
    	CJNE A,#00001111B, K2	;CO PHAM AN? NHAY TOI K2 DE CHONG RUNG
    	SJMP K1
    K2:	ACALL DELAY2OMS	;	CHONG RUNG
    	MOV A,P3
    	ANL A, #00001111B
    	CJNE A,#00001111B, K3	;CO PHIM AN? NHAY TOI K3 DE KIEMTRA TUNG  HANG
    	SJMP K1
    K3:	MOV A,#11111110B	;DUA 0 RA HANG THU NHAT
    	MOV P1,A
    MOV A,P3;
    	ANL A, #00001111B
    	CJNE A,#00001110B,COL2
    	SJMP PROG1
    COL2:	ANL A,#00001111B
    	CJNE A,#00001101B, K1	;Nếu không phải phím 2 thì quay lại kiểm tra từ đầu
    	SJMP PROG2		;
    ;*********************************************************
    ;CHUONG TRINH ROLE THU NHAT
    ;CAU HINH: 	PA0 DONG CAT ROLE 1
    ;			PA1 DONG CAT ROLE 2
    ;			PA2 DONG CAT ROLE 3
    ;			PA3 DONG CAT ROLE 4
    ;			PA4 DONG CAT ROLE 5
    ;			PA5 DONG CAT ROLE 6
    ;CAU  HINH 8255A: PA, PB,  PC DEU LAM CONG RA
    ; TU DIEU KHIEN #80H; DIA CHI TU DIEU KHIEN LA 4003H
    ;DIA CHI CAC CONG CUA 8255A:	PA = 4000H; PB=4001H; PC=4002H;CR=4003H	;PC ĐIỀU KHIỂN LED 7 THANH 4 ĐOẠN HIỂN THỊ SỐ 1
    ; PC3 ĐẾN PC7 GỬI ĐẾN IC7447 MÃ BCD 0001
    ; PC0 ĐẾN PC3 ĐỂ CHỌN 4 LED CỦA LED 7 THANH 4 ĐOẠN
    ;CHƯƠNG TRÌNH ĐÓNG CắTCÁC RƠLE THEO TRÌNH Tự Từ 1-2-3-4-5-6. RƠLE Tự DUY TRÌ ;KHI ĐƯợC CấP ĐIệN. KHI RƠLE 6 ĐÃ ĐƯợC CấP ĐIệN 5S THÌ CắT ĐIệN TấT Cả CÁC RƠLE; ;SAU 10S LạI BắT ĐầU CHU KÌ MớI.
    ;______________________________________________________________________
     
    PROG1:                
    	MOV A, #80H        ;           (A)=80H, LÀ TỪ ĐIỀU KHIẺN 8255A
    	MOV DPTR,#4003H        	; DPTR TRỎ ĐẾN ĐỊA CHỈ CR CỦA 8255A
    	MOVX @DPTR, A        	; NẠP TỪ ĐIỀU KHIỂN VÀO THANH GHI CR, ;(CR)=80H,CẤU HÌNH CÁC CỔNG PA, PB PC CỔNG RA
                       
    	MOV DPTR,#4002H	;DPTR TRỎ ĐẾN CỔNG PC
    	MOV A,#00010000B;  
    	MOVX @DPTR, A    ; A NẠP VÀO PC ĐỂĐIỀU KHIỂN LED 1 HIỂN THÍ SỐ “1”
    
    	
    	MOV A,#00H ;
    	MOV DPTR,#4000H ; DPTR TRỎ ĐẾN PA CỦA 8255A
    	MOVX @DPTR, A        ;XÓA PA
    
    
    
    LOOP11:    MOV A, #01H        ;	KHỞI TẠO GIÁ TRỊ CỦA A
    		MOV R0,#06H      ; 	NẠP BIẾN ĐẾM SỐ LẦN QUAY BIT TRONG CHU KÌ
    		LOOP21: MOV DPTR,#4000H       ; DPTR TRỎ ĐẾN PA
    	               	 MOVX @DPTR, A	; NẠP GIÁ TRỊ CỦA A VÀO CHO PA
    	                           ACALL DELAY5S   ; GỌI TRỄ 5S
    			 RL A   ; 		QUAY TRÁI BIT CỦA A
                                      DJNZ R0, LOOP21       ;
                        SJMP LOOP11         ;	Ở LẠI VÒNG LẶP VÔ TẬN , CHO ĐẾN KHI RESET
                       
                    
    ;***********************************************************8
    ;CHUONG TRINH ROLE THU 2
    ;CHƯƠNG TRÌNH ĐÓNG CắTCÁC RƠLE THEO TRÌNH Tự Từ 1-2-3-4-5-6. RƠLE Tự DUY TRÌ ;KHI ĐƯợC CấP ĐIệN. KHI RƠLE 6 ĐÃ ĐƯợC CấP ĐIệN 5S THÌ CắT ĐIệN TấT Cả CÁC RƠLE; ;SAU 10S LạI BắT ĐầU CHU KÌ MớI.
    ;______________________________________________________________________
    
    
    PROG2:                   
    	MOV A, #80H        ; A)=80H, LÀ TỪ ĐIỀU KHIẺN 8255A
    MOV DPTR,#4003H        ; DPTR TRỎ ĐẾN ĐỊA CHỈ CR CỦA 8255A
    MOVX @DPTR, A        ; NẠP TỪ ĐIỀU KHIỂN VÀO THANH GHI CR, ;(CR)=80H,CẤU ;HÌNH CÁC CỔNG PA, PB PC LÀM CỔNG RA
    MOV DPTR,#4002H;  DPTR TRỎ ĐẾN PC
    	MOV A,#00100000B; HIỂN THỊ SỐ “2” TRÊN LED
    	MOVX @DPTR, A    ; ; A NẠP VÀO PC ĐỂĐIỀU KHIỂN LED 1 HIỂN THÍ SỐ “2”
    	                  
    	MOV A,#00H ;
    	MOV DPTR,#4000H ; 
    	MOVX @DPTR, A        ;
    
    LOOP22:    MOV A, #000001B        ;
    	MOV DPTR,#4000H       ;TRỎ ĐẾN PA
    	MOVX @DPTR, A;		BẬT RƠLE THỨ NHẤT CÓ ĐIỆN
    ACALL DELAY1S ;GỌI TRỄ 1S
     	 
    	MOV A, #000011B        ;CẤP ĐIỆN RƠLE 2, DUY TRÌ RƠLE 1
    	MOV DPTR,#4000H       ;
    	MOVX @DPTR, A;
                       ACALL DELAY1S ; GỌI TRỄ 1S
    	 
    	MOV A, #000111B        ; CẤP ĐIỆN RƠLE3, DUY TRÌ RƠLE 1VÀ 2
    	MOV DPTR,#4000H       ;NT (NHƯ TRÊN)
    	MOVX @DPTR, A;	NT
                       ACALL DELAY1S ; GỌI TRỄ 1S
    	 
    	MOV A, #001111B        ; CẤP ĐIỆN RƠLE4, DUY TRÌ RƠLE 1,2, VÀ 3
    	MOV DPTR,#4000H       ;
    	MOVX @DPTR, A;
                       ACALL DELAY1S ; GỌI TRỄ 1S
    	 
    	MOV A, #011111B        ; CẤP ĐIỆN RƠLE5, DUY TRÌ RƠLE 1,2, 3 ,VÀ 4
    	MOV DPTR,#4000H       ;
    	MOVX @DPTR, A;
                       ACALL DELAY1S ; GỌI TRỄ 1S
    	 
    	MOV A, #111111B        ; CẤP ĐIỆN RƠLE6, DUY TRÌ RƠLE 1,2,3,4, VÀ 5 TRONG 5S
    	MOV DPTR,#4000H       ;
    	MOVX @DPTR, A;
                       ACALL DELAY5S ; GỌI TRỄ 5S
    
    	MOV A, #000000B  ;SAU KHI CẢ 6 RƠLE CÓ ĐIỆN TRONG 5S THÌ TẮT TẤT CẢ RƠLE
    	MOV DPTR,#4000H       ;
    	MOVX @DPTR, A;
                       ACALL DELAY5S ;
                       ACALL DELAY5S ; GỌI TRỄ 5S HAI LẦN LIÊN TIẾP, TẠO THÀNH TRỄ 10S
    	            
                        SJMP LOOP22        ; Ở LẠI VÒNG LẶP VÔ TẬN , CHO ĐẾN KHI RESET
    ;********************************
    ;CAC CHUONG TRINH TAO TRE:                   
    ;CHUONG TRINH TAO TRE 5S:                
    
    
    
    DELAY5S:    MOV R3,#37
    DL10:       MOV R2,#100            
    DL9:        MOV R1,#250
    DL8:        NOP
                NOP
                DJNZ R1,DL8
                DJNZ R2,DL9
                DJNZ R3,DL10
                RET
    ;CHUONG TRINH  TRE 1S           
    DELAY1S:    MOV R3,#10
    DL1:       MOV R2,#100            
    DL2:        MOV R1,#250
    DL3:        NOP
                NOP
                DJNZ R1,DL3
                DJNZ R2,DL2
                DJNZ R3,DL1
                RET
                
    ;CHUONG TRINH TRE 20MS
    DELAY20MS:  
    	MOV R2,#20
    	DL1111 :        MOV R1,#250            
    	DL2222 :        NOP
                		    NOP
                	DJNZ R1,DL2222
               	 DJNZ R2,DL1111
                	RET
    	    END
    Attached Files
    Last edited by VNarmy; 15-01-2008, 16:23.

  • #2
    Gửi file mô phỏng luôn đi tdh1k49
    Đăng ký Dropbox có ngay 2GB lưu trữ online miễn phí:

    Comment


    • #3
      Chương trình:

      1
      Chương trình đóng cắtcác rơle theo trình tự từ 1 đến 6 và theo chu kì, mỗi thời điểm chỉ có một rơle có điện, thời gian cấp điện cho mỗi rơle là 5s.
      2Chương trình đóng cắtcác rơle theo trình tự từ 1-2-3-4-5-6. Rơle tự duy trì khi được cấp điện. Khi rơle 6 đã được cấp điện 5s thì cắt điện tất cả các rơle; sau 10s lại bắt đầu chu kì mới.


      Cấu hình phần cứng gồm

      1.Khối ghép nối cơ bản của ngoại vi
      Ta cần IC chốt địa chỉ 74373; IC giải mã 74138, Ram 8KBvà Rom 8KB
      Ở đây ta chọn EPROM 8Kx8 2764 và chọn SRAM 8Kx8 6264

      2 Khối bàn phím 4x4, cần 4 cổng vào và 4 cổng ra để quét phím
      Chọn P3.0 đến P3.3 của chip AT89C51 làm cổng vào để quét cột của phím. Các chân P1.0 đến P1.3 được cấu hình làm cổng ra để nối hàng ma trận phím

      3 Khối LED hiển thị chế độ chương trình. Chọn loại LED 7 thanh, 4 đoạn. Ta cần 4 đầu vào chọn LED và 8 đầu ra để hiện thị số ( bao gồm cả thanh chấm tròn nhỏ ở đáy). ta chon cổng PC của 8255A làm cổng ra điều khiển chương trình,. Để đơn giản cho lập trình, ta chọn dùng IC giải mã BCD 74LS47 hoặc 74LS46. Ở đây ta chon IC 7447. Đầu ra ở dạng tích cực thấp. Chọn chân cấp chọn cho 4 LED là PC0 đến PC3. Các chân PC4 đến PC7 được đưa vào IC giải mã 7447. Ta cần 4 transistor thuận A564 để cấp điện cho 4 chân chọn chip


      4 Khối rơle gồm 6 rơle. Chọn cổng PA làm cổng điều khiển. Ta chọn PA0 đến PA5 lần lượt cho các rơle từ 1 đến 6. Cần có thêm một tầng khuếch đại để có thể cung cấp đủ dòng cho rơle tác động. Chọn rơle loại 5V. Tầng khuếch đại ta dùng IC ULN2803 vì có đặc điểmcủa tầng khuếch đại Darlington, sẽ cung cấp đủ điện áp 5V cho cuộn dây rơle.

      • Nếu bấm phím 1,tương ứng với tọa độ cột P3.0 và hàng P1.0 thì chế độ 1 của rơle sẽ được chạy, được điều khiển bới cổng PA gồm PA0 đến PA5, đồng thời khối LED sẽ hiển thị số “1” điều khiển bởi PC
      • Nếu bấm phím 2,tương ứng với tọa độ cột P3.0 và hàng P1.1 thì chế độ 2 của rơle sẽ được chạy, được điều khiển bới cổng PA gồm PA0 đến PA5, đồng thời khối LED sẽ hiển thị số “2” điều khiển bởi PC





      Trong thiết kế phần cứng, A13, A14, A15 được ghép đến 74LS138 để chọn chip cho 8255A và định vùng nhớ cho ROM, RAM. Chân Y0 của 74LS138 nối tới chân CS (Chip Select) của 8255A, do đó địa chỉ các cổng sẽ là: PA=4000H; PB=4001H; PC=4002H; CR=4003H.

      Mạch thật đã làm xong và chạy ngon lành.

      Nhược điểm của bài trên là chưa ứng dụng Ngắt vào để xử lí 2 chương trình
      Chắc chắn chương trình viết bằng ngắt sẽ phức tạp hơn, nhưng hiệu quả hơn, có thê kiểm tra trạng thái phím bấm trong khi thực hiện đóng cắt rơle.
      Mình sẽ cố gắng viết lại bằng ngắt.
      Attached Files
      Last edited by tdh1k49; 18-01-2008, 22:38.

      Comment


      • #4
        Code sai be bet. Muon khoe cung lam cho ngon da roi hay post.

        Comment


        • #5
          thực sự mà nói thì sử dụng IC mở rộng port 8255 này ít khi dùng đến vì các VXL hiện nay số lượng IO là rất lớn.Mặt khác nếu mở rộng cho 8051 thì giá con 8255 + 8051 thì thà bạn mua con nhiều chân mà dùng còn tiện hơn. Còn đây là code của mình các bạn có thể tham khảo.GT_PPI8255.zip

          Comment

          Về tác giả

          Collapse

          tdh1k49 Tìm hiểu thêm về tdh1k49

          Bài viết mới nhất

          Collapse

          Đang tải...
          X