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!
Mình không biết cách pót code mong moi người thông cảm!
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

namqn
e có chỗ chưa hiểu chưa biết sửa lỗi trong code của mạch làm đồng hồ như thế này(cái này e cũng tham khảo có chỉnh sửa thôi).mong các tiền bối chỉ giúp.xin đa tạ.hi.các bác giúp e nhé(e đang rất cần)
Comment