PDA

View Full Version : Pic-thac Mac


chuabietgi
31-12-2005, 02:45 PM
;================================================= ===========================
ORG 0x0000
GOTO MAIN

ORG 0x0005
MAIN
BANKSEL TRISB
CLRF TRISB ; đặt portb là output

MOVLW D'255'
MOVWF COUNT_L ; COUNT_L là 1 byte

BANKSEL PORTB
LOOP BSF PORTB, 0
CALL DELAY
BCF PORTB, 0
CALL DELAY
GOTO LOOP

;================================================= ============================
; Các chương trình con
;================================================= ============================
DELAY DECFSZ COUNT_L, F
GOTO DELAY
RETURN

;================================================= ============================
GOTO $
END

mafd_47a
31-12-2005, 09:00 PM
Nếu tôi dùng 2 biến địa chỉ count1 và count2 sau khi đã nạp "255" vào 2 biến trên như sau


LOOP1 DECFSZ COUNT1, F
GOTO LOOP2
RETURN
LOOP2 DECFSZ COUNT2, W
GOTO LOOP2
GOTO LOOP1

Sau khi COUNT2 xuống 0,lệnh nhảy về LOOP1,rồi quay lại LOOP2
COUNT2 luc này có được 255 không?
Tôi viết và cho chạy SIM nhưng rất khó giải thích?
Phiền các bác giải giúp!


Đoạn Code bạn nói ở đây có phải là dùng cho hàm Delay đúng không

Nguyên tắc là như thế này

Tất nhiên là nó sẽ trở về 255 rồi vì câu lệnh tiếp theo nó sẽ tự dộng chuyển từ 0 đến 255.

Lưu ý đến ý nghĩa của lệnh Decfsz , lệnh này có tác dụng là trừ trước rồi mới check. Có nghĩa là nếu thanh ghi của bạn trước Decfsz bằng 1 thì nó sẽ kép, vì 1-1=0, và =0 nên nó sẽ nhảy

Còn nếu thanh ghi là 0 thì khi trừ 0-1 =255, khác 0

Chỉ đơn giản thế thôi

Àh còn một điều nữa là trong đoạn code của bạn sai lệnh goto main: phải sửa thành Return

mafd_47a
31-12-2005, 09:07 PM
Delay là hàm rất hay được sử dụng trong PIC đê thuận tiện bạn nên dùng hàm delay mẫu sau ( đoạn delay này có trong www.piclist.com )

Dung cho thach anh 4M

; Su dung thanh ghi r3,r2,r4
DELAY255 movlw 0xff ;delay 255 mS
goto D0
DELAY250 MOVLW .250
GOTO D0
DELAY100 movlw d'100' ;delay 100mS
goto D0
DELAY50 movlw d'50' ;delay 50mS
goto D0
DELAY20 movlw d'20' ;delay 20mS
goto D0
DELAY10 MOVLW D'10'
GOTO D0
DELAY5 movlw 0x05 ;delay 5.000 ms (4 MHz clock)
D0 movwf R2
D1 movlw 0xC7 ;delay 1mS
movwf R3
movlw 0x01
movwf R4
Delay_0
decfsz R3, f
goto $+2
decfsz R4, f
goto Delay_0

decfsz R2 ,f
goto D1
retlw 0x00

chuabietgi
14-01-2006, 09:16 AM
Xin hoi may bac!Cai mach nap PIC1 cua toi nap bang IC Prog!Sao khi verify ket thuc no luon bao "verify failed at address 0000h"Toi ktra chan ky lam roi.VDD-VSS van 5V! :mad:

Nho cac bac chi giup!Thanks!

mafd_47a
14-01-2006, 09:49 AM
Nguyên nhân theo mình là do cắm lỏng chân, tiếp xúc không tốt. Mình cũng rất hay bị như vậy bạn nên thử vài lần xem vị trí cắm thế nào cho hợp lý.

Còn một điều nữa bạn thử dùng WinPc800 để nạp thử xem. Cái này xài hay hơn đấy
( chọn chế độ ban đầu : bạn vào setting => hardware => chọn JDM Programmer trong mục selection of Hardware )
Mình thấy chương trình nạp này nhanh hơn nhiều và cũng ổn định hơn ICprog

Chúc bạn thành công

chuabietgi
15-01-2006, 07:57 AM
Tớ thử với WinPIC800,check hardware nó báo ERRORHardware is not responding.Detect PIC, nó pó tay luôn ko nhận ra chú 16F877A rất xinh đang nằm đó.Program all, nó cũng báo ERROR nốt.
Mà phải công nhận WinPIC800 nạp nhanh khủng khiếp! Tiếc quá chưa nạp được bác mafd_47a ơi!
Thanks!

nhh
12-02-2006, 12:28 PM
Tớ thử với WinPIC800,check hardware nó báo ERRORHardware is not responding.Detect PIC, nó pó tay luôn ko nhận ra chú 16F877A rất xinh đang nằm đó.Program all, nó cũng báo ERROR nốt.
Mà phải công nhận WinPIC800 nạp nhanh khủng khiếp! Tiếc quá chưa nạp được bác mafd_47a ơi!
Thanks!
Bạn có thế đem mạch nạp đến nơi bán để check lại mà!!!