M
mickbristol
Guest
hello, i am mới về PIC.Tôi cố gắng để chuyển led trên cổng D bằng cách sử dụng timer0 và prescaler để đạt 1 giây.
xin vui lòng cho tôi, nếu im đúng sai.
i sử dụng một tinh thể 8MHz.
do đó chu trình giảng dạy là 1 / (8000000 / 4) = 500ns,
bằng cách sử dụng một prescaler tại 256.chu kỳ của tôi trở thành 500ns x 256 = 128us
i sẽ làm chu kỳ 235 trên thử nghiệm của INTCON, 2
và 235 x 2 trên GOTO sau
i sẽ làm LOOP 11 lần và cộng với additionnal hướng dẫn nên có vài i
(235x2) (235) 10 = 715
715x11 vòng = 7.865 chu kỳ
7865x128us = 1,00672 thứ hai
nhưng trên tàu phát triển của tôi .. nó là nhanh hơn nhiều!i sẽ nói 0,5 giây
bất cứ ai có thể đúng nơi là do lỗi của tôi?
cảm ơn bạn rất nhiều
ở đây là mã
danh sách p = 16F877A
# include P16F877A.inc
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_OFF & _CPD_OFF & _LVP_OFF & _PWRTE_OFF & _BODEN_OFF & _WDT_OFF & _HS_OSC
org 0x0000
LOOP equ 0x20
goto chính
chính
banksel PORTD
clrf PORTD; rõ ràng cảng D
banksel TRISD; ngân hàng 1
movlw b'00000000 '; nạp 0000 0000
movwf TRISD; dẫn đầu ra portD
bcf OPTION_REG, 5; nội bộ đồng hồ
bcf OPTION_REG, 3; prescale để TMR0
bsf OPTION_REG, 0; prescaler lúc 1:256
bsf OPTION_REG, 1
bsf OPTION_REG, 2
L1
banksel LOOP
movlw d'11 '
movwf LOOP
L2
banksel TMR0; Bank0
movlw d'20 '; sạc 0001 0100
movwf TMR0; trong TMR0
bcf INTCON, 2; rõ ràng cờ
L3 btfss INTCON, 2; thử nghiệm của lá cờ timer0
goto L3
decfsz LOOP, 1; Tháng Mười Hai LOOP bởi 1 và bỏ qua tiếp theo InStr nếu LOOP = 0
goto L2
comf PORTD; bổ sung PORTD
goto L1; đi đến LOOP
cuối
xin vui lòng cho tôi, nếu im đúng sai.
i sử dụng một tinh thể 8MHz.
do đó chu trình giảng dạy là 1 / (8000000 / 4) = 500ns,
bằng cách sử dụng một prescaler tại 256.chu kỳ của tôi trở thành 500ns x 256 = 128us
i sẽ làm chu kỳ 235 trên thử nghiệm của INTCON, 2
và 235 x 2 trên GOTO sau
i sẽ làm LOOP 11 lần và cộng với additionnal hướng dẫn nên có vài i
(235x2) (235) 10 = 715
715x11 vòng = 7.865 chu kỳ
7865x128us = 1,00672 thứ hai
nhưng trên tàu phát triển của tôi .. nó là nhanh hơn nhiều!i sẽ nói 0,5 giây
bất cứ ai có thể đúng nơi là do lỗi của tôi?
cảm ơn bạn rất nhiều
ở đây là mã
danh sách p = 16F877A
# include P16F877A.inc
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_OFF & _CPD_OFF & _LVP_OFF & _PWRTE_OFF & _BODEN_OFF & _WDT_OFF & _HS_OSC
org 0x0000
LOOP equ 0x20
goto chính
chính
banksel PORTD
clrf PORTD; rõ ràng cảng D
banksel TRISD; ngân hàng 1
movlw b'00000000 '; nạp 0000 0000
movwf TRISD; dẫn đầu ra portD
bcf OPTION_REG, 5; nội bộ đồng hồ
bcf OPTION_REG, 3; prescale để TMR0
bsf OPTION_REG, 0; prescaler lúc 1:256
bsf OPTION_REG, 1
bsf OPTION_REG, 2
L1
banksel LOOP
movlw d'11 '
movwf LOOP
L2
banksel TMR0; Bank0
movlw d'20 '; sạc 0001 0100
movwf TMR0; trong TMR0
bcf INTCON, 2; rõ ràng cờ
L3 btfss INTCON, 2; thử nghiệm của lá cờ timer0
goto L3
decfsz LOOP, 1; Tháng Mười Hai LOOP bởi 1 và bỏ qua tiếp theo InStr nếu LOOP = 0
goto L2
comf PORTD; bổ sung PORTD
goto L1; đi đến LOOP
cuối