Hướng dẫn bài 6 timer/counter 0

hoangvanloc

Học sinh trung cấp
#32
Anh cho e hỏi: nếu timer ngắt tràn sau 1ms, e viết hàm phục vụ trong chương trình ngắt tràn.nhưng nếu khi chương trình phục vụ ngắt đang chạy dở,mà timer lại tràn tiếp thì nó sẽ chạy nốt chương trình phục vụ ngắt trước hay nó bỏ qua và nhảy đến đầu chương trình ngắt tiếp theo ?
Nó phải thực hiện hết chương trình trong ngắt xong nếu có ngắt nó lại thực hiện tiếp. Như thế nếu k xong thì nó k màng đến chương trình chính đâu.
 

mta_cdt

Super Moderator
Thành viên BQT
#33
Anh cho e hỏi: nếu timer ngắt tràn sau 1ms, e viết hàm phục vụ trong chương trình ngắt tràn.nhưng nếu khi chương trình phục vụ ngắt đang chạy dở,mà timer lại tràn tiếp thì nó sẽ chạy nốt chương trình phục vụ ngắt trước hay nó bỏ qua và nhảy đến đầu chương trình ngắt tiếp theo ?
Bạn hiểu thế này, 10h sáng bạn ở nhà nấu cơm nhưng mà có điện thoại của gấu bạn nhấc lên nghe nếu mà tầm 1 2 phút thì ko sao, còn nếu bạn buôn đến vài tiếng thì đến bao giờ bạn nấu cơm tiếp được.
 

mta_cdt

Super Moderator
Thành viên BQT
#34
A Lành cho e hỏi ngoài lề 1 chút ạ :
Ví dụ e code cho atmega16.Trong cùng 1 PORTD,e muốn dùng chân PD0 và PD1 cho UART; dùng chân PD4 và PD5 cho PWM; còn lại dùng cho IN-OUT bình thường.Khai báo thanh ghi cho UART và PWM thì e không lăn tăn gì ; nhưng khi e muốn khai báo thanh ghi DDRD=0b11111111(hay đại loại là 1 giá trị DDRD khác) cho chức năng IN-OUT ở chân PD2,PD3,PD6,PD7 ; thì giá trị DDRD có bị ảnh hưởng đến các chân PD0,PD1(UART) và PD4,PD5(PWM) không ạ (e không dùng các chân PD0,PD1,PD4,PD5 cho chức năng IN-OUT nhưng lại bị thanh ghi DDR điều hướng chúng)?
Hay là e phải dùng từng bit theo kiểu sbi(DDRD,x) cho chân IN-OUT,còn các chân còn lại thì không viết gì ?
Cảm ơn a.
PWM đương nhiên là out còn uart tốt nhất bạn để nó mặc định đi. Bạn có thể set là DDRD=0b11111100; được có sao đâu nhỉ.
 

hua van binh

Học sinh phổ thông
#37
Giả sử mình dùng thạch anh 8MHZ. chu kỳ là 1/8MHZ= 0,125us
vậy 1s cần có 1s/0,125us=8 triệu xung
TCNT0 là thanh ghi 8 bit giá trị max là 255 cộng thêm 1 chu kỳ tràn từ 255 về 0 là 256. 8 triệu lớn hơn 256 rất nhiều vì vậy ta chọn bộ chia cao nhất 1024 lúc này ta cần 8000000/1024=7812.5 lấy tròn là 7813 xung
Nếu mà khởi tạo TCNT0=4 thì cần có 7813/(256-4)=31 31 lần tràn
với cái của mình xung vuông tần số 2MHz và thạch anh 8MHz tính như nào ạ
 

mta_cdt

Super Moderator
Thành viên BQT
#38
tần số 2MHZ thạch anh 8M thì chỉ có thể dùng PWM được thôi. còn dùng ngắt timer ko được đâu bạn nhé.
với cái của mình xung vuông tần số 2MHz và thạch anh 8MHz tính như nào ạ
 

Quảng cáo Google