Mình thấy cai proteus hay hay. Lên làm một chương trình chạy thử

. Mình delay lâu(mắt thường có thể thấy được hiện tượng quét) thì thấy nó chạy đúng. Nhưng delay nhanh thì lại sai bét nhè

. Nhức đầu quá nên nhờ các bạn tư vấn

(
Code:
TITLE "P16F877A_REG1"
PROCESSOR P16F877A
INCLUDE <P16F877A.INC>
__CONFIG _CP_OFF & _CPD_OFF & _WRT_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
delay_reg1 equ 0x20
delay_reg2 equ 0x21
delay_reg3 equ 0x22
constant buflength = 8
variable j = 0
cblock 0x23 ; bo dem du lieu hien thi ra man hinh
bodem : buflength
endc
#define clock PORTB,0 ; xung kick hoat
#define dieukhien_quetcot PORTB,1 ; dieu khien xung quet cot
org 0x0000
goto Main
;org 0x0005
Main
banksel TRISB
bcf TRISB,0
bcf TRISB,1
banksel PORTB
bcf clock
bcf dieukhien_quetcot
banksel TRISD
clrf TRISD
banksel PORTD
clrf PORTD
; Dam bao an toan truoc khi di ^_^
j = 0
while j < 8
bcf dieukhien_quetcot
bsf clock
bcf clock
j += 1
endw
; Xoabodem
j = 0
while j<buflength
clrf bodem+j
j += 1
endw
;Load du lieu vao bo dem
j = 0
while j < buflength
movlw j
call Table0
movwf bodem+j
j += 1
endw
Hienthi
clrw
bsf dieukhien_quetcot
j = buflength-1
while j>=0
movf bodem+j,W
movwf PORTD
call Delay_10ms
bsf clock
call Delay_10ms
bcf dieukhien_quetcot
bcf clock
j -= 1
endw
goto Hienthi
Delay_10ms
movlw d'1'
movwf delay_reg1
Loop1
movlw 0xc7
movwf delay_reg2
movlw 0x01
movwf delay_reg3
Loop2
decfsz delay_reg2,1
goto Loop2
decfsz delay_reg3,1
goto Loop2
decfsz delay_reg1,1
goto Loop1
return
;org 0xc0
;Table1
; addwf PCL,1
; retlw b'11100111'
; retlw b'11110011'
; retlw b'11111001'
; retlw b'00000000'
; retlw b'00000000'
; retlw b'00000000'
; retlw b'00000000'
; retlw b'00000000'
org 0xe0
Table0
addwf PCL,1
retlw b'11111111'
retlw b'10000001'
retlw b'00000000'
retlw b'00111100'
retlw b'00000000'
retlw b'10000001'
retlw b'11111111'
retlw b'11111111'
end