PDA

View Full Version : Đo mực nước sử dụng PIC


lhhaidangdn
20-09-2011, 07:33 PM
Mình có một vấn đề như thế này mong các bạn giúp đỡ.....
Phần cảm biến để đo mực nước thì mình đã giải quyết được bằng các BJT. Giờ tới phần lập trình mình vẫn không sao điều khiển được 4 cái Switch tương ứng với 4 mức nước. Cụ thể là:
- Khi không CB nào có tín hiệu thì Pic sẽ đóng nguồn bơm nước
- Khi ở mức nước thấp nhất CB1 có tín hiệu thì Pic nhận tín hiệu và xuất giá trị ra sẽ là E ra leb 7 đoạn
- Khi ở mức nước trung bình CB1 và CB2 có tín hiệu, Pic xuất giá trị là L
- Mức nước trung bình 2 thì CB1, CB2,CB3 có tín hiệu, Pic xuất H
- khi cả 4 CB có tín hiệu thì báo F và tắt bơm.
Đơn giản như vậy nhưng mà cái vấn đề quét cái tổ hợp cảm biến ấy sao mà lộn xộn quá mình lập trình mãi mà không được. Mình dùng Asembly. Bác nào pro giải quyết dùm với

KVLV
20-09-2011, 10:47 PM
bạn muốn người khác viết code cho bạn à? ít ra bạn cũng post code lên đây (Asembly) và sơ đồ. xài con chip gì đố ai biết?

longdv
21-09-2011, 06:43 PM
đơn giản là đưa 4 chân cảm biến đó vô chung 1 port rồi so sánh thôi.
ko thì so sánh kiểu khác. khi cảm biến dưới cùng không nhận thì ko cần xét gì nữa mà xuất E luôn . khi cảm biến dưới cùng nhận thì xét cảm biến thứ 2,nếu cảm biến này nhận luôn thì xuất L nếu ko thì vẫn xuất E...... cứ thế so sánh lên thôi.

đã dùng pic thì sao ko dùng ngôn ngữ cao cấp mà viết. viết ASM chi cho rối

lhhaidangdn
21-09-2011, 11:41 PM
Như bạn Longdv đã nói khi mình đưa vào một Port và tiến hành hỏi vòng như vậy mình cũng đã thực hiện. Khi CB1 có tín hiệu thì mình sẽ hỏi tiếp CB2.... Nếu CB2 không có tín hiệu thì sẽ xuất E, khi CB2 có tín hiệu thì sẽ xuất L; tuy nhiên khi đó thì PIC nó sẽ luân phiên nhau xuất tín hiệu E và L ra leb.. Xử lý việc đó bằng code ASM mìh làm mãi mà không được. Nếu làm bằng C thì dễ rồi

longdv
22-09-2011, 11:06 AM
viết ASM hay C thì cũng có chung một sơ đồ giải thuật thôi ma.
bạn phải so sánh các CB cho tới khi có được kết quả cuối cùng rồi mới xuất ra Led chứ.

lhhaidangdn
03-11-2011, 10:16 PM
Đã giải quyết xong. Đây là CODE ASEMBLY

processor p16f877a
include <p16f877a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF

;KHAI BAO BIEN
#DEFINE CB1 PORTB,0
#DEFINE CB2 PORTB,1
#DEFINE CB3 PORTB,2
#DEFINE CB4 PORTB,3
#DEFINE BOM PORTB,4
#DEFINE LED PORTB,5

;CHUONG TRINH CHINH
ORG 0X0000
GOTO START
START
BCF STATUS,RP1
BCF STATUS,RP0
CLRF PORTD
CLRF PORTB
BSF STATUS,RP0
MOVLW B'00001111'
MOVWF TRISB
MOVLW 0X00
MOVWF TRISD
BCF STATUS,RP0
CLRF PORTB
CLRF PORTD

;VONG LAP
LAP
BTFSS CB1
GOTO BAT_BOM
BTFSS CB2
GOTO XUAT_E
BTFSS CB3
GOTO XUAT_L
BTFSS CB4
GOTO XUAT_H
GOTO XUAT_F

BAT_BOM
MOVLW B'1000000'
MOVWF PORTD
BSF BOM
GOTO LAP
XUAT_E
MOVLW B'0000110'
MOVWF PORTD
GOTO LAP
XUAT_L
MOVLW B'1000111'
MOVWF PORTD
GOTO LAP
XUAT_H
MOVLW B'0001001'
MOVWF PORTD
GOTO LAP
XUAT_F
MOVLW B'0001110'
MOVWF PORTD
BCF BOM
GOTO LAP
END