PDA

View Full Version : các bác giúp em với


vatit
18-07-2007, 08:40 AM
em là tân binh, rất thích về tự động, em có tìm hiểu về PIC và hiện đang dùng PIC16F84A, lập trình và biên dịch ổn, chỉ có mỗi khi đưa vào mạch in thì lại không chạy mà có lúc chạy lúc không chạy, chán quá , có bác nào có một chương trình hoàn chỉnh ( cả code và mạch ) chỉ cho em với. xin chân thành cảm ơn

thaithienanh
18-07-2007, 06:38 PM
http://www.picvietnam.com/forum/showthread.php?p=7488#post7488

Bạn xem coi có giống giống sự cố này không nhá nếu giống thì cách khắc phục đã có luôn rùi đó :)

vatit
19-07-2007, 01:33 AM
đúng rồi, cảu mình cũng tỏng tình trạng chạmm tay vào mới chạy, và còn một lỗi nữa là mình lập trình cho 2 leg nhấp nháy luân phiên nhau thì chỉ nhấp nháy có một led, lep kia không có hiện gì, do nguyên nhân vì sao nhỉ

namqn
19-07-2007, 02:58 AM
đúng rồi, cảu mình cũng tỏng tình trạng chạmm tay vào mới chạy, và còn một lỗi nữa là mình lập trình cho 2 leg nhấp nháy luân phiên nhau thì chỉ nhấp nháy có một led, lep kia không có hiện gì, do nguyên nhân vì sao nhỉ
Bạn post code của bạn lên đi, tôi cho rằng bạn đang gặp tình huống bị ảnh hưởng bởi hoạt động read-modify-write của các lệnh mà bạn đang dùng.

Thân,

vatit
19-07-2007, 10:46 PM
đaay là code cảu mình :
LIST P=16F84A
INCLUDE P16F84A.INC
REG_L EQU 0x0C
REG_M EQU 0x0B
REG_H EQU 0x0D
ORG H'00'

MAIN BSF STATUS,5
MOVLW 0x00
MOVWF TRISB
BCF STATUS,5
BATDAU MOVLW B'00000001'
MOVWF PORTB
CALL DELAY05S
CALL DELAY05S
CALL DELAY05S
MOVLW B'00000010'
MOVWF PORTB
CALL DELAY05S
CALL DELAY05S
CALL DELAY05S
GOTO BATDAU

DELAY05S CLRF REG_L
CLRF REG_M
MOVLW H'02'
MOVWF REG_H
LOOP NOP
DECFSZ REG_L
GOTO LOOP
NOP
DECFSZ REG_M
GOTO LOOP
NOP
DECFSZ REG_H
GOTO LOOP
RETURN
END

huybo02
19-07-2007, 11:49 PM
đaay là code cảu mình :

LIST P=16F84A
INCLUDE P16F84A.INC
REG_L EQU 0x0C
REG_M EQU 0x0B
REG_H EQU 0x0D
ORG H'00'

MAIN BSF STATUS,5
MOVLW 0x00
MOVWF TRISB
BCF STATUS,5
BATDAU MOVLW B'00000001'
MOVWF PORTB
CALL DELAY05S
CALL DELAY05S
CALL DELAY05S
MOVLW B'00000010'
MOVWF PORTB
CALL DELAY05S
CALL DELAY05S
CALL DELAY05S
GOTO BATDAU

DELAY05S CLRF REG_L
CLRF REG_M
MOVLW H'02'
MOVWF REG_H
LOOP NOP
DECFSZ REG_L
GOTO LOOP
NOP
DECFSZ REG_M
GOTO LOOP
NOP
DECFSZ REG_H
GOTO LOOP
RETURN
END


Trong 16F84 thanh ghi ở địa chỉ 0x0B là thanh ghi INTCON dùng để thiết lập chức năng ngắt cho PIC. Bạn dùng nó như một thanh ghi dữ liệu sẽ có nhiều rắc rối. Và ở đây khi thay địa chỉ 0x0B (REG_M EQU 0x0B) thành 0x0E thì mạch nháy 2 LED.
Bạn nên đọc thêm datasheet để biết thêm về các thanh ghi đặt biệt và các cách sử dụng nó.
Có gì mọi người bổ xung thêm.

bien_van_khat
20-07-2007, 10:34 AM
Mình ko thấy bạn cấu hình cho chip ở đâu cả.

Nếu bạn để mặc định, bộ dao động sẽ là RC bạn mắc thạch anh sẽ ko bao giờ chạy.

Vùng ram đa mục đích của con 84A bắt đầu từ 0x0C (datasheet, data memory organization), thanh ghi 0x0B là SFR bạn sử dụng nó làm biến sẽ làm chương trình chạy sai trong nhiều trường hợp.

Nhưng theo mình lý do chính khiến ct của bạn chỉ chớp 1 led là Watchdog, bạn ko cấu hình, mặc định watchdog on, chạy 1 thời gian nó reset chip, nên phần chương trình phía con led trên chân RB1 sẽ ko bao giờ được thực thi.

Bạn có thể cấu hình như sau:
__config _wdt_off & _xt_osc & _pwrte_on