⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stepp.txt

📁 this is a stepper motor controller with specifications pins: for RS-232 interfacing stepper motor:
💻 TXT
字号:
#include <16c74.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  // Jumpers: 8 to 11, 7 to 12

#include 

#byte port_b = 6

#define FOUR_PHASE TRUE

#ifdef FOUR_PHASE

byte const POSITIONS[4] = {0b0101,
                           0b1001,
                           0b1010,
                           0b0110};
#else
byte const POSITIONS[8] = {0b0101,
                           0b0001,
                           0b1001,
                           0b1000,
                           0b1010,
                           0b0010,
                           0b0110,
                           0b0100};
#endif


drive_stepper(BYTE speed, char dir, BYTE steps) {
   static BYTE stepper_state = 0;
   BYTE i;

   for(i=0; i<steps; ++i) {
      delay_ms(speed);
      set_tris_b(0xf0);
      port_b = POSITIONS[ stepper_state ];
      if(dir!='R')
         stepper_state=(stepper_state+1)&(sizeof(POSITIONS)-1);
      else
         stepper_state=(stepper_state-1)&(sizeof(POSITIONS)-1);
   }
}



use_pot() {
   BYTE value;

   setup_adc(adc_clock_internal);
   set_adc_channel( 1 );
   printf("rn");

   while( TRUE ) {
      value=read_adc();
      printf("%2Xr",value);
      if(value<0x80)
         drive_stepper(value,'R',8);
      else if(value>0x80)
         drive_stepper(128-(value-128),'F',8);
   }

}


use_switch(BYTE speed, char dir) {

   BYTE steps;

   printf("nrSteps per press: ");
   steps = gethex();

   while(true) {
      while(input(PIN_B7)) ;
      drive_stepper(speed,dir,steps);
      while(!input(PIN_B7)) ;
      delay_ms(100);
   }
}


main() {

   byte speed,steps;
   char dir;

   setup_port_a(RA0_RA1_ANALOG);

   while (TRUE) {
       printf("nrSpeed (hex): ");
       speed = gethex();

       if(speed==0)
          use_pot();

       printf("nrDirection (F,R): ");
       dir=getc()|0x20;
       putc(dir);

       printf("nrSteps (hex): ");
       steps = gethex();

       if(steps==0)
          use_switch(speed,dir);

       drive_stepper(speed,dir,steps);
   }

}



Seconds Timer

#include<16f877a.h>
#fuses HS,NOLVP,NOWDT,PUT
#use delay(clock=20000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)

#define high_start 76
byte seconds, high_count;

#INT_RTCC                                    //Interrupt procedure
clock_isr() {                                //called every time RTCC
   high_count -= 1;                          //flips from 255 to 0

   if(high_count==0) {
      ++seconds;
      high_count=high_start;                 //Inc SECONDS counter every
   }                                         //76 times to keep time
}

void main() {                                //A simple stopwatch program
   byte start, time;

   high_count = high_start;
   setup_timer_0( RTCC_INTERNAL | RTCC_DIV_256 );
   set_timer0(0);
   enable_interrupts(INT_RTCC);
   enable_interrupts(GLOBAL);

   do {
      printf("Press any key to begin.nr");
      getc();
      start = seconds;
      printf("Press any key to stop.rn");
      getc();
      time = seconds - start;
      printf("%U seconds.nr", time);
   } while (TRUE);
}



Simple A/D

#include<16f877a.h>
#fuses HS,NOLVP,NOWDT,PUT
#use delay(clock=20000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)

void main() {
   int i, value, min, max;
   
   printf("Sampling:");
   
   setup_adc_ports( RA0_ANALOG );
   setup_adc( ADC_CLOCK_INTERNAL );
   set_adc_channel( 0 );
   
   do {                       //Takes 30 samples from pin A0
      min = 255;              //and displays the min and max
      max = 0;                //values for that 100ms period
      for(i = 0; i <= 30; ++i) {
         delay_ms(100);
         value = read_adc();
         if(value < min)
            min = value;
         if(value > max)
            max = value;
      }
      printf("nrMin:%x MAX: %x", min, max);
   } while (TRUE);
}



Output Listing
....................       min=255; 
008D:  MOVLW  FF
008E:  MOVWF  28
....................       max=0; 
008F:  CLRF   29
....................       incc=TRUE; 
0090:  BSF    2B,0
....................       for(i=0;i<=30;++i) { 
0091:  CLRF   26
0092:  MOVLW  1F
0093:  SUBWF  26,W
0094:  BTFSC  03,0
0095:  GOTO   0AC
....................          delay_ms(100); 
0096:  MOVLW  64
0097:  MOVWF  2C
0098:  GOTO   02D
....................          value = Read_ADC(); 
0099:  BSF    1F,2
009A:  BTFSC  1F,2
009B:  GOTO   09A
009C:  MOVF   1E,W
009D:  MOVWF  27
....................          if(value < min) 
009E:  MOVF   28,W
009F:  SUBWF  27,W
00A0:  BTFSC  03,0
00A1:  GOTO   0A4
....................             min=value; 
00A2:  MOVF   27,W
00A3:  MOVWF  28
....................          if(value > max) 
00A4:  MOVF   27,W
00A5:  SUBWF  29,W
00A6:  BTFSC  03,0
00A7:  GOTO   0AA
....................             max=value; 
00A8:  MOVF   27,W
00A9:  MOVWF  29
....................       } 
00AA:  INCF   26,F

00AB:  GOTO   092
....................       if (incc) 
00AC:  BTFSC  2B,0
....................         counter++; 
00AD:  INCF   2A,F





Simple Square Wave Generator

/

#include <30F2010.h>

//#device ICD=TRUE  // For using the debugger, un-comment

#use delay(crystal=20mhz)



// UART1A specifies the alternate UART pins Pin_C13, Pin_C14
// use UART1 to sprcify UART for pins Pin_F3, Pin_F2

#use rs232(baud=9600, UART1A)


void main() {

   printf("Press any key to beginnr");
   getc();
   printf("1 khz signal activatednr");

   while (TRUE) {
     output_high(PIN_B4);
     delay_us(500);
     output_low(PIN_B4);
     delay_us(500);
   }
}




Watchdog Timer


#ifndef __PCD__
 #error This example is only for dsPIC/PIC24 devices
#endif

#include <30F5011.h>
#fuses HS,NOPROTECT,WDT,WPSB1,WPSA512
#use delay(clock=20000000)
#use rs232(baud=9200, UART1)

main()   {


   switch ( restart_cause() )
   {
      case RESTART_WATCHDOG:
      {
         printf("rnRestarted processor because of watchdog timeout!rn");
         break;
      }
      case RESTART_POWER_UP:
      {
         printf("rnNormal power up!rn");
         break;
      }
   }

   setup_wdt(WDT_ON);

   while(TRUE)
   {
      restart_wdt();
      printf("Hit any key to avoid a watchdog timeout.rn");
      getc();
   }
}






#include <30F5011.h>
#fuses HS,NOWDT
#use delay(clock=20000000)
#use rs232(baud=9600, UART1)


void main() { 

   int i, value, min, max;

   printf("Sampling:");                        

   setup_adc_ports( sAN0 );                     
   setup_adc( ADC_CLOCK_INTERNAL );            
   set_adc_channel( 0 );                      

   do {
      min=255;
      max=0;
      for(i=0; i<=30; ++i) {
         delay_ms(100);                        
         value = read_adc();                   
         if(valuemax)
            max=value;
      }
      printf("nrMin: %2X  Max: %2Xnr",min,max);     
   } while (TRUE);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -