PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   lênh ép ngắt timer dùng ngôn ngữ C là gì (http://www.picvietnam.com/forum/showthread.php?t=6257)

hammecuala 01-05-2010 03:20 AM

lênh ép ngắt timer dùng ngôn ngữ C là gì
 
lúc trước học asm thì thẩyte6n PIC, timer có chức năng ép ngắt dùng lệnh: BSF PIR1,TMR1IF
Và lệnh cho timer chạy là :BSF T1CON,TMR1ON

hammecuala 01-05-2010 03:40 AM

múc đích của mình là muốn làm cái bài dùng timer1 nhưng chỉ khi mình bấm nút nhấn thì timer1 mới bắt đầu đếm và khi mình nhấn nút nhấn thứ 2 thì timer 1 phải ngưng đếm và nhảy vào chương trình ngắt

namqn 01-05-2010 10:12 AM

Trích:

Nguyên văn bởi hammecuala (Post 35604)
lúc trước học asm thì thẩyte6n PIC, timer có chức năng ép ngắt dùng lệnh: BSF PIR1,TMR1IF
Và lệnh cho timer chạy là :BSF T1CON,TMR1ON


đến khi hoc C thì chỉ thấy có lệnh cho timer chạy là: set_timer0()
còn lệnh ép ngắt thì kg có, mình tìm rồi thì có người nói là timer chay song song với chương trình nên kg thể can thiệp vào việc ngắt của nó dc

Xin các bẹn chỉ cho mình lệnh ép ngắt của timer dùng ngôn ngữ C

Bạn có thể viết TMR1IF = 1, với TMR1IF là bit TMR1IF trong thanh ghi PIR1 đã được trình dịch định nghĩa sẵn, hay bạn tự định nghĩa theo cú pháp mà trình dịch hỗ trợ.

Không rõ bạn đã học ngôn ngữ C chưa?

Thân,

hammecuala 01-05-2010 01:09 PM

mình đã học C rồi, dùng CCS nên có thể đọc hiểu code đc, nếu bạn có gì chỉ dẫn bằng chương trình C thì càng tốt, thanks.

xin cho hỏi là mình muốn làm 1 bộ đếm thời gian giữa 2 lần nhấn nút(thực ra nó là 2 công tắc hành trình) rồi sau đó xuất giá trị thời gian đó ra LCD, mong bạn có thể chỉ cho mình là dùng timer1 đếm thời gian dc kg, hay phải capture của PIC nữa. nếu bạn có chương trình luôn thì hay quá

hammecuala 01-05-2010 06:51 PM

nếu đc xin bac namqn qua trang này giup em với
http://www.picvietnam.com/forum/show...5611#post35611

tdm 02-05-2010 02:22 PM

Trích:

Nguyên văn bởi hammecuala (Post 35610)
mình viết code như sau, muc đích là khi mình nhấn công tắc rồi thì dãy đèn led nó mới bắt đầu chạy, nhưng nó mình làm thì nó lại chạy ngay cả khi mình chưa nhấn nút

#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#byte PORTB = 0x06

int16 count;
int8 a;
//Chuong trinh ngat TMR0
#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);
set_tris_a(0xff);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(global);
if(input(pin_A0)==0)
{
delay_ms(10);
set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us
a = 0x01;
}

while(true)
{
PORTB = a;
}
}

************************************************** ***
Trích:

Nguyên văn bởi hammecuala (Post 35610)
mình viết code như sau, muc đích là khi mình nhấn công tắc rồi thì dãy đèn led nó mới bắt đầu chạy, nhưng nó mình làm thì nó lại chạy ngay cả khi mình chưa nhấn nút

#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#byte PORTB = 0x06

int16 count;
int8 a;
//Chuong trinh ngat TMR0
#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);
adcon1=0x06;//them lenh nay de port A la che do I/O
set_tris_a(0xff);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(global);
if(input(pin_A0)==0)
{
delay_ms(10);
set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us
a = 0x01;
}

while(true)
{
PORTB = a;
}
}


ledinhloi 03-05-2010 06:39 PM

ngat ngoai
 
ban phai set tri x potb la (0xf1) thi moi chay duoc vi chan b0 la chan nhan nhan du lieu


Múi giờ GMT. Hiện tại là 03:27 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam