Đây là chương trình ngắt timer0 hay làm:
Mình sử dụng ccs c. Nhưng khi lập trình cho con vdk 16f54 thì ko biết cách gọi ngắt timer của con vdk này. Có bác nào biết xin chỉ giúp.
Nó ko cho khai báo những hàm như sau:
- enable_interrupts(INT_TIMER0);
- enable_interrupts(global);
Nó chi cho sử dụng hàm sau:
- setup_TIMER_0(RTCC_INTERNAL );
- set_timer0();
get_timer0();
Vậy thì ko biết nên sử dụng thế nào nữa. Khi nào thì ngắt timer sẽ tràn.
Mình có thể làm như thế này ko:
if (get_timer0()=100) { work... }
HTML Code:
#int_timer0
void interrupt_timer0()
{
set_timer0(6);
++count;
if(count == 2000) // 2000*500us = 500000us = 1s
{
count=0;
rotate_left(&a,1);
}
}
//Chuong trinh chinh
void main(void)
{
set_tris_b(0);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(global);
set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us
a = 0x01;
while(true)
{
PORTB = a;
}
}
Mình sử dụng ccs c. Nhưng khi lập trình cho con vdk 16f54 thì ko biết cách gọi ngắt timer của con vdk này. Có bác nào biết xin chỉ giúp.
Nó ko cho khai báo những hàm như sau:
- enable_interrupts(INT_TIMER0);
- enable_interrupts(global);
Nó chi cho sử dụng hàm sau:
- setup_TIMER_0(RTCC_INTERNAL );
- set_timer0();
get_timer0();
Vậy thì ko biết nên sử dụng thế nào nữa. Khi nào thì ngắt timer sẽ tràn.
Mình có thể làm như thế này ko:
if (get_timer0()=100) { work... }
Tuy nhiên vì ít tài nguyên nên cũng rất thú vị khi áp dụng các kỹ thuật lập trình đa nhiệm của hệ điều hành thời gian thực (mutex, semaphore ...) Với các dòng PIC mạnh hơn thì lại chả cần.

Comment