PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   PIC - Thiết kế và Ứng dụng (http://www.picvietnam.com/forum/forumdisplay.php?f=23)
-   -   chương trình ngắt cho PIC16F877A (http://www.picvietnam.com/forum/showthread.php?t=7487)

thienngoc 03-12-2010 10:13 PM

chương trình ngắt cho PIC16F877A
 
1 Attachment(s)
em đang làm đề tài cảm biến nhiệt độ dùng pic 16f877a hiển thị lên 3 led 7 đoạn dùng ngôn ngữ C,jờ e muốn khi đến nhiệt độ 80*C thì chuông sẽ reo,nếu như vậy mình có cần sử dụng ngắt ko mấy anh và chương trình như thế nào?xin mấy anh giúp dùm,em cám ơn

thienngoc 03-12-2010 11:27 PM

có ai júp em với,đang cần lắm..hix

tomato2711 04-12-2010 12:03 AM

dùng ngắt hay ko thì tùy bạn, theo mình thì nên dùng ngắt, chương trình voi main() thì bạn viết cho nó hiển thị led và đọc ADC, bên trong ngắt thì bạn tạo xung PWM cho chuông nó reo.
trong void main() thì viết khai báo, hiển thị led va đọc ADC bình thường, để ngắt xảy ra thì Set bit GIE, vì ADC là ngoại vi nên Set them bit PEIE, sau đó sét bitADIE, và ngắt xảy ra khi ADIF = 1, việc muốn nó bao nhiêu thì ngắt là bạn quyết định.
cái sườn là vậy, bạn tự viết nhé!

thienngoc 04-12-2010 08:22 AM

anh có thể nói rõ hơn được ko?em mới học về pic nên ko rành về ngắt lắm...

tomato2711 04-12-2010 11:33 AM

em down datasheet của nó về xem phần sơ đồ interrupt ấy.
để sử dụng chương trình ngắt thì GIE=1, để ngắt ngoại vi (timer1, timer2, ADC...) thì bít PEIE=1, (nếu dùng ngắt Timer0 thi ko cần), và để ngắt ADC thì set ADIE=1;

stupid11 17-03-2011 10:42 PM

Trích:

Nguyên văn bởi thienngoc (Post 40565)
em đang làm đề tài cảm biến nhiệt độ dùng pic 16f877a hiển thị lên 3 led 7 đoạn dùng ngôn ngữ C,jờ e muốn khi đến nhiệt độ 80*C thì chuông sẽ reo,nếu như vậy mình có cần sử dụng ngắt ko mấy anh và chương trình như thế nào?xin mấy anh giúp dùm,em cám ơn

cái này không cần sử dụng ngắt ADC làm gì cho nó phức tạp....nếu mưốn chuông reO thỉ dung PWM ý tưởng là như thế này:
.....
.
.
x=read_ADC();
x=x*2.049 //nếu ADC ở chế độ 10bit và sử dụng LM35 ,,nếu dùng loại khác thì tính toán lại//


if(x>=80)
{
y=120 ; //giá trị này để cài dặt tần số để chuông reo..thường thì vài kHz
xuatxung(); //đưa giá trị y=120 vào duty của PWM =>XUẤT XUNG
}
else
{
y=0;
xuatxung(); //đưa 0 vào duty =>tắt xung
}
.
.
.
.
void xuatxung()
{
setup_ccp1(CCP_PWM);
set_pwm1_duty(y); //đưa giá trị duty vào đây
set_timer_2(t2_div_by_4,255,1)
}

chắc bạn đã hiểu ý mình rối chứ.chúc bạn thành công.


Múi giờ GMT. Hiện tại là 09:32 AM.

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