PDA

View Full Version : Mạch mô phỏng đèn giao thông


thang0105
02-06-2006, 11:49 PM
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):
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:
;.......................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
;...............................................HE T 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:;..........................................T AO 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)

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
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
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:
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:
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:
;================================================= ===================
;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
;========================================
;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ì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!

thongyloan
17-04-2009, 03:47 PM
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é.

bạn ơi mình đã thử với mạch của bạn bằng cách chạy trong chương trình proteus nhưng nó báo có ba lỗi.Mình cũng không biết phải sữa sao nữa.Híc.Lỗi như thế này bạn ah.Bạn xem thữ giúp mình được không nhé:
+ no model spectified for U (tuc là con 74138)
+no model specified for U#(tức là con 74239)
+sumilation.........quên mất
bạn thử tìm cach giúp dùm mình đi
Ah mà đoạn mã chạy trong proteus thì nó nói code đúng bạn ơi

forever4u
25-04-2009, 06:37 PM
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!

Anh có thể hướng dẫn thêm về cách sử dụng PCW nói chung và cách dịch từ file lập trình của anh sang file hex được không.
Cảm ơn anh rất nhiều

sonba
28-04-2009, 10:06 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):
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..................................;
lam on guip toi co ai co mach den giao thong chay nhu the nay hog <ve plc ha>
khi bat cong tac on thi den xanh sang truoc' 10s sau do den vàng sang 8s sau do den đỏ sáng 2s , ai giup toi di

sonba
28-04-2009, 10:08 AM
lam on guip toi co ai co mach den giao thong chay nhu the nay hog <ve plc ha>
khi bat cong tac on thi den xanh sang truoc' 10s sau do den vàng sang 8s sau do den đỏ sáng 2s , ai giup toi di

andyhug
28-04-2009, 11:25 AM
lam on guip toi co ai co mach den giao thong chay nhu the nay hog <ve plc ha>
khi bat cong tac on thi den xanh sang truoc' 10s sau do den vàng sang 8s sau do den đỏ sáng 2s , ai giup toi di

PLC thì bạn nên sang diễn đàn nào chuyên về món này, picvietnam chuyên về PIC thôi!

nguyentam_511
10-09-2009, 06:33 PM
anh nao co tai lieu lap tring bang hop ngu cho pic16f877a cho e voi!!!dag can gap !thank may a nha!

benzu
10-09-2009, 08:32 PM
anh t oi em moi hoc nam dau thoi.thay cho tap lam do an.gui cho em so do nguyen ly mach chay chu~ voi. vdu nhu:happy new year.em rat cam on. ^^!

manhphat007
11-09-2009, 08:28 AM
em mới học PIC 16F84 được mấy hôm nay, em đang gặp chút bối rối trong việc sử dụng hàm Delay.
Nếu em sử dụng Thạch anh có dao tần số dao động là 4Mhz thì chu khì máy sẽ là 1us phải ko ạ.vậy nếu em muôn tạo vòng trễ 10ms thì phải cần tới 10 000 chu kì máy phải ko ạ.em ko biết tính thế nào để có thể có một đoạn CODE chạy 10 000 chu kì.... các anh có thể viết dùm em ví dụ này được ko ạ ?

ketnoivungtau
11-09-2009, 05:22 PM
em mới học PIC 16F84 được mấy hôm nay, em đang gặp chút bối rối trong việc sử dụng hàm Delay.
Nếu em sử dụng Thạch anh có dao tần số dao động là 4Mhz thì chu khì máy sẽ là 1us phải ko ạ.vậy nếu em muôn tạo vòng trễ 10ms thì phải cần tới 10 000 chu kì máy phải ko ạ.em ko biết tính thế nào để có thể có một đoạn CODE chạy 10 000 chu kì.... các anh có thể viết dùm em ví dụ này được ko ạ ?

em sang hỏi anh hà đấy..hahaha

votinh1986
11-09-2009, 06:09 PM
tôi củng vậy không hiểu gì cả

manhphat007
11-09-2009, 10:25 PM
em sang hỏi anh hà đấy..hahaha

he he .... cám ơn bác đã chỉ đường nhé. nhưng mình tự viết được rồi. để mình tự viết theo suy nghĩ của mình nhé, nếu sai xin mọi người góp ý.


;=========
count = 0x0c
count1 = count+1

delay_10ms

movlw d'19'
movwf count

loop
decfsz count,1
goto loop1
goto next

loop1
movlw d'174'
movwf count1

loop2
decfsz count1
goto loop2
goto loop
netx.........
end

nguyenduynjnh
17-09-2009, 05:20 PM
chao mọi người. em mới học năm nhất .thầy cho làm đề án kĩ thuật số . chọn mãi em quyết định làm mạch đèn giao thông .
anh nào có tài liệu thì xin bỏ chút thời gian post lên dùm em với ?
chân thành cảm ơn .

lequocbao
17-09-2009, 10:00 PM
chao mọi người. em mới học năm nhất .thầy cho làm đề án kĩ thuật số . chọn mãi em quyết định làm mạch đèn giao thông .
anh nào có tài liệu thì xin bỏ chút thời gian post lên dùm em với ?
chân thành cảm ơn .
lấy cái nì về nghiên cứu!

lephucanh1508
19-10-2009, 10:01 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!

bạn có thể giúp mình viết cho mình đề tài này dc ko? thiết kế bộ đếm thứ tự sinh viên.
bạn giúp mình nhé...mail của mình: lephucanh1508@gmail.com
có gì bạn có thể liên lạc với mình nhé...thanks.

niem
03-03-2010, 04:01 PM
cảm ơn các anh em trong diễn đàm nhé!

heront
04-03-2010, 09:17 PM
tụi tui đang bắt viết bằng ASM đây.chán

nghiepngoc
16-03-2010, 10:01 PM
minh dang lam do an tot nghiep cung vve den giao thong. nhung khong su dung pic. ma de tai cua minh la dung con psoc cy8c27443. ba con nao co code chuong trinh cho psoc thi dup minh voi nha

taiphap
18-03-2010, 09:51 AM
nếu viết bằng code notepad thì có khác dzi không????
còn muốn gắn thêm bàn phím để điều khiển theo ý của mình thì cần làm thế nao???

taiphap
20-03-2010, 08:33 PM
anh em trong 4room đâu hết rùi nè

cuongcpr
24-03-2010, 01:09 AM
em cũng mới bắt đầu học về Asem,thầy bắt làm bt lớn dùng pic16f877a thiết kế mạch đèn giao thông,em còn lơ mơ quá ko biết bắt đầu từ đâu.hix

automatic_nd
24-03-2010, 12:21 PM
có bạn nào làm nhiều về led 7seg không pót lên giúp mình vài bài

luckyboy_tqh1
01-04-2010, 10:55 PM
ban co co mach dieu khien den gt o nga tu .giao tiep voi may tinh tu 6h-23h thi den xanh den do den vang sang .con thoi gian con lai chj co den vang nhap nhay!

hcmut.khoamaisi
11-10-2010, 10:58 PM
Ai thích thì down về tham khảo vậy.cái này mình tự làm cách đây cũng lâu rồichưa có giao tiếp với máy tính(vì trình độ lúc đó còn hạn chế :)).Bạn nào down về rồi sửa lại cho giao tiếp với máy tình rồi up lai cho anh em thi quá hay

/* Chuong Trinh den giao thong.Hien thi ra LCD.dung PIC16F877*/
#include "16f877.h"
#include "def_877a.h"
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(d)

#define RS RD0
#define RW RD1
#define E RD2
#define LCD PORTB //LCD duoc dieu khien qua PORTB
int i=0;
const unsigned char key[]="15141312111009080706050403020100"; //Khai bao chuoi dem 15s cho den giao thong
void comwrt(void) //ghi lenh ra LCD
{
RS=0;
RW=0;
E=1;
E=0;
delay_ms(1);
}

void datawrt(void) //ghi data ra LCD
{
RS=1;
RW=0;
E=1;
E=0;
delay_ms(1);
}

void initLCD(void) //Khoi tao gia tri dau cho LCD
{
LCD=0x38;
comwrt();
LCD=0x0C;
comwrt();
LCD=0x06;
comwrt();
delay_ms(1);
}
void state1_light() //cac trang thang cua den giao thong
{
output_high(PIN_D3);
output_low(PIN_D4);
output_low(PIN_D5);

}

void state2_light()
{

output_low(PIN_D3);
output_high(PIN_D4);
output_low(PIN_D5);

}
void state3_light()
{
output_low(PIN_D3);
output_low(PIN_D4);
output_high(PIN_D5);
}


void LCD_count() //dem thoi gian 15s cho cac den xanh-Do
{
While(i<=30)
{

LCD=key[i];
datawrt();
i=i+1;
LCD=key[i];
datawrt();
i=i+1;
delay_ms(1000); //xuat lan luot 2 ki tu ra LCD
LCD=0x01; //xoa man hinh LCD
comwrt();
delay_ms(1000); //phai delay thi lenh xoa man hinh moi xoa het duoc man hinh(rat Quan Trong(
}
}
void wait_yellow_light() //Dem thoi gian 3s cho den vang
{
LCD='0';
datawrt();
LCD='3';
datawrt();
delay_ms(1000);
LCD=0x01;
comwrt();
delay_ms(1000);

LCD='0';
datawrt();
LCD='2';
datawrt();
delay_ms(1000);
LCD=0x01;
comwrt();
delay_ms(1000);

LCD='0';
datawrt();
LCD='1';
datawrt();
delay_ms(1000);
LCD=0x01;
comwrt();
delay_ms(1000);

LCD='0';
datawrt();
LCD='0';
datawrt();
delay_ms(1000);
LCD=0x01;
comwrt();
delay_ms(1000);
}




void main(void)
{
While(1)
{
set_tris_B(0);
PORTB=0;
set_tris_D(0);
PORTD=0;
initLCD(); //khoi tao LCD

state1_light(); //xanh-do
LCD_count();
delay_ms(1000);
i=0;
state2_light(); //vang-vang
wait_yellow_light();
delay_ms(1000);
i=0;
state3_light(); //do-xanh
LCD_count();
delay_ms(1000);
i=0;
}
}


link phần cứng
http://www.mediafire.com/?stiskv0rp3t5s

cuongeuro
17-10-2010, 11:28 PM
andyhug co mach in va mach nguyen ly day du ko cho de tham khao voi,thanks so much

cuongeuro
19-10-2010, 11:04 AM
ban nao co so do nguyen ly mach dkhien den giao thong dung 8951 hay pic cung duoc+2 con 8255 ko?
minh dag lam do an ma chua co mach,mong moi nguoi giup do

nguyenthien2528
25-10-2010, 08:40 PM
giờ e mới có dịp làm mạch.
cám ơn các bạn đã chỉ dẫn, có gì thắc mắc, mọi người chỉ bảo nha!!!!
thanks

loveliandcute
27-10-2010, 09:48 PM
ai có thể giúp minh thiết kế mạch đèn giao thông sử dụng rơle điện từ va rơle thời gian tại ngã tư cái.thank nhìu

caubetiensi
17-11-2011, 01:28 PM
đây là mô hình đèn giao thông, anh em tham khảo video
http://youtu.be/Ml_pMz1BAAk

thanh.them29
26-02-2012, 03:26 PM
thank nhe may pac..!

duybeo1512
28-03-2012, 07:26 PM
có bác nào viết bằng mikro C không cho anh em xin với.anh em cũng đang cần mạch đèn giao thông thực từ 22h đến 5h chỉ nháy đèn vàng thôi!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

thaihevip
18-05-2012, 12:11 PM
Hiện nay mình có làm nhiều mạch điện tử rất hay.Các bạn xem dưới đây nhé
*Nhận làm mạch theo yêu cầu của các bạn
1.Mạch giải mã tín hiệu remote sony và code lập trình có cả C và asembly
2.Mạch giải mã pt2248/pt2249 và code lập trình
3.Mạch giải mã pt2262/pt2272 và code lập trình
4.Mạch điều khiển RF từ 4->15 kênh
5.Thiết kế mạch hạ áp trực tiếp không dùng biến áp
6.Dạy lập trình vi điều khiển và vi xử lý
7.Dạy vẽ đồ thị hàm số,vẽ vật thể,vẽ hệ mặt trời,...,bằng pascal,C,C++,C# và VB
8.Dạy C/C++/C# và Pascal,bổ xung VB
9.Lập trình tạo hiệu ứng led đơn,thay đổi cường độ sáng của led
10.Lập trình điều khiển hệ thống đèn giao thông có các phím đặt thời gian và chọn chế độ ưu tiên,chế độ ngày đêm.
11.Lập trình tạo chữ chạy trên led ma trận
12.Lập trình đếm sản phẩm
13.Lập trình đồng hồ số giờ,phút,giây có các phím đặt thời gian và có chế độ hẹn giờ
14.Lập trình giao tiếp máy tính với vi điều khiển
15.Nhận thiết kế và thi công đồ án,hộ trợ kiến thức phần cứng
16.Dạy làm mạch in trên protues
....
*Địa chỉ liên hệ
-Tên: Thái Xuân Huệ
-Lớp: ĐK-ĐĐT3A
-Trường: Đại học sư phạm kỹ thuật nam định
-Mail: thaihe@zing.vn
-Website: love.easyvn.com/thaihe
-Phone: 0166.495.0193