Chào mọi người!
Mình viết một chương trình đơn giản hiển thị số '1234' trên 4 LED 7 đoạn (dùng 7447 để giải mã) với PIC16F887 mà nó hiển thị đúng với PORTC, D, còn PORTB thì hiển thị số '1288'.
Nhưng nếu lấy kết quả ở PORTD đem qua PORTB thì lại đúng.
Mình đã kiểm tra phần cứng rồi (mạch không hề bị chạm ở PORTB), đã thử với con PIC mới khác luôn.
Mô phỏng trên Proteus thấy tốt trên cả 3 PORT.
PORTB chạy các ứng dụng khác bình thường.
Vậy mọi người xem giúp mình xem lí do tại sao?
Thanks everybody!
Code:
;---------------------------------------------------------------------------
List p=16f887
#INCLUDE <P16F887.INC>
__CONFIG _CONFIG1, _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC &_LVP_OFF
;THACH ANH 4MHZ
;CHUONG TRINH HIEN THI SO '1234' LEN 4 LED 7SEG DUNG 7447
;OK VOI PORT C, D
;O PORT B NO HIEN THI SO 1288 --> KHONG HIEU
;TRINH DICH MPLAB 8.14
;---------------------------------------------------------------------------
COUNT1 EQU 0X20
COUNT2 EQU 0X21
COUNT3 EQU 0X22
;---------------------------------------------------------------------------
ORG 0X0000
GOTO MAIN
MAIN
;KHOI TAO PORT
BANKSEL TRISB
CLRF TRISB
CLRF TRISC
CLRF TRISD
BANKSEL PORTB
;---------------------------------------------------------------------------
;BAT DAU CHUONG TRINH
START
MOVLW 0xE0 ;DONVI
MOVWF PORTB
MOVLW 0x04
IORWF PORTB,F
CALL DELAY1
MOVLW 0D0H ;CHUC
MOVWF PORTB
MOVLW 03H
IORWF PORTB,F
CALL DELAY1
MOVLW 0B0H ;TRAM
MOVWF PORTB
MOVLW 02H
IORWF PORTB,F
CALL DELAY1
MOVLW 070H ;NGAN
MOVWF PORTB
MOVLW 01H
IORWF PORTB,F
CALL DELAY1
GOTO START
DELAY1
MOVLW d'1'
MOVWF COUNT1
D1
MOVLW d'199'
MOVWF COUNT2
MOVLW d'1'
MOVWF COUNT3
DELAY0
DECFSZ COUNT2,1
GOTO $+2
DECFSZ COUNT3,1
GOTO DELAY0
DECFSZ COUNT1,1
GOTO D1
RETURN
END
Mình không biết cách pót code mong moi người thông cảm!