Mạch mô phỏng đèn giao thông

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • thang0105
    Nhập môn đệ tử
    • Jun 2006
    • 4

    #1

    Mạch mô phỏng đèn giao thông

    Chào các anh chị em, mình cũng vừa mới nghiên cứu về PIC16F84A và ứng dụng vào mô phỏng một mạch đèn giao thông có đếm số. Mình dùng thêm con 7447 để giải mã Led 7 đoạn và con 74138,74139 để phân kênh
    Mạch mô phỏng mình dùng PROTEUS đễ vẽ. Còn đoạn code thì dùng chương trình MPLAB viết. Tuy nhiên vì sản phẩm đầu tay về con PIC nên đoạn mã chưa chạy, cũng chưa biết sai chỗ nào. Ở đây mình chỉ đơn thuần là xuất các chân trên các Port cho các Led sáng, sau đó delay một khoảng thời gian, và cứ như vậy theo phương pháp quét Led.
    Nào, anh chị em cùng ra tay giúp đỡ lính mới nhé.
    Attached Files
  • nhh
    Đệ tử 9 túi
    • Feb 2006
    • 174

    #2
    Đây là phần đầu code của bạn (Do dài quá diễn đàn cấm nếu số ký tự vượt giới hạn):
    Code:
    		LIST		P=16F84A
    		INCLUDE		P16F84A.INC
    REG_L	EQU			0x0C
    REG_M	EQU			0X0D
    REG_H	EQU			0X0E
    		ORG		0X00
    		CALL		SET_PORTS
    		
    ;...............................LUOT 1.....................................;
    
    LOOP
    LOOP1	;...LED1:1...LED2:3...DO...LED3:1...LED4:0...XANH...;
    		MOVLW		B'10000000'		;LED1: 1;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'11000001'		;LED2: 3;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'10000010'		;LED3: 1;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000011'		;LED4: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000000'		;LED DO;
    		MOVWF		PORTA
    		CALL		DELAY_10uS
    		MOVLW		B'00000101'		;LED XANH;
    		MOVWF		PORTA
    		CALL		DELAY_10uS	
    		CALL		DELAY
    		GOTO		LOOP1
    		RETURN
    ;...............................................................................;
    LOOP2	;...LED1:1...LED2:2...DO...LED3:0...LED4:9...XANH...;
    		MOVLW		B'10000000'		;LED1: 1;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'01000001'		;LED2: 2;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'00000010'		;LED3: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'10010011'		;LED4: 9;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000000'		;LED DO;
    		MOVWF		PORTA
    		CALL		DELAY_10uS
    		MOVLW		B'00000101'		;LED XANH;
    		MOVWF		PORTA
    		CALL		DELAY_10uS
    		CALL		DELAY
    		GOTO		LOOP2
    		RETURN
    ;...................................................................................;
    LOOP3	;...LED1:1...LED2:1...DO...LED3:0...LED4:8...XANH...;
    		MOVLW		B'10000000'		;LED1: 1;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'01000001'		;LED2: 1;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'00000010'		;LED3: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00010011'		;LED4: 8;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000000'		;LED DO;
    		MOVWF		PORTA
    		CALL		DELAY_10uS
    		MOVLW		B'00000101'		;LED XANH;
    		MOVWF		PORTA
    		CALL		DELAY_10uS
    		CALL		DELAY
    		GOTO		LOOP3
    		RETURN
    ;.................................................................................;
    LOOP4	;...LED1:1...LED2:0...DO...LED3:0...LED4:7...XANH...;
    		MOVLW		B'10000000'		;LED1: 1;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'00000001'		;LED2: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'00000010'		;LED3: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'11100011'		;LED4: 7;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000000'		;LED DO;
    		MOVWF		PORTA
    		CALL		DELAY_10uS
    		MOVLW		B'00000101'		;LED XANH;
    		MOVWF		PORTA
    		CALL		DELAY_10uS	
    		CALL		DELAY
    		GOTO		LOOP4
    		RETURN
    ;....................................................................................;
    LOOP5	;...LED1:0...LED2:9...DO...LED3:0...LED4:6...XANH...;
    		MOVLW		B'00000000'		;LED1: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'10010001'		;LED2: 9;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'00000010'		;LED3: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'01100011'		;LED4: 6;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000000'		;LED DO;
    		MOVWF		PORTA
    		CALL		DELAY_10uS
    		MOVLW		B'00000101'		;LED XANH;
    		MOVWF		PORTA
    		CALL		DELAY_10uS	
    		CALL		DELAY
    		GOTO		LOOP5
    		RETURN
    ;...................................................................................;
    LOOP6	;...LED1:0...LED2:8...DO...LED3:0...LED4:5...XANH...;
    		MOVLW		B'00000000'		;LED1: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'00010001'		;LED2: 8;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'00000010'		;LED3: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'10100011'		;LED4: 5;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000000'		;LED DO;
    		MOVWF		PORTA
    		CALL		DELAY_10uS
    		MOVLW		B'00000101'		;LED XANH;
    		MOVWF		PORTA
    		CALL		DELAY_10uS	
    		CALL		DELAY
    		GOTO		LOOP6
    		RETURN
    ;................................................................................;
    LOOP7	;...LED1:0...LED2:7...DO...LED3:0...LED4:4...XANH...;
    		MOVLW		B'00000000'		;LED1: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'11100001'		;LED2: 7;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'00000010'		;LED3: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00100011'		;LED4: 4;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000000'		;LED DO;
    		MOVWF		PORTA
    		CALL		DELAY_10uS
    		MOVLW		B'00000101'		;LED XANH;
    		MOVWF		PORTA
    		CALL		DELAY_10uS	
    		CALL		DELAY
    		GOTO		LOOP7
    		RETURN
    ;...............................................................................;
    LOOP8	;...LED1:0...LED2:6...DO...LED3:0...LED4:3...XANH...;
    		MOVLW		B'00000000'		;LED1: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'01100001'		;LED2: 6;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'00000010'		;LED3: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'11000011'		;LED4: 3;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000000'		;LED DO;
    		MOVWF		PORTA
    		CALL		DELAY_10uS
    		MOVLW		B'00000101'		;LED XANH;
    		MOVWF		PORTA
    		CALL		DELAY_10uS	
    		CALL		DELAY
    		GOTO		LOOP8
    		RETURN
    ;.............................................................................;
    LOOP9	;...LED1:0...LED2:5...DO...LED3:0...LED4:2...XANH...;
    		MOVLW		B'00000000'		;LED1: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'10100001'		;LED2: 5;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'00000010'		;LED3: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'01000011'		;LED4: 2;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000000'		;LED DO;
    		MOVWF		PORTA
    		CALL		DELAY_10uS
    		MOVLW		B'00000101'		;LED XANH;
    		MOVWF		PORTA
    		CALL		DELAY_10uS	
    		CALL		DELAY
    		GOTO		LOOP9
    		RETURN
    ;........................................................................;
    LOOP10	;...LED1:0...LED2:4...DO...LED3:0...LED4:1...XANH...;
    		MOVLW		B'00000000'		;LED1: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'00100001'		;LED2: 4;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'00000010'		;LED3: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'10000011'		;LED4: 1;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000000'		;LED DO;
    		MOVWF		PORTA
    		CALL		DELAY_10uS
    		MOVLW		B'00000101'		;LED XANH;
    		MOVWF		PORTA
    		CALL		DELAY_10uS		
    		CALL		DELAY
    		GOTO		LOOP10
    		RETURN
    
    ;...........................................................................;
    LOOP11	;...LED1:0...LED2:3...DO...LED3:0...LED4:0...XANH...;
    		MOVLW		B'00000000'		;LED1: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'11000001'		;LED2: 3;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'00000010'		;LED3: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000011'		;LED4: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000000'		;LED DO;
    		MOVWF		PORTA
    		CALL		DELAY_10uS
    		MOVLW		B'00000101'		;LED XANH;
    		MOVWF		PORTA
    		CALL		DELAY_10uS		
    		CALL		DELAY
    		GOTO		LOOP11
    		RETURN
    ;...........................................................................;
    LOOP12	;...LED1:0...LED2:2...DO...LED3:0...LED4:2...VANG...;
    		MOVLW		B'10000000'		;LED1: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'11000011'		;LED2: 2;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'10000100'		;LED3: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000111'		;LED4: 2;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000000'		;LED DO;
    		MOVWF		PORTA
    		CALL		DELAY_10uS
    		MOVLW		B'00000100'		;LED VANG;
    		MOVWF		PORTA
    		CALL		DELAY_10uS		
    		CALL		DELAY
    		GOTO		LOOP12
    		RETURN
    ;...........................................................................;
    LOOP13	;...LED1:0...LED2:1...DO...LED3:0...LED4:1...VANG...;
    		MOVLW		B'10000001'		;LED1: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'11000011'		;LED2: 1;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'10000100'		;LED3: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000111'		;LED4: 1;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000000'		;LED DO;
    		MOVWF		PORTA
    		CALL		DELAY_10uS
    		MOVLW		B'00000100'		;LED VANG;
    		MOVWF		PORTA
    		CALL		DELAY_10uS		
    		CALL		DELAY
    		GOTO		LOOP13
    		RETURN
    ;.............................................................................;
    LOOP14	;...LED1:0...LED2:0...DO...LED3:0...LED4:0...VANG...;
    		MOVLW		B'10000001'		;LED1: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'11000011'		;LED2: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS
    		MOVLW		B'10000100'		;LED3: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000111'		;LED4: 0;
    		MOVWF		PORTB
    		CALL		DELAY_10uS	
    		MOVLW		B'00000000'		;LED DO;
    		MOVWF		PORTA
    		CALL		DELAY_10uS
    		MOVLW		B'00000100'		;LED VANG;
    		MOVWF		PORTA
    		CALL		DELAY_10uS		
    		CALL		DELAY
    		GOTO		LOOP14
    		RETURN
    ;.......................HET LUOT 1..................................;
    Ngày mai bắt đầu từ ngày hôm nay

    Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
    http://www.picvietnam.com/forum//showthread.php?t=1263

    Comment

    • nhh
      Đệ tử 9 túi
      • Feb 2006
      • 174

      #3
      Phần còn lại:
      Code:
      ;.......................LUOT 2......................................;
      LOOPA	;...LED1:1...LED2:0...XANH...LED3:1...LED4:3...DO...;
      		MOVLW		B'10000000'		;LED1: 1;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'00000001'		;LED2: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'10000010'		;LED3: 1;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'11000011'		;LED4: 3;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00000010'		;LED XANH;
      		MOVWF		PORTA
      		CALL		DELAY_10uS
      		MOVLW		B'00000011'		;LED DO;
      		MOVWF		PORTA
      		CALL		DELAY_10uS		
      		CALL		DELAY
      		GOTO		LOOPA
      		RETURN
      ;......................................................................;
      LOOPB	;...LED1:0...LED2:9...XANH...LED3:1...LED4:2...DO...;
      		MOVLW		B'00000000'		;LED1: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'10010001'		;LED2: 9;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'10000010'		;LED3: 1;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'01000011'		;LED4: 2;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00000010'		;LED XANH;
      		MOVWF		PORTA
      		CALL		DELAY_10uS
      		MOVLW		B'00000011'		;LED DO;
      		MOVWF		PORTA
      		CALL		DELAY_10uS		
      		CALL		DELAY
      		GOTO		LOOPB
      		RETURN
      ;......................................................................;
      LOOPC	;...LED1:0...LED2:8...XANH...LED3:1...LED4:1...DO...;
      		MOVLW		B'00000000'		;LED1: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'00010001'		;LED2: 8;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'10000010'		;LED3: 1;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'10000011'		;LED4: 1;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00000010'		;LED XANH;
      		MOVWF		PORTA
      		CALL		DELAY_10uS
      		MOVLW		B'00000011'		;LED DO;
      		MOVWF		PORTA
      		CALL		DELAY_10uS		
      		CALL		DELAY
      		GOTO		LOOPC
      		RETURN
      ;......................................................................;
      LOOPD	;...LED1:0...LED2:7...XANH...LED3:1...LED4:0...DO...;
      		MOVLW		B'00000000'		;LED1: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'11100001'		;LED2: 7;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'10000100'		;LED3: 1;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00000011'		;LED4: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00000010'		;LED XANH;
      		MOVWF		PORTA
      		CALL		DELAY_10uS
      		MOVLW		B'00000011'		;LED DO;
      		MOVWF		PORTA
      		CALL		DELAY_10uS		
      		CALL		DELAY
      		GOTO		LOOPD
      		RETURN
      ;......................................................................;
      LOOPE	;...LED1:0...LED2:6...XANH...LED3:0...LED4:9...DO...;
      		MOVLW		B'00000000'		;LED1: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'01100001'		;LED2: 6;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'00000010'		;LED3: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'10010011'		;LED4: 9;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00000010'		;LED XANH;
      		MOVWF		PORTA
      		CALL		DELAY_10uS
      		MOVLW		B'00000011'		;LED DO;
      		MOVWF		PORTA
      		CALL		DELAY_10uS		
      		CALL		DELAY
      		GOTO		LOOPE
      		RETURN
      ;......................................................................;
      LOOPF	;...LED1:0...LED2:5...XANH...LED3:0...LED4:8...DO...;
      		MOVLW		B'00000000'		;LED1: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'10100001'		;LED2: 5;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'00000010'		;LED3: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00010011'		;LED4: 8;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00000010'		;LED XANH;
      		MOVWF		PORTA
      		CALL		DELAY_10uS
      		MOVLW		B'00000011'		;LED DO;
      		MOVWF		PORTA
      		CALL		DELAY_10uS		
      		CALL		DELAY
      		GOTO		LOOPF
      		RETURN
      ;......................................................................;
      LOOPG	;...LED1:0...LED2:4...XANH...LED3:0...LED4:7...DO...;
      		MOVLW		B'00000000'		;LED1: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'00100001'		;LED2: 4;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'00000010'		;LED3: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'11100011'		;LED4: 7;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00000010'		;LED XANH;
      		MOVWF		PORTA
      		CALL		DELAY_10uS
      		MOVLW		B'00000011'		;LED DO;
      		MOVWF		PORTA
      		CALL		DELAY_10uS		
      		CALL		DELAY
      		GOTO		LOOPG
      		RETURN
      ;......................................................................;
      LOOPH	;...LED1:0...LED2:3...XANH...LED3:0...LED4:6...DO...;
      		MOVLW		B'00000000'		;LED1: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'11000001'		;LED2: 3;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'00000010'		;LED3: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'01100011'		;LED4: 6;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00000010'		;LED XANH;
      		MOVWF		PORTA
      		CALL		DELAY_10uS
      		MOVLW		B'00000011'		;LED DO;
      		MOVWF		PORTA
      		CALL		DELAY_10uS		
      		CALL		DELAY
      		GOTO		LOOPH
      		RETURN
      ;......................................................................;
      LOOPI	;...LED1:0...LED2:2...XANH...LED3:0...LED4:5...DO...;
      		MOVLW		B'00000000'		;LED1: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'01000001'		;LED2: 2;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'00000010'		;LED3: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'10100011'		;LED4: 5;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00000010'		;LED XANH;
      		MOVWF		PORTA
      		CALL		DELAY_10uS
      		MOVLW		B'00000011'		;LED DO;
      		MOVWF		PORTA
      		CALL		DELAY_10uS		
      		CALL		DELAY
      		GOTO		LOOPI
      		RETURN
      ;......................................................................;
      LOOPJ	;...LED1:0...LED2:1...XANH...LED3:0...LED4:4...DO...;
      		MOVLW		B'00000000'		;LED1: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'10000001'		;LED2: 1;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'00000010'		;LED3: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00100011'		;LED4: 4;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00000010'		;LED XANH;
      		MOVWF		PORTA
      		CALL		DELAY_10uS
      		MOVLW		B'00000011'		;LED DO;
      		MOVWF		PORTA
      		CALL		DELAY_10uS		
      		CALL		DELAY
      		GOTO		LOOPJ
      		RETURN
      ;......................................................................;
      LOOPK	;...LED1:0...LED2:0...XANH...LED3:0...LED4:3...DO...;
      		MOVLW		B'00000000'		;LED1: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'00000001'		;LED2: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'00000010'		;LED3: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00000011'		;LED4: 3;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00000010'		;LED XANH;
      		MOVWF		PORTA
      		CALL		DELAY_10uS
      		MOVLW		B'00000011'		;LED DO;
      		MOVWF		PORTA
      		CALL		DELAY_10uS		
      		CALL		DELAY
      		GOTO		LOOPK
      		RETURN
      ;......................................................................;
      LOOPL	;...LED1:0...LED2:2...VANG...LED3:0...LED4:2...DO...;
      		MOVLW		B'00000000'		;LED1: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'01000001'		;LED2: 2;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'00000010'		;LED3: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'01000011'		;LED4: 2;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00000001'		;LED VANG;
      		MOVWF		PORTA
      		CALL		DELAY_10uS
      		MOVLW		B'00000011'		;LED DO;
      		MOVWF		PORTA
      		CALL		DELAY_10uS		
      		CALL		DELAY
      		GOTO		LOOPL
      		RETURN
      ;......................................................................;
      LOOPM	;...LED1:0...LED2:1...VANG...LED3:0...LED4:1...DO...;
      		MOVLW		B'00000000'		;LED1: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'10000001'		;LED2: 1;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'00000010'		;LED3: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'10000011'		;LED4: 1;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00000001'		;LED VANG;
      		MOVWF		PORTA
      		CALL		DELAY_10uS
      		MOVLW		B'00000011'		;LED DO;
      		MOVWF		PORTA
      		CALL		DELAY_10uS		
      		CALL		DELAY
      		GOTO		LOOPM
      		RETURN
      ;......................................................................;
      LOOPN	;...LED1:0...LED2:0...VANG...LED3:0...LED4:0...DO...;
      		MOVLW		B'00000000'		;LED1: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'00000001'		;LED2: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS
      		MOVLW		B'00000010'		;LED3: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00000011'		;LED4: 0;
      		MOVWF		PORTB
      		CALL		DELAY_10uS	
      		MOVLW		B'00000001'		;LED VANG;
      		MOVWF		PORTA
      		CALL		DELAY_10uS
      		MOVLW		B'00000011'		;LED DO;
      		MOVWF		PORTA
      		CALL		DELAY_10uS		
      		CALL		DELAY
      		GOTO		LOOPN
      		RETURN
      ;...............................................HET LUOT 2.....................................;
      		GOTO		LOOP
      ;........................................SET PORTS.............................................;
      SET_PORTS		
      		CLRW				
      		MOVWF		PORTB
      		BSF			STATUS,RP0
      		CLRW		
      		MOVLW		TRISA
      		CLRW
      		MOVLW		TRISB
      		BCF			STATUS,RP0
      		RETURN
      
      ;..........................................TAO HAM DELAY_1mS..................................;
      DELAY_1mS
      		CLRF		REG_H
      HERE	NOP
      		DECFSZ		REG_H
      		GOTO		HERE
      		RETURN
      ;..........................................TAO HAM DELAY 3mS.................................;
      DELAY_10uS
      		CALL		DELAY_1mS
      		CALL		DELAY_1mS
      		CALL		DELAY_1mS
      		RETURN
      ;..........................................TAO HAM DELAY...................................;
      DELAY
      		CLRW	
      		MOVLW		B'10110100'
      		MOVWF		REG_L
      		DECFSZ		REG_L
      		RETURN
      ;.............................................................................................;
      		END
      Ngày mai bắt đầu từ ngày hôm nay

      Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
      http://www.picvietnam.com/forum//showthread.php?t=1263

      Comment

      • nhh
        Đệ tử 9 túi
        • Feb 2006
        • 174

        #4
        Xem nào !

        Đầu tiên là các vòng lặp LOOPx của bạn tại sao lại kết thúc bằng return.Chỉ khi nào dùng lệnh call nhãn thì cuối nhãn đó bạn phải đặt lệnh return để nó quay trở về khi thực hiện xong.

        Trong mỗi vòng lặp LOOPx, bạn đều dùng lệnh GOTO LOOPx ở cuối.Nghĩa là với vòng lặp LOOP1 đầu tiên nếu viết đúng thì nó cứ lặp đi lặp lại những gì trong vòng lặp này chứ có nhảy tới vòng lặp LOOP nào khác nữa đâu.

        Từ Nhãn SET_PORTS trở đi là OK rồi.

        Bạn xem kĩ nhé!
        Ngày mai bắt đầu từ ngày hôm nay

        Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
        http://www.picvietnam.com/forum//showthread.php?t=1263

        Comment

        • nhh
          Đệ tử 9 túi
          • Feb 2006
          • 174

          #5
          À ! Còn một lỗi cực kì quan trọng khiến chương trình mô phỏng của bạn bị tịt ngòi.

          Đoạn cuối cùng code của bạn:
          Code:
          ;..........................................TAO HAM DELAY...................................;
          DELAY
          		CLRW	
          		MOVLW		B'10110100'
          		MOVWF		REG_L
          		DECFSZ		REG_L
          		RETURN
          ;.............................................................................................;
          		END
          Lệnh DECFSZ (Decrement F skip if zero):có cấu trúc như sau:
          DECFSZ bien,d
          LENH1
          LENH2
          Lệnh này sẽ giảm bien xuống 1 đơn vị, nếu bien khác 0 thì LENH1 được thực thi, nếu bien bằng 0 thì LENH1 được bỏ qua, nghĩa là LENH2 được thực thi.

          d nhận một trong hai giá trị 0 hoặc 1
          Nếu d=0, kết quả giảm bien se được lưu vào thanh ghi W (bien -> W),
          Nếu d=1, kết quả giảm bien sẽ được lưu vào bien (bien -> bien)
          Last edited by nhh; 03-06-2006, 05:03 PM. Lý do: = mistake
          Ngày mai bắt đầu từ ngày hôm nay

          Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
          http://www.picvietnam.com/forum//showthread.php?t=1263

          Comment

          • thang0105
            Nhập môn đệ tử
            • Jun 2006
            • 4

            #6
            Hay quá, vậy mà mình cứ tìm hoài không ra, để mình thử lại xem sao rồi nhắn lại cho anh em biết nhé. Cảm ơn bạn "nhh" nhiều.

            Comment

            • thang0105
              Nhập môn đệ tử
              • Jun 2006
              • 4

              #7
              Ban "nhh" cho mình hỏi tiếp nhé. Mình đã chỉnh sửa lại đoạn code rồi. Mình có gởi kèm đoạn code cho bạn xem đấy. Mình đã bỏ phần: Tạo hàm Delay, mà thay vào đó là viết luôn vào các Loop, tuy nhiên trình biên dịch MPLAB vẫn còn báo lỗi. Lần này lại phải nhờ tiếp đến bạn "nhh" và các anh chị em nữa rồi, giúp đỡ anh em với nhé.
              Attached Files

              Comment

              • nhh
                Đệ tử 9 túi
                • Feb 2006
                • 174

                #8
                Nguyên văn bởi thang0105
                Ban "nhh" cho mình hỏi tiếp nhé. Mình đã chỉnh sửa lại đoạn code rồi. Mình có gởi kèm đoạn code cho bạn xem đấy. Mình đã bỏ phần: Tạo hàm Delay, mà thay vào đó là viết luôn vào các Loop, tuy nhiên trình biên dịch MPLAB vẫn còn báo lỗi. Lần này lại phải nhờ tiếp đến bạn "nhh" và các anh chị em nữa rồi, giúp đỡ anh em với nhé.
                Mình vừa edit lại bài gởi trên kia, có nhầm lẫn về sử dụng lệnh DECFSZ, những chỗ nào bạn sử dụng lệnh này thì phải sửa lại cho đúng.Ví dụ như sau:
                Code:
                LOOP1		
                        DECFSZ	REG_L,1            ;có thể thay số 1 bằng chữ F, số 0 bằng chữ W
                	GOTO	LOOP1
                	GOTO	LOOP2
                Một điều nữa trong phần SET_POTRTS, bạn khai báo còn lằn nhằn lắm.Tham khảo các set chân IO trong đoạn code sau:
                Code:
                        BCF 	STATUS,RP1
                	BSF 	STATUS,RP0 	; chon BANK 1 = cách xóa bit RP1, set bit RP0
                        CLRF	TRISA           ; toàn bộ PORTA là output nè.
                	MOVLW	b'11110000'	
                	MOVWF	TRISB		;Bit nào bằng 1, chân tương ứng là input, 
                				;ngược lại bằng 0 là output.Chân RB0 = output, RB6 = input,....	
                	BCF 	STATUS,RP0 	; chon BANK 0 = cách xóa bit RP0, xóa bit RP1; ở đây RP1 bằng 0 rồi nên không cần.
                Bạn phải nắm chắc phần này, nếu không sẽ gặp rắc rối lắm đó.Để viết được chương trình đèn giao thông, có led 7 thanh không phải đơn giản.Trước tiên bạn phải xuất nhập port thành thạo đã, tiếp đến là làm phần delay, tức tạo trễ.

                Chương trình sau sẽ làm sáng bừng 8 con led nối với portb của PIC6F84 qua 8 điện trở 220 Ohm:
                Code:
                ;====================================================================
                ;Auhor:		NHH
                ;Date:		10/02/06
                ;Hardware:	PIC16F84 
                		;XTAL 10MHz, PORTB noi voi 8 LED qua 8 dien tro 220Ohm 
                ;======================================================================
                	TITLE 		"ON-LED"
                	PROCESSOR	PIC16f84 
                	INCLUDE<P16f84.inc> 
                	__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _CPD_OFF &_LVP_OFF
                
                ;=========================CHUONG TRINH CHINH=========================
                	ORG 0x000
                	GOTO 	MAIN
                
                MAIN
                	BCF STATUS,RP1
                	BSF STATUS,RP0 		; select BANK 1
                	CLRF TRISB 		; PORTB output
                	BCF STATUS,RP0 		;  select BANK 0
                
                	MOVLW	d'255'
                	MOVWF	PORTB 		;  sáng 8 led đi nào!		
                	END
                Thật là đơn giản phải không!

                Còn đây là chương trình nhấp nháy 8 con led trong trường hợp trên, thời gian trễ là 1s
                Code:
                ;========================================
                ;Auhor:		NHH
                ;Date:		10/02/06
                ;Hardware:	PIC16F84 
                		;XTAL 10MHz, PORTB noi voi 8 LED qua 8 dien tro 220Ohm 
                ;========================================
                	TITLE 		"ON-OFF LED 1 SECOND"
                	PROCESSOR	PIC16f84 
                	INCLUDE<P16f84.inc> 
                	__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _CPD_OFF &_LVP_OFF
                ;=============================================================================	
                	COUNT1 EQU 0x20
                	COUNT2 EQU 0x21
                	COUNT3 EQU 0x22
                ;=========================CHUONG TRINH CHINH=========================
                	ORG 0x000
                	GOTO 	MAIN
                
                MAIN
                	BCF STATUS,RP1
                	BSF STATUS,RP0 		; select BANK 1
                	CLRF TRISB 		; PORTB output
                	BCF STATUS,RP0 		;  select BANK 0
                
                	MOVLW	d'255'
                	MOVWF	COUNT1		;<-COUNT1=255	
                	MOVWF	COUNT2		;<-COUNT2=255
                NEXT	
                	MOVLW	d'14'
                	MOVWF	COUNT3		;<-COUNT3=13
                	MOVLW	b'11111111'	;LED ON
                	MOVWF	PORTB
                	CALL	LOOP
                
                	MOVLW	d'14'
                	MOVWF	COUNT3		;<-COUNT3=13
                	MOVLW	b'00000000'	;LED OFF
                	MOVWF	PORTB	
                	CALL	LOOP
                	
                	GOTO	NEXT		
                ;========================CHUONG TRINH CON====================
                LOOP
                	DECFSZ	COUNT1,1
                	GOTO	LOOP
                	DECFSZ	COUNT2,1
                	GOTO	LOOP
                	DECFSZ	COUNT3,1
                	GOTO	LOOP		
                	RETURN
                		
                	END
                Chỉ cần bạn viết được chương trình nhấp nháy led như trên thì vấn đề của bạn đã được giải quyết rồi !
                Chúc học tốt nhé!
                Last edited by nhh; 03-06-2006, 05:59 PM. Lý do: Nothing
                Ngày mai bắt đầu từ ngày hôm nay

                Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
                http://www.picvietnam.com/forum//showthread.php?t=1263

                Comment

                • khoadang01
                  Nhập môn đệ tử
                  • Nov 2006
                  • 1

                  #9
                  chào các anh chị ,có ai có tai lieu ve vấn đề nay thi gưi cho em với , em đang làm đồ án mạch đèn giao thông do.cam ơn

                  Comment

                  • dunghpc
                    Đệ tử 2 túi
                    • Nov 2005
                    • 39

                    #10
                    Bác Nhh nên dùng ngắt Timer1 để viết cho chương trình nhấp nháy vừa ngắn gọn lại hiệu quả. Viết như vậy không xứng danh với đệ tử 9 túi.

                    Tại chương trình ngắt timer0 ta kiểm tra timer1 (Để tràn Timer1 là 0,5s)
                    để tạo ngắt Timer0 0,5ms (đối với thạch anh 4MHz) bạn đưa 0xa0 vào thanh ghi INTCON, đưa 0x80 vào thanh ghi Option_Reg. Để tạo tràn timer1 0,5s bạn đưa 0x31 vào thanh ghi t1con ngay đầu Init chương trình
                    ví dụ trong chương trình sử dụng ngắt Timer0, Dùng thạch anh trong Chip = 4Mhz.
                    Last edited by dunghpc; 09-11-2006, 05:19 PM.

                    Comment

                    • dunghpc
                      Đệ tử 2 túi
                      • Nov 2005
                      • 39

                      #11
                      ví dụ trong chương trình sử dụng ngắt Timer0, Dùng thạch anh trong Chip = 4Mhz.
                      ;---------------------------------------------------------------------
                      list p=pic16f627A, r=dec
                      #include <p16f627A.inc>
                      #include <Comm.h>
                      __CONFIG _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_CLKOUT & _LVP_OFF & _MCLRE_OFF

                      atris = 0x00
                      btris = 0x00

                      ;Files define

                      org 0x0 ; Khi reset chip
                      goto Init
                      org 0x4 ; Địa chỉ ngắt Timer0
                      nop
                      clrwdt ; cấm WD
                      btfsc pir1,tmr1if
                      call T1Int ; Có cờ tràn Timer1
                      bcf intcon,tmr0if ; Xóa cờ ngắt Timer0
                      T0End retfie ; Kết thúc chương trình ngắt Timer0
                      ;---------------------
                      T1Int bcf pir1,tmr1if
                      movlw 0xff
                      xorwf portb,f ; 8 Led nhấp nháy với tần số ~ 1Hz
                      return
                      ;---------------------
                      ;---------------------
                      Init call PortInit
                      call TimerInit
                      Loop
                      goto Loop
                      ;----------------------
                      ;----------------------
                      PortInit call rBank0
                      movlw 0x7
                      movwf cmcon ; All Pin are digital
                      movlw 0xf
                      movwf pcon
                      call rBank1
                      movlw 0x80
                      movwf option_reg ;Timer0 Interrupt ~ 0.5 ms
                      movlw atris
                      movwf trisa
                      movlw btris
                      movwf trisb
                      goto rBank0
                      ;------------------------
                      TimerInit movlw 0xa0
                      movwf intcon ; Ngắt Timer0
                      movlw 0x31
                      movwf t1con ; Tràn Timer1 = 0,5s
                      return
                      ;-------------------------
                      ;----------------------------
                      rBank0 bcf status,rp0
                      bcf status,rp1
                      return
                      ;---------------------
                      rBank1 bsf status,rp0
                      bcf status,rp1
                      return
                      ;---------------------
                      end
                      ;----------------------

                      Comment

                      • thongyloan
                        Nhập môn đệ tử
                        • Apr 2009
                        • 3

                        #12
                        ẹc
                        ai có mạch đèn giao thông có đếm ngược ko gởi dùm tui cái đi.Có led đếm ngược lun nghe .CẢM ƠN NHÌU NHÌU hEHHEHEHE

                        Comment

                        • andyhug
                          Đệ tử 1 túi
                          • Jun 2008
                          • 23

                          #13
                          Mạch đèn Giao Thông

                          Mình thấy chủ đề này không mới nhưng có nhiều bạn quan tâm, mới lục lại cái đồ án môn ngày xưa, post cho anh em đỡ phải mất thời gian mày mò, mạch này chạy ngon! Bây giờ bạn chỉ việc tập trung làm thêm phần giao tiếp máy tính cho phép thay đổi thời gian của các đèn là xong.
                          Attached Files
                          Last edited by andyhug; 11-04-2009, 10:00 PM.
                          Sống ở trên đời cần phải có một tấm lòng để gió cuốn đi!
                          xxxxxxxxxxxxxxxxxxx Trịnh Công Sơn xxxxxxxxxxxxxxxxxxx

                          Comment

                          • thongyloan
                            Nhập môn đệ tử
                            • Apr 2009
                            • 3

                            #14
                            ui cảm ơn bạn nhìu nha.mà bạn ơi bạn có đoạn mã nào viết bằng hợp ngữ không đầy đủ tí không pót dùm mình đi.Mình lần đầu lam nên chưa hiểu rõ lém.Híc

                            Comment

                            • andyhug
                              Đệ tử 1 túi
                              • Jun 2008
                              • 23

                              #15
                              Mình quen viết CCS C thôi, các tài liệu hướng dẫn hợp ngữ thì bạn tìm trong diễn đàn nhé, nhiều lắm!
                              Sống ở trên đời cần phải có một tấm lòng để gió cuốn đi!
                              xxxxxxxxxxxxxxxxxxx Trịnh Công Sơn xxxxxxxxxxxxxxxxxxx

                              Comment

                              Working...