Pic-thac Mac

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • chuabietgi
    Đệ tử 1 túi
    • Nov 2005
    • 17

    #1

    Pic-thac Mac

    ;================================================= ===========================
    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
    Đệ tử 3 túi
    • Sep 2005
    • 54

    #2
    Nguyên văn bởi chuabietgi
    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


    PHP Code:
    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
    Last edited by mafd_47a; 31-12-2005, 09:03 PM.

    Comment

    • mafd_47a
      Đệ tử 3 túi
      • Sep 2005
      • 54

      #3
      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
      PHP Code:
                                        ; 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 
      

      Comment

      • chuabietgi
        Đệ tử 1 túi
        • Nov 2005
        • 17

        #4
        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!

        Nho cac bac chi giup!Thanks!
        Last edited by chuabietgi; 14-01-2006, 09:21 AM.

        Comment

        • mafd_47a
          Đệ tử 3 túi
          • Sep 2005
          • 54

          #5
          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

          Comment

          • chuabietgi
            Đệ tử 1 túi
            • Nov 2005
            • 17

            #6
            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!

            Comment

            • nhh
              Đệ tử 9 túi
              • Feb 2006
              • 174

              #7
              Nguyên văn bởi chuabietgi
              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à!!!
              Ngày mai bắt đầu từ ngày hôm nay

              Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
              http://www.picvietnam.com/forum//showthread.php?t=1263

              Comment

              Working...