View Single Post
Old 05-09-2008, 01:41 AM   #102
popeye_ts22
Đệ tử 2 túi
 
popeye_ts22's Avatar
 
Tham gia ngày: Jul 2008
Nơi Cư Ngụ: Hà Nội
Bài gửi: 42
:
Send a message via Yahoo to popeye_ts22
Thumbs up

Mò mẫm mãi cũng ra bài đo tốc độ,đưa xung encoder lên tính vận tốc.Lúc đầu thì encoder hỏng,sau thì tính sai 1 chỗ trong vòng ngắt.hihi.Mới học Pic nên còn gà wá...Em post bài đã làm được lên share cho bác nào cũng mới nghiên cứu PIC như em,gặp phải bài toán này hi vọng các bác sẽ ko bị mất time nữa.
Compiler: CCSC 4.065
PIC:16F877A
Encoder:100xung/vòng
Code:
Code:
#include <16f877a.h>
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=8000000)
#include <lcd.c>
float vantoc,soxung;
int8 a,b,c,d,a1;
int16 sovong,i;
#int_TIMER1
void  TIMER1_isr(void) 
{ 
soxung=get_timer0(); //Lay so xung Timer0 dem
set_timer1(55535);    // Trong 1ms
if(tmr1if==1)
 {
  intcon=0;               //stop ngat
  a1=1;
 }
}
void main()
{ 
   trisa=255;            //Cho RA4 di vao
   trisb=0;
   trisc=0;
   trisd=0;
  lcd_init();
  lcd_gotoxy(1,1);
   lcd_putc("Beginning....");
   delay_ms(1000);
   lcd_putc('\f');
    setup_timer_2(T2_DIV_BY_16,255,1);
    setup_ccp1(CCP_PWM);
   rd7=0;                    //Mo role,quay theo 1 chieu
for(i=0;i<1024;i++)      //0 la quay nhanh,1024 quay cham-->Do mach thiet ke.
  {
   set_pwm1_duty(i);   // Toc do giam dan
   delay_ms(1);
   set_timer0(0);
   set_timer1(55535);
   setup_timer_0(RTCC_EXT_H_TO_L|RTCC_DIV_1);  //Che do counter
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);        
   enable_interrupts(INT_TIMER1);
   enable_interrupts(GLOBAL);
   delay_ms(50); 
if(a1==1)  
{
//while (1)
 //{
vantoc=((float)(60*soxung)/(0.01*100));  //Tinh van toc
a=vantoc/1000;                                    //Tach so..
b=(int)(vantoc-1000*a)/100;
c=(int)(vantoc-1000*a-100*b)/10;
d=(int)vantoc%10;
lcd_gotoxy(1,1);                       //Hien thi
lcd_putc(a+48);
lcd_gotoxy(2,1);
lcd_putc(b+48);
lcd_gotoxy(3,1);
lcd_putc(c+48);
lcd_gotoxy(4,1);
lcd_putc(d+48);
lcd_gotoxy(6,1);
lcd_putc("vong/ph");
lcd_gotoxy(3,2);
lcd_putc("toc do dc");
delay_ms(5);            //Vong for0->1024 nen delay it.
tmr0if=0;tmr1if=0;     //Xoa tran
}
  }
}
Chúc các bác thành công.
__________________
Best Regard.

thay đổi nội dung bởi: popeye_ts22, 05-09-2008 lúc 01:52 AM. Lý do: Edit chỉn chu.Hihi.
popeye_ts22 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn