Nguyên văn bởi jackychan
Xem bài viết
Timer - Watchdog - Dao động...
Collapse
X
-
ko có ADC thì có thể dùng ngắt ngoài để điều khiển. mỗi lần ngắt sẽ tăng 1 khoảng delay theo yêu cầu. khi delay đến một mức max thì quay về mức min. hoặc có thể dùng 2 nút ngắt. 1 nút tăng, 1 nút giảmLMD 238 Tăng Bạc Hổ - TP. Quy Nhơn.
-
gửi bạn đoạn chương trình sau tham khảo nhé.Nguyên văn bởi fcvanbachc1 Xem bài viếtem mới vào nghề,có bài sau muốn hỏi.em đang đọc về ngắt của con dspic,thử lập trình ngắt cho nháy đèn led từ 0-9 cho nó.chương trình của em gặp vấn đề thì phải,vì khi em thay đổi giá trị của PR1 thì thời gian nháy vẫn thế.nó vẫn nháy loạn lên.vậy mong các anh sửa giúp em với,và tư vấn cho em chút it về ngắt.sau đây là đoạn chương trình của em:
#define __dsPIC33FJ12MC202__
#include <p33fj12mc202.h>
int led[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6 7};
int i;
void _ISR _T1Interrupt(void)
{
_T1IF = 0;
}
main()
{
TMR1=0;
PR1=0x2625A; //cho phep ngat sau 1 giay
T1CON=0x8030; //chon ti le dem trc la 256
_T1IF=0; //xoa co ngat TMR1
_T1IE=1; //cho phep ngat
TRISB=0xff00;
while(1)
{
for (i=0;i<10;i++)
{
PORTB=led[i];
}
}
}
#include <p33FJ12MC202.h>
int led[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 8};
int i = 0;
//Cac prototype cho cac chuong trinh con
void Init_PORTS(void);
void Init_TMR1(void);
//Chuong trinh chinh
int main(void) {
Init_PORTS(); //Khoi tao cac cong I/O
Init_TMR1(); //Khoi tao Timer 1
while (1) { //Vong lap chinh
};
}
//Chuong trinh con khoi tao cac cong I/O, de noi voi LED
void Init_PORTS(void) {
PORTB = 0xffff;
TRISB = 0x0000; //LED noi vao chan RB, la ngo ra
}
//Chuong trinh con khoi tao Timer 1, tran sau moi 1 giay o muc xung 40 Mips
void Init_TMR1(void) {
TMR1 = 0x0000; //Xoa so dem trong TMR1
PR1 = 0x2625A; //Nguong tran la 1 giay tuong ung voi clock = 80 MHz
_T1IF = 0; //Xoa co ngat cua Timer 1
T1CON = 0x8030; //Dung fcy lam clock, prescale = 1:256
_T1IE = 1; //Cho phep ngat Timer 1
}
//chuong trinh ngat
void _ISR _T1Interrupt(void)
{
_T1IF = 0; //Xoa co ngat
if (i>9)
{i=0;}
else
{PORTB = led[i];
i++;
}
}
tôi đã test bằng protues thấy tạm ổn.nhưng theo tính toàn của tôi là trễ 1 giây nhưng lúc mô phỏng thì lên đến 2s thì phải.mong các cao thủ chỉ giáo thêm
Comment
-
watchdog mình cũng ko rành lắm.
giờ cho hỏi mình muốn reset thì có thể dùng ngắt được ko?
ko cần phải chờ tràn bộ nhớ gì cả.
VD : mình cài đặt ngắt TiMER ,khi ngắt xảy ra thì vào ngắt reset lại toàn bộ được ko?
nếu dc hay ko gì thì cũng cho hỏi khi reset wachdog cần set những bít nào. cách tính toán thời gian tràn ra sao? cho xin tài liệu tham khảo càng tốt
thanks!
Comment
-
Sử dụng được. Nhưng nó :Nguyên văn bởi Lenh Ho Xem bài viếtủa, em chưa thử nhưng vì WDT là một timer nên có thể sử dụng nó như một timer được không>
- Nó không ổn định di bộ dao động RC bị phụ thuộc môi trường => không thể làm bộ đếm+ hẹn giờ do ko chính xác.
- Nếu chương trình chạy ổn định thì timer không bao giờ tràn => không dùng được ngắt.
Vậy bạn muốn ứng dụng nó vào việc gì đây ?
Comment
Bài viết mới nhất
Collapse
-
bởi domar123Giải pháp toàn diện cho người dùng đa nhiệm
Nếu bạn đang cần một bộ máy vừa phục vụ công việc chuyên môn nặng vừa đáp ứng nhu cầu giải trí cao cấp, sự kết hợp giữa Ryzen 9 9950X TRAY và Radeon RX 9070 XT 16GB là lựa chọn...-
Channel: Đánh giá sản phẩm DTVN
hôm nay, 17:12 -
-
bởi lvhnKhác nhau là đi lái thuê hoặc chạy dịch vụ được
...
-
Channel: Tâm tình dân kỹ thuật
hôm nay, 15:50 -
-
bởi ittcHic, sao nhiều anh em khuyên là đàn ông đã học thì học luôn số sàn chứ đừng học số tự động anh....-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 17:46 -
-
bởi mèomướp1. Tìm hiểu đc thì càng tốt, bận thì thôi. Ko cần quá quan trọng
2. Số tự động cho đơn giản, kiểu như đi xe ga ấy ạ
3. Học lý thuyết tử tế ok
4.ok
5.có. đủ số km, tgian cầm lái là đc
6.đi ăn tập thể,...-
Channel: Tâm tình dân kỹ thuật
14-08-2026, 16:34 -

Comment