![]() |
|
Tài trợ cho PIC Vietnam |
PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: May 2010
Bài gửi: 3
: |
chương trình ngắt cho PIC16F877A
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
|
![]() |
![]() |
![]() |
#2 |
Nhập môn đệ tử
Tham gia ngày: May 2010
Bài gửi: 3
: |
có ai júp em với,đang cần lắm..hix
|
![]() |
![]() |
![]() |
#3 |
Đệ tử 2 túi
Tham gia ngày: Jan 2010
Bài gửi: 26
: |
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é! |
![]() |
![]() |
![]() |
#4 |
Nhập môn đệ tử
Tham gia ngày: May 2010
Bài gửi: 3
: |
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...
|
![]() |
![]() |
![]() |
#5 |
Đệ tử 2 túi
Tham gia ngày: Jan 2010
Bài gửi: 26
: |
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;
__________________
Càng học càng thấy ngu ra.(~.~)............... |
![]() |
![]() |
![]() |
#6 | |
Đệ tử 6 túi
|
Trích:
..... . . 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. |
|
![]() |
![]() |
![]() |
|
|