PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   PIC - Thiết kế và Ứng dụng (http://www.picvietnam.com/forum/forumdisplay.php?f=23)
-   -   Mạch mô phỏng đèn giao thông (http://www.picvietnam.com/forum/showthread.php?t=450)

thang0105 02-06-2006 11:49 PM

Mạch mô phỏng đèn giao thông
 
2 Attachment(s)
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é.

nhh 03-06-2006 10:37 AM

Đâ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..................................;


nhh 03-06-2006 10:38 AM

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


nhh 03-06-2006 10:50 AM

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é!

nhh 03-06-2006 11:15 AM

À ! 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:
Trích:

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)

thang0105 03-06-2006 01:51 PM

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.

thang0105 03-06-2006 02:29 PM

1 Attachment(s)
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é.

nhh 03-06-2006 06:56 PM

Trích:

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é!

khoadang01 09-11-2006 02:29 PM

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

dunghpc 09-11-2006 05:13 PM

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.

dunghpc 09-11-2006 05:18 PM

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
;----------------------

thongyloan 11-04-2009 11:31 AM

ẹ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

andyhug 11-04-2009 10:54 PM

Mạch đèn Giao Thông
 
2 Attachment(s)
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.

thongyloan 12-04-2009 11:09 AM

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

andyhug 13-04-2009 12:00 AM

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!


Múi giờ GMT. Hiện tại là 06:03 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam