PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Đóng góp ý kiến (http://www.picvietnam.com/forum/forumdisplay.php?f=6)
-   -   động cơ bước (http://www.picvietnam.com/forum/showthread.php?t=5155)

lehongviet 24-10-2009 12:41 PM

động cơ bước
 
Các bạn xem giúp mình đoạn code và mô phỏng sau, và làm sao để led xuất liên tục chứ không nhấp nháy.Xin chỉ giúp
chưong trình:
Code:

/*******BAT DAU CHUONG TRINH************/
#INCLUDE <16F877A.H>
#INCLUDE <DEF_877A.H>
#DEFINE STOP PIN_B4
#DEFINE DKTH PIN_B5
#DEFINE DKNG PIN_B6
#FUSES  NOWDT,PUT,HS,NOPROTECT,NOLVP
#USE    DELAY(CLOCK=20000000)  //SU DUNG THACH ANH 20MHZ
#USE  FAST_IO(A)
#USE  FAST_IO(B)
#USE  FAST_IO(D)
INT8  I,BCHUC,BDVI,VDVI,VCHUC;
INT8  SBUOC=0,A,SVONG=0;
INT8  R_KEY=0;
CONST UNSIGNED CHAR
DIG[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
CONST UNSIGNED CHAR ROTATE[]={14,12,13,9,11,3,7,6};
/*********************************************************
CHUONG TRINH DIEU KHIEN LED QUAY THUAN
SU DUNG LOAI DONG CO BUOC 48 RANG
DIEU KHIEN NUA BUOC
*/
//CHUONG TRINH NGAT RB
#INT_RB
VOID NGAT_RB()
{
  IF(RBIF==1)
      {
      IF(INPUT(STOP)==0){A=0;}
      IF(INPUT(DKTH)==0){A=1;}
      IF(INPUT(DKNG)==0){A=2;}
      }
  RBIF=0;
}
//CHUONG TRINH DOI SO BUOC, SO VONG RA SO BCD
void HEX_BCD()
{
  VCHUC=SVONG/10;
  VDVI=SVONG%10;
  BCHUC=SBUOC/10;
  BDVI=SBUOC%10;
}
void HIENTHI1()
{
      PORTC=DIG[BDVI];          //HIEN THI SO BUOC DON VI
      PORTD=0X0F;
      DELAY_US(100);
      PORTD=0;                  //CHONG LEM
      PORTC=DIG[BCHUC];          //HIEN THI SO BUOC CHUC
      PORTD=0X17;
      DELAY_US(100);
PORTD=0;
      PORTC=0XBF;                //HIEN THI DAU GACH PHAN CACH
      PORTD=0X1B;
      DELAY_US(100);
      PORTD=0;
      PORTC=DIG[VDVI];          //HIEN THI SO VONG DON VI
      PORTD=0X1D;
      DELAY_US(100);
      PORTD=0;
      PORTC=DIG[VCHUC];          //HIEN THI SO VONG CHUC
      PORTD=0X1E;
      DELAY_US(100);
      PORTD=0;
}
void HIENTHI()
{
  I=0;
  SBUOC++;
  IF(SBUOC>95){
              SBUOC=0;
              SVONG++;
              IF(SVONG>99){SVONG=0;}
              }
  HEX_BCD();
  WHILE(I<10)
      {
      HIENTHI1();
      I++;
      }
}
void QUAYTHUAN()
{
  PORTA=ROTATE[R_KEY];
  HIENTHI();
  IF (R_KEY < 7){R_KEY++;}
  ELSE R_KEY=0;
}
void QUAYNGICH()
{
  PORTA=ROTATE[R_KEY];
  HIENTHI();
  IF (R_KEY > 0){R_KEY--;}
  ELSE R_KEY=7;
}
void STP()
{
OUTPUT_A(0XFF);
HEX_BCD();
HIENTHI1();
}
VOID MAIN ()
{
SET_TRIS_A(0);        // PORTA DIEU KHIEN DONG CO BUOC
SET_TRIS_B(0XFF);    // PORTB LA PORT NHAP DU LIEU
SET_TRIS_C(0);        // PORTC XUAT MA HIEN THI
SET_TRIS_D(0);        // PORTD QUET LED
ENABLE_INTERRUPTS(GLOBAL);    //CHO PHEP NGAT TOAN CUC
ENABLE_INTERRUPTS(INT_RB);    //CHO PHEP NGAT RB
EXT_INT_EDGE(H_TO_L);        //CHO PHEP NGAT CANH XUONG
A=0;
WHILE(true)
  {
  SWITCH(A)
      {
      CASE 0 : STP();        //NEU A=0 THI STOP
      BREAK;
      CASE 1 : QUAYTHUAN();  //NEU A=1 THI QUAY THUAN
      BREAK;
      CASE 2 : QUAYNGICH();  //NEU A=2 THI QUAY NGHICH
      BREAK;
      }
  }
}

Em không gửi được file đính kèm hình ảnh,xin thông cảm

phamminhtuan 04-12-2009 08:28 AM

Trích:

Nguyên văn bởi lehongviet (Post 30522)
Các bạn xem giúp mình đoạn code và mô phỏng sau, và làm sao để led xuất liên tục chứ không nhấp nháy.Xin chỉ giúp
chưong trình:
Code:

/*******BAT DAU CHUONG TRINH************/
#INCLUDE <16F877A.H>
#INCLUDE <DEF_877A.H>
#DEFINE STOP PIN_B4
#DEFINE DKTH PIN_B5
#DEFINE DKNG PIN_B6
#FUSES  NOWDT,PUT,HS,NOPROTECT,NOLVP
#USE    DELAY(CLOCK=20000000)  //SU DUNG THACH ANH 20MHZ
#USE  FAST_IO(A)
#USE  FAST_IO(B)
#USE  FAST_IO(D)
INT8  I,BCHUC,BDVI,VDVI,VCHUC;
INT8  SBUOC=0,A,SVONG=0;
INT8  R_KEY=0;
CONST UNSIGNED CHAR
DIG[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
CONST UNSIGNED CHAR ROTATE[]={14,12,13,9,11,3,7,6};
/*********************************************************
CHUONG TRINH DIEU KHIEN LED QUAY THUAN
SU DUNG LOAI DONG CO BUOC 48 RANG
DIEU KHIEN NUA BUOC
*/
//CHUONG TRINH NGAT RB
#INT_RB
VOID NGAT_RB()
{
  IF(RBIF==1)
      {
      IF(INPUT(STOP)==0){A=0;}
      IF(INPUT(DKTH)==0){A=1;}
      IF(INPUT(DKNG)==0){A=2;}
      }
  RBIF=0;
}
//CHUONG TRINH DOI SO BUOC, SO VONG RA SO BCD
void HEX_BCD()
{
  VCHUC=SVONG/10;
  VDVI=SVONG%10;
  BCHUC=SBUOC/10;
  BDVI=SBUOC%10;
}
void HIENTHI1()
{
      PORTC=DIG[BDVI];          //HIEN THI SO BUOC DON VI
      PORTD=0X0F;
      DELAY_US(100);
      PORTD=0;                  //CHONG LEM
      PORTC=DIG[BCHUC];          //HIEN THI SO BUOC CHUC
      PORTD=0X17;
      DELAY_US(100);
PORTD=0;
      PORTC=0XBF;                //HIEN THI DAU GACH PHAN CACH
      PORTD=0X1B;
      DELAY_US(100);
      PORTD=0;
      PORTC=DIG[VDVI];          //HIEN THI SO VONG DON VI
      PORTD=0X1D;
      DELAY_US(100);
      PORTD=0;
      PORTC=DIG[VCHUC];          //HIEN THI SO VONG CHUC
      PORTD=0X1E;
      DELAY_US(100);
      PORTD=0;
}
void HIENTHI()
{
  I=0;
  SBUOC++;
  IF(SBUOC>95){
              SBUOC=0;
              SVONG++;
              IF(SVONG>99){SVONG=0;}
              }
  HEX_BCD();
  WHILE(I<10)
      {
      HIENTHI1();
      I++;
      }
}
void QUAYTHUAN()
{
  PORTA=ROTATE[R_KEY];
  HIENTHI();
  IF (R_KEY < 7){R_KEY++;}
  ELSE R_KEY=0;
}
void QUAYNGICH()
{
  PORTA=ROTATE[R_KEY];
  HIENTHI();
  IF (R_KEY > 0){R_KEY--;}
  ELSE R_KEY=7;
}
void STP()
{
OUTPUT_A(0XFF);
HEX_BCD();
HIENTHI1();
}
VOID MAIN ()
{
SET_TRIS_A(0);        // PORTA DIEU KHIEN DONG CO BUOC
SET_TRIS_B(0XFF);    // PORTB LA PORT NHAP DU LIEU
SET_TRIS_C(0);        // PORTC XUAT MA HIEN THI
SET_TRIS_D(0);        // PORTD QUET LED
ENABLE_INTERRUPTS(GLOBAL);    //CHO PHEP NGAT TOAN CUC
ENABLE_INTERRUPTS(INT_RB);    //CHO PHEP NGAT RB
EXT_INT_EDGE(H_TO_L);        //CHO PHEP NGAT CANH XUONG
A=0;
WHILE(true)
  {
  SWITCH(A)
      {
      CASE 0 : STP();        //NEU A=0 THI STOP
      BREAK;
      CASE 1 : QUAYTHUAN();  //NEU A=1 THI QUAY THUAN
      BREAK;
      CASE 2 : QUAYNGICH();  //NEU A=2 THI QUAY NGHICH
      BREAK;
      }
  }
}

Em không gửi được file đính kèm hình ảnh,xin thông cảm

Nếu bạn mô phỏng là chạy được mà chỉ nhấp nháy thôi thì bạn nên dùng mạch thật, vì khả năng mô phỏng animation tốc độ cao của một số trình mô phỏng còn hạn chế


Múi giờ GMT. Hiện tại là 09:16 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