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-2008, 01:04 PM   #16
lequocbao
Đệ tử 6 túi
 
lequocbao's Avatar
 
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
:
Tại sao mình phải set_timer1(15536); tới 02 lần luôn vậy bạn?
Còn nữa ,nếu mình muốn dừng ngắt thì phải dùng khai báo:
disable_interrupt(global); phải không?nếu đúng thì mình phải đặt khai báo đó ở chổ nào?
lequocbao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-12-2008, 05:05 PM   #17
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
pic

NHƯ VẬY CON SỐ 2 Ở (T=2*(256-56)*1US)Ơ ĐÂU RA VẬY[/QUOTE]

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-12-2008, 04:37 PM   #18
lequocbao
Đệ tử 6 túi
 
lequocbao's Avatar
 
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
:
Pác tungtot_vl ơi!: pác coi hộ lại giúp cái ngắt timer0 1s của pác sao mà khi mở nguồn thì khoảng 30s sau ngắt mới làm việc vậy pác.Sau khi ngắt đã làm việc thì nhấn reset thì ngắt làm việc lại liền còn cúp nguốn thì chịu khó đợi 30s nữa.Vậy là nó bị trục trặc chổ nào phải không pác?
lequocbao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-12-2008, 05:20 PM   #19
crazy_baby
Nhập môn đệ tử
 
Tham gia ngày: Nov 2008
Bài gửi: 2
:
các pro xem giúp em cái code này với .mạch đồng hồ , hh:mm:ss , dùng ngắt timer0 nhưng không hiểu tại sao lại không xảy ra ngắt . code nè :
Code:
#include<16f877a.h>
#include<def_877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#device *=16 ADC=8
#use delay(clock=20000000)
int16 count;
int8 h10,h1,m10,m1,s10,s1,i;//khai bao bien gio,phut,giay
#int_TIMER0
void timer0()
{
set_timer0(6);
++count;
if(count==5000)
{
++s1;
      if(s1==9){
                s1=0;
                 ++s10;
                          if(s10==5)
                              {
                                  s10=0;
                                      ++m1;

                                             if(m1==9){
                                                  ++m10;
                                                      m1=0;
                                                            if(m10==5){
                                                                  m10=0;
                                                                  ++h1;
                                                                  if(h1==2){h1=0;
                                                                     ++h10;
                                                                     if(h10==1){h10=0;}
}
}
}

}
}
count=0;

}



}
void main()
{
trisd=0x00;
trise=0x00;
s1=0;
s10=0;
m1=0;
m10=0;
h1=0;
h10=0;
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
enable_interrupts(global);


while(1)
{
i=0;
for(i=0;i<=5;i++)
{
porte=i;
switch(i)
{
case 0: portd=h10;break;
case 1: portd=h1;break;
case 2: portd=m10;break;
case 3: portd=m1;break;
case 4: portd=s10;break;
case 5: portd=s1;break;
}
}
}


}
Hình Kèm Theo
File Type: bmp fff.bmp (88.8 KB, 22 lần tải)

thay đổi nội dung bởi: namqn, 18-12-2008 lúc 05:59 PM.
crazy_baby vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-01-2009, 08:49 PM   #20
hoaphonglan
Nhập môn đệ tử
 
Tham gia ngày: Nov 2008
Bài gửi: 1
:
khi su dung timer ban phai chon ty le chia tang so trong timer roi moi tinh theo chu moi khi timer giam ung voi 1 nhip dem cua bo chia tang ma ban chon(tuy theo timer co ty le chia tang so 1/1 ;1/4/..

namqn: xin nhắc bạn viết bài bằng tiếng Việt có dấu. Bạn tham khảo luồng sau về cách gõ tiếng Việt trên diễn đàn: http://www.picvietnam.com/forum/showthread.php?t=862.

thay đổi nội dung bởi: namqn, 03-01-2009 lúc 10:20 PM.
hoaphonglan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-03-2009, 04:22 AM   #21
lexuantien
Đệ tử 2 túi
 
Tham gia ngày: Feb 2009
Nơi Cư Ngụ: Qui Nhon - Binh Dinh
Bài gửi: 37
:
Send a message via Yahoo to lexuantien
Trích:
Nguyên văn bởi lequocbao View Post
Pác tungtot_vl ơi!: pác coi hộ lại giúp cái ngắt timer0 1s của pác sao mà khi mở nguồn thì khoảng 30s sau ngắt mới làm việc vậy pác.Sau khi ngắt đã làm việc thì nhấn reset thì ngắt làm việc lại liền còn cúp nguốn thì chịu khó đợi 30s nữa.Vậy là nó bị trục trặc chổ nào phải không pác?
mình thấy mạch vẫn chạy ổn mà bạn , bạn coi lại cái mạch của bạn thử coi!
lexuantien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-03-2009, 04:42 AM   #22
lexuantien
Đệ tử 2 túi
 
Tham gia ngày: Feb 2009
Nơi Cư Ngụ: Qui Nhon - Binh Dinh
Bài gửi: 37
:
Send a message via Yahoo to lexuantien
Smile

Trích:
Nguyên văn bởi lequocbao View Post
Tại sao mình phải set_timer1(15536); tới 02 lần luôn vậy bạn?
Còn nữa ,nếu mình muốn dừng ngắt thì phải dùng khai báo:
disable_interrupt(global); phải không?nếu đúng thì mình phải đặt khai báo đó ở chổ nào?
Mình cũng từng viết chương trình điều khiển led giống vậy , mình trả lời bạn trong giới hạn hiểu biết của mình thôi:

1. Vì sao phải set_timer1(15536); tới 02 lần ?
set_timer1(15536); trong hàm void main(void) là để tính thời gian bắt đầu đếm của Timer0 . Còn set_timer1(15536); trong hàm void interrupt_timer0() thì sau khi tính giá trị xong thì nó sẽ gán giá trị của set_timer1(15536); vào hàm này.
2. Khai báo disable_interrupt(global); được hiểu là cấm ngắt . Còn đặt ở đâu thì bạn tham khỏa trong đoạn Code sau:
Code:
#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);
   enable_interrupts(int_timer0);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); // so 2 la o cho T_dinhthi=2*(256-6)*1us = 500 us
   enable_interrupts(global);
   set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us
   a = 0x01;
   disable_interrupts(global);
   while(true)
   {
      PORTB = a;
   }
}
lexuantien 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à 02:43 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