PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 10-12-2009, 09:33 AM   #1
aka
Nhập môn đệ tử
 
Tham gia ngày: May 2007
Bài gửi: 9
:
Xin hỏi về ngắt timer0 PIC6F877A!!! giúp e với !!!!

e được biết là khi timer0 tràn thi nhảy vào ngắt, nhưng khi nào thì nó đếm tiếp? khi thực hiện xong ngắt hay là khi vừa nhảy vào ngắt?
e mới học nên kô rõ lắm chỗ nay, xin các cao thủ chỉ giáo?
aka vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-12-2009, 10:26 AM   #2
phamminhtuan
Super Moderator
 
phamminhtuan's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 150
:
Trích:
Nguyên văn bởi aka View Post
e được biết là khi timer0 tràn thi nhảy vào ngắt, nhưng khi nào thì nó đếm tiếp? khi thực hiện xong ngắt hay là khi vừa nhảy vào ngắt?
e mới học nên kô rõ lắm chỗ nay, xin các cao thủ chỉ giáo?
Khi còn được cấp dao động và còn cho phép Timer 0 chạy thì nó sẽ đếm
phamminhtuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-12-2009, 10:44 AM   #3
aka
Nhập môn đệ tử
 
Tham gia ngày: May 2007
Bài gửi: 9
:
E biết vậy nhưng ý e hỏi là khi nó đang thực hiện ngắt thì nó có đếm không hay là khi thực hiện xong ngắt và trở về chương trình chính nó mới đếm tiếp ?

ngắt của e nó thế này :
Code:
void timer0()
{
set_timer0(6); // T = 16*(256 - 6)*0.2us = 800us (ne^'u dùng tha.ch anh 4M thi thay 0.2us thành 1us)
++count;
      set_adc_channel(0); // RA0/AN0(Pin2) is analog input channel
      delay_us(10);
      ap_adc=read_adc();
      ap_dc=ap_dc+ap_adc;
      set_adc_channel(1);
      delay_us(10);
      dong_adc=read_adc();
      dong_dc=dong_dc+dong_adc;
      power=(ap_adc-v_offset)*(dong_adc-i_offset);
      value=power+ value;
 if(count==625) //800*200=240000
   {
   count=0;
      v_offset=ap_dc/625;
      i_offset=dong_dc/625;
      power_tb=(value/625)*1.13;            //Ki=480
                                                  //Kv=639
                                                //power_tb=(ap_adc*Kv*(5/1024))*(dong_adc*Ki*(5/1024))
      
      power_sum=power_tb*0.5/(3600*1000); //power_tb*0.2/(3600*1000) __10 chu ky
      temp=power_sum+temp;
      if(temp>=0.001) 
      {
         sum=sum+temp;
         temp=temp-0.001;
         RB7=1;
         delay_ms(20);
         RB7=0;
      }
   ap_dc=0;
   dong_dc=0;
   value=0;
   }
}

thay đổi nội dung bởi: phamminhtuan, 10-12-2009 lúc 11:15 AM. Lý do: Định dạng code
aka vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-12-2009, 11:18 AM   #4
phamminhtuan
Super Moderator
 
phamminhtuan's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 150
:
Có nghĩa là khi con PIC còn chạy thì vẫn còn dao động, cho dù CPU có làm việc gì đi chăng nữa, nếu Timer0 vẫn được cho phép thì nó vẫn cứ tiếp tục đếm.

Trả lời chính xác câu hỏi của bạn là "Trong ngắt Timer 0 vẫn đếm"

Tuy nhiên, dùng delay tới 20ms trong ngắt như chương trình của bạn thì cho dù Timer 0 có tràn tiếp 1 lần nữa nó vẫn không gây ra ngắt, vì khi vào Ngắt, GIE bị xóa che các ngắt khác
phamminhtuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-12-2009, 11:28 AM   #5
aka
Nhập môn đệ tử
 
Tham gia ngày: May 2007
Bài gửi: 9
:
cảm ơn bạn nhiều, mình hiểu rồi, mình sẽ đem delay ra ngoài ngắt !
aka vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-12-2009, 02:46 PM   #6
nghia_tdh21
Đệ tử 3 túi
 
nghia_tdh21's Avatar
 
Tham gia ngày: Oct 2006
Bài gửi: 46
:
Ở trong chương trình phục vụ ngắt không nên đặt lời gọi một hàm hay thủ tục nào đó mà mình đã sử dụng trong chương trình. Tốt nhất là bạn nên đặt các biến dạng cờ hay tăng giảm giá trị nào đó thôi. Nếu mình dùng hàm hay thủ tục nào đó đã sử dụng chỗ khác vào trong trình phục vụ ngắt thì trình dịch sẽ thông báo reentrancy
__________________
http://www.hieunghia.info
Lướt web thoải mái với USB3G của Viettel
http://www.hieunghia.info/tin-cong-n...3g-vietel.html
-----------------------------------------------------------------------------------
Một chút giận,hai chút tham,lận đận cả đời ri cũng khổ.
Trăm điều lành,ngàn điều nhịn,thong dong tấc dạ rứa mà vui
nghia_tdh21 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam