1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

lối ngắt timer0

Thảo luận trong 'Lập trình' bắt đầu bởi thiengiang872003, 2 Tháng bảy 2011.

  1. thiengiang872003 New Member

    Số bài viết: 4
    Đã được thích: 0
    Điểm thành tích: 0
    chào mọi người hiện giờ mình đang bắt đầu học pic nhưng bị lỗi mong các đàn anh giúp đỡ.
    em viết một chương trình đếm đơn giản từ 0->99.
    mà tại sao khi em gọi trong hàm delay nếu cho "d'50'" thì mạch chạy đúng nhưng khi cho những giá trị khác thì lại sai.
    mong các đàn anh giúp đỡ
    đây là mạch
    [IMG]

    Còn đây là code


    LIST P=16F877A
    #INCLUDE P16F877A.INC

    ; khai bao bien
    COUNT1 EQU 0x20
    COUNTA EQU 0x21
    COUNTB EQU 0x22
    HANGCHUC EQU 0x23
    HANGDONVI EQU 0x24
    W_SAVE EQU 0x25
    PCLATH_save EQU 0x26
    STATUS_save EQU 0x27
    FSR_SAVE EQU 0x28


    ORG 0x004
    GOTO ISR
    ISR ;CHUONG TRINH NGAT


    MOVWF W_SAVE
    SWAPF STATUS,W
    CLRF STATUS
    MOVWF STATUS_save
    MOVF PCLATH,W
    MOVWF PCLATH_save
    CLRF PCLATH
    MOVF FSR,W
    MOVWF FSR_SAVE

    BTFSS INTCON,TMR0IF
    GOTO exit_int
    BCF INTCON,TMR0IF



    ;------------------------------------------------
    ; CÁC THAO TÁC CHÍNH TRONG NGAT


    INCF HANGDONVI,1
    MOVLW 0x0A
    XORWF HANGDONVI,0
    BTFSS STATUS,Z
    GOTO exit_int
    CLRF HANGDONVI
    INCF HANGCHUC,1
    MOVLW 0x0A
    XORWF HANGCHUC,0
    BTFSS STATUS,Z
    GOTO exit_int
    CLRF HANGCHUC
    GOTO exit_int


    ;----------------------------
    ;ket thuc ngat
    exit_int
    MOVF FSR_SAVE,W
    MOVWF FSR
    MOVF PCLATH_save,W
    MOVWF PCLATH
    SWAPF STATUS_save,W
    MOVWF STATUS
    SWAPF W_SAVE,1
    SWAPF W_SAVE,0
    RETFIE


    ;----------------------------;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;----------------------------;
    ;chuong trinh chinh


    ORG 0x00
    GOTO MAIN
    ORG 0x050
    MAIN


    ;khoi taoj port


    BCF STATUS,RP1
    BSF STATUS,RP0
    MOVLW 0x00
    MOVWF TRISD
    MOVLW b'11111100'
    MOVWF TRISB
    BCF STATUS,RP0
    CLRF PORTD
    MOVLW b'00000011'
    MOVWF PORTB


    ; KHOI TAO TIME0
    CLRF TMR0
    CLRF INTCON
    BSF STATUS,RP0
    MOVLW b'10000001'
    MOVWF OPTION_REG
    BCF STATUS,RP0
    BSF INTCON,TMR0IE
    BSF INTCON,PEIE
    BSF INTCON,GIE


    ;khoi tao bien
    CLRF HANGCHUC
    CLRF HANGDONVI


    START
    CALL HIENTHI
    GOTO START


    HIENTHI
    MOVF HANGCHUC,0
    CALL TABLE
    MOVWF PORTD
    MOVLW b'11111101'
    MOVWF PORTB
    CALL DELAY
    CLRF PORTB

    MOVF HANGDONVI,0
    CALL TABLE
    MOVWF PORTD
    MOVLW b'11111110'
    MOVWF PORTB
    CALL DELAY
    CLRF PORTB
    RETURN


    TABLE
    ADDWF PCL,1
    RETLW 0xC0
    RETLW 0xF9
    RETLW 0xA4
    RETLW 0xB0
    RETLW 0x99
    RETLW 0x92
    RETLW 0x82
    RETLW 0xF8
    RETLW 0x80
    RETLW 0x90


    DELAY
    MOVLW d'1'
    MOVWF COUNT1
    d2 MOVLW 0xC7
    MOVWF COUNTA
    MOVLW 0x01
    MOVWF COUNTB
    delay_1
    DECFSZ COUNTA,1
    GOTO $+2
    DECFSZ COUNTB,1
    GOTO delay_1
    DECFSZ COUNT1,1
    GOTO d2
    RETURN
    END ; c
  2. cindar New Member

    Số bài viết: 105
    Đã được thích: 0
    Điểm thành tích: 0
  3. thiengiang872003 New Member

    Số bài viết: 4
    Đã được thích: 0
    Điểm thành tích: 0
  4. chanhvan08 New Member

    Số bài viết: 384
    Đã được thích: 0
    Điểm thành tích: 0
    Bạn vẽ cái lưu đồ cho mọi người xem được không, để còn có cái mà nhìn, chứ viết bằng asm mà nhìn code nản lắm!
  5. thiengiang872003 New Member

    Số bài viết: 4
    Đã được thích: 0
    Điểm thành tích: 0
    code thì nếu đặt d'50' thì chạy đúng nên chắc là code ko bị lỗi gì nhiều có lẽ mình thiếu lệnh nào đó thôi. nên mình mới gởi code nhờ anh em giúp.
    mạch thì chạy được nếu cho d'50' nhưng nếu ở giá trị khác thì hàng chục nó bị nhảy lung tung nên mình nghĩ là code sai.

Chia sẻ trang này