xin vui lòng giúp đỡ về Timer0 pic16F877A

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

 
Niedawno media poinformowały o sklepie internetowym Euro-24.com.pl, który inkasuje pieniądze, ale nie realizuje zamówień. W serwisie Opineo.pl klienci publikowali pełne emocji wpisy, prześcigając się w ostrzeżeniach przed zakupami w tym sklepie. Sprawą zajęła się policja, ale strona internetowa Euro-24.com.pl wciąż jest aktywna.

Read more...
 
Timer0 được tải với 20 và sẽ tính 235 x 128 = 30.080 hệ chúng tôi (gián đoạn sẽ xảy ra mỗi 30,08 ms).Vì vậy, để có được 1 s, bạn nên sử dụng 1s / 30.08ms = aprox 33 lần không phải 11 như bạn được sử dụng trong vòng này.

 
không sử dụng tmr0 gián đoạn ...
chỉ cần sử dụng chương trình con trễ ..........<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Cười" border="0" />
 
Thanks rkodaira
vì vậy nếu tôi hiểu, bạn hãy nhân 235 đếm của bộ đếm thời gian mà không được chăm sóc chu kỳ của DEC và GOTO?
Tôi nghĩ rằng nếu bạn sử dụng một prescaler bạn tính toán thời gian chu kỳ mới của bạn, và bạn giới thiệu tất cả các hướng dẫn để thời gian này chu kỳ mới ...?

Thanks xylynn quá, i am chỉ học tập vì vậy nó chỉ để thực hành trên timer0 vào lúc này, nhưng tôi vẫn còn quan tâm, những gì bạn có nghĩa là các chương trình con trì hoãn?

Cảm ơn

 
Trích:

vì vậy nếu tôi hiểu, bạn hãy nhân 235 đếm của bộ đếm thời gian mà không được chăm sóc chu kỳ của DEC và GOTO?

Tôi nghĩ rằng nếu bạn sử dụng một prescaler bạn tính toán thời gian chu kỳ mới của bạn, và bạn giới thiệu tất cả các hướng dẫn để thời gian này chu kỳ mới ...
?

 
Nó làm việc và tôi hiểu

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Cười" border="0" />

cảm ơn bạn

yes ihave được thực hiện một số thực hành với một số vòng quá: p

nhờ một lần nữa,, i mang về học tập của tôi anyway vì vậy tôi có thể đăng một số tin nhắn khá thường xuyên lol

bye cảm ơn bạn cả

 

Welcome to EDABoard.com

Sponsor

Back
Top