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

📄 capture.h

📁 pic系列单片机头文件源文件(c18 开发环境)
💻 H
字号:
#ifndef __CAPTURE_H
#define __CAPTURE_H

/* PIC18 capture peripheral routines. */

/* There are five library modules, corresponding to register names:
 *  CAPTURE1  (CCPCON1)
 *  CAPTURE2  (CCPCON2)
 *  CAPTURE3  (CCPCON3)
 *  CAPTURE4  (CCPCON4)
 *  CAPTURE5  (CCPCON5)
 *  ECAPTURE1  (ECCPCON1)
 *  Each module is defined only for those devices for which the register
 *  name is defined.
 *  Note that the 'E' prefix indicates PWM enhanced capability (in ECCPCON1,
 *  for example); however, the absence of the 'E' prefix does not imply
 *  lack of enhanced capability.  The usage of the 'E' prefix is indicative 
 *  of the register naming convention in the datasheets, not the
 *  functionality.  Note also that these modules deal with capture
 *  functionality only; for PWM functionality, see the header 'pwm.h'.
 */

 /* For each module, there are three routines: an 'open' routine,
  * a 'read' routine, and a 'close' routine.  The 'open' routine
  * configures the edge for capture as well as optionally enables the
  * interrupt.  The 'read' routine returns the 16-bit captured
  * value, and sets the overflow status bit if required.  The 'close'
  * routine disables the module, including the interrupt.
  */

/* For each module, a bit in this byte holds the overflow status.
 * Following a read, the bit will be set to indicate overflow. */
extern union capstatus
{
  struct
  {
    unsigned Cap1OVF:1; /* CAPTURE1 */
#if !defined(__18F248)  && !defined(__18F258)  && \
    !defined(__18F448)  && !defined(__18F458)  && \
    !defined(__18F2480) && !defined(__18F2580) && \
    !defined(__18F4480) && !defined(__18F4580) && \
    !defined(__18F2585) && !defined(__18F2680) && \
    !defined(__18F4585) && !defined(__18F4680) && \
    !defined(__18F1220) && !defined(__18F1320)
    unsigned Cap2OVF:1; /* CAPTURE2 */
#endif
#if defined(__18F6520) || defined(__18F6620) || defined(__18F6720) || \
    defined(__18F8520) || defined(__18F8620) || defined(__18F8720) || \
    defined(__18F64J15) || defined(__18F65J10) || defined(__18F65J15) || \
    defined(__18F66J10) || defined(__18F66J15) || defined(__18F67J10) || \
    defined(__18F84J15) || defined(__18F85J10) || defined(__18F85J15) || \
    defined(__18F86J10) || defined(__18F86J15) || defined(__18F87J10) || \
    defined(__18F6525) || defined(__18F6621) || \
    defined(__18F8525) || defined(__18F8621) || \
    defined(__18F6310) || defined(__18F8310) || \
    defined(__18F6410) || defined(__18F8410) || \
    defined(__18F6527) || defined(__18F6622) || \
    defined(__18F6627) || defined(__18F6722) || \
    defined(__18F8527) || defined(__18F8622) || \
    defined(__18F8627) || defined(__18F8722)
    unsigned Cap3OVF:1; /* CAPTURE3 */
#endif
#if defined(__18F6520) || defined(__18F6620) || defined(__18F6720) || \
    defined(__18F8520) || defined(__18F8620) || defined(__18F8720) || \
    defined(__18F64J15) || defined(__18F65J10) || defined(__18F65J15) || \
    defined(__18F66J10) || defined(__18F66J15) || defined(__18F67J10) || \
    defined(__18F84J15) || defined(__18F85J10) || defined(__18F85J15) || \
    defined(__18F86J10) || defined(__18F86J15) || defined(__18F87J10) || \
    defined(__18F6525) || defined(__18F6621) || \
    defined(__18F8525) || defined(__18F8621) || \
    defined(__18F6527) || defined(__18F6622) || \
    defined(__18F6627) || defined(__18F6722) || \
    defined(__18F8527) || defined(__18F8622) || \
    defined(__18F8627) || defined(__18F8722)
    unsigned Cap4OVF:1; /* CAPTURE4 */
#endif
#if defined(__18F6520) || defined(__18F6620) || defined(__18F6720) || \
    defined(__18F8520) || defined(__18F8620) || defined(__18F8720) || \
    defined(__18F64J15) || defined(__18F65J10) || defined(__18F65J15) || \
    defined(__18F66J10) || defined(__18F66J15) || defined(__18F67J10) || \
    defined(__18F84J15) || defined(__18F85J10) || defined(__18F85J15) || \
    defined(__18F86J10) || defined(__18F86J15) || defined(__18F87J10) || \
    defined(__18F6525) || defined(__18F6621) || \
    defined(__18F8525) || defined(__18F8621) || \
    defined(__18F6527) || defined(__18F6622) || \
    defined(__18F6627) || defined(__18F6722) || \
    defined(__18F8527) || defined(__18F8622) || \
    defined(__18F8627) || defined(__18F8722)
    unsigned Cap5OVF:1; /* CAPTURE5 */
#endif
#if defined(__18F448)  || defined(__18F458) || \
    defined(__18F4480) || defined(__18F4580) || \
    defined(__18F4585) || defined(__18F4680) 
    unsigned ECap1OVF:1; /* ECAPTURE1 */
#endif
  };
  unsigned :8;

} CapStatus;

/* used to hold the 16-bit captured value */
union CapResult
{
 unsigned int lc;
 char bc[2];
};


/* storage class of library routine parameters; pre-built with auto;
 * do not change unless you rebuild the libraries with the new storage class */ 
#define PARAM_SCLASS auto


/* Interrupt bit mask to be 'anded' with the edge mask and passed as
 * the 'config' parameter to the 'open' routines. */
#define CAPTURE_INT_ON   0b11111111  /* enable interrupt */
#define CAPTURE_INT_OFF  0b01111111  /* disable nterrupt */


/* ***** CAPTURE1 (CCP1CON) ***** */

/* CAPTURE1 edge mask -- to be 'anded' with the interrupt mask and
 * passed as the 'config' parameter. */
#define C1_EVERY_FALL_EDGE     0b10000100  /* Every falling edge      */
#define C1_EVERY_RISE_EDGE     0b10000101  /* Every rising edge       */
#define C1_EVERY_4_RISE_EDGE   0b10000110  /* Every 4th rising edge   */
#define C1_EVERY_16_RISE_EDGE  0b10000111  /* Every 16th rising edge  */

void OpenCapture1 (PARAM_SCLASS unsigned char config);
unsigned int ReadCapture1 (void);
void CloseCapture1 (void);


/* ***** CAPTURE2 (CCP2CON) ***** */

#if !defined(__18F248)  && !defined(__18F258)  && \
    !defined(__18F448)  && !defined(__18F458)  && \
    !defined(__18F2480) && !defined(__18F2580) && \
    !defined(__18F4480) && !defined(__18F4580) && \
    !defined(__18F2585) && !defined(__18F2680) && \
    !defined(__18F4585) && !defined(__18F4680) && \
    !defined(__18F1220) && !defined(__18F1320)

/* CAPTURE2 edge mask -- to be 'anded' with the interrupt mask and
 * passed as the 'config' parameter. */
#define C2_EVERY_FALL_EDGE     0b10000100  /* Every falling edge     */
#define C2_EVERY_RISE_EDGE     0b10000101  /* Every rising edge      */
#define C2_EVERY_4_RISE_EDGE   0b10000110  /* Every 4th rising edge  */
#define C2_EVERY_16_RISE_EDGE  0b10000111  /* Every 16th rising edge */

void OpenCapture2 (PARAM_SCLASS unsigned char config);
unsigned int ReadCapture2 (void);
void CloseCapture2 (void);

#endif


/* ***** CAPTURE3 (CCP3CON) ***** */

#if defined(__18F6520) || defined(__18F6620) || defined(__18F6720) || \
    defined(__18F8520) || defined(__18F8620) || defined(__18F8720) || \
    defined(__18F64J15) || defined(__18F65J10) || defined(__18F65J15) || \
    defined(__18F66J10) || defined(__18F66J15) || defined(__18F67J10) || \
    defined(__18F84J15) || defined(__18F85J10) || defined(__18F85J15) || \
    defined(__18F86J10) || defined(__18F86J15) || defined(__18F87J10) || \
    defined(__18F6525) || defined(__18F6621) || \
    defined(__18F8525) || defined(__18F8621) || \
    defined(__18F6310) || defined(__18F8310) || \
    defined(__18F6410) || defined(__18F8410) || \
    defined(__18F6527) || defined(__18F6622) || \
    defined(__18F6627) || defined(__18F6722) || \
    defined(__18F8527) || defined(__18F8622) || \
    defined(__18F8627) || defined(__18F8722)

/* CAPTURE3 edge mask -- to be 'anded' with the interrupt mask and
 * passed as the 'config' parameter. */
#define C3_EVERY_FALL_EDGE     0b10000100  /* Every falling edge     */
#define C3_EVERY_RISE_EDGE     0b10000101  /* Every rising edge      */
#define C3_EVERY_4_RISE_EDGE   0b10000110  /* Every 4th rising edge  */
#define C3_EVERY_16_RISE_EDGE  0b10000111  /* Every 16th rising edge */

void OpenCapture3 (PARAM_SCLASS unsigned char config);
unsigned int ReadCapture3 (void);
void CloseCapture3 (void);

#endif


/* ***** CAPTURE4 (CCP4CON) ***** */

#if defined(__18F6520) || defined(__18F6620) || defined(__18F6720) || \
    defined(__18F8520) || defined(__18F8620) || defined(__18F8720) || \
    defined(__18F64J15) || defined(__18F65J10) || defined(__18F65J15) || \
    defined(__18F66J10) || defined(__18F66J15) || defined(__18F67J10) || \
    defined(__18F84J15) || defined(__18F85J10) || defined(__18F85J15) || \
    defined(__18F86J10) || defined(__18F86J15) || defined(__18F87J10) || \
    defined(__18F6525) || defined(__18F6621) || \
    defined(__18F8525) || defined(__18F8621) || \
    defined(__18F6527) || defined(__18F6622) || \
    defined(__18F6627) || defined(__18F6722) || \
    defined(__18F8527) || defined(__18F8622) || \
    defined(__18F8627) || defined(__18F8722)

/* CAPTURE4 edge mask -- to be 'anded' with the interrupt mask and
 * passed as the 'config' parameter. */
#define C4_EVERY_FALL_EDGE     0b10000100  /* Every falling edge     */
#define C4_EVERY_RISE_EDGE     0b10000101  /* Every rising edge      */
#define C4_EVERY_4_RISE_EDGE   0b10000110  /* Every 4th rising edge  */
#define C4_EVERY_16_RISE_EDGE  0b10000111  /* Every 16th rising edge */

void OpenCapture4 (PARAM_SCLASS unsigned char config);
unsigned int ReadCapture4 (void);
void CloseCapture4 (void);

#endif


/* ***** CAPTURE5 (CCP5CON) ***** */

#if defined(__18F6520) || defined(__18F6620) || defined(__18F6720) || \
    defined(__18F8520) || defined(__18F8620) || defined(__18F8720) || \
    defined(__18F64J15) || defined(__18F65J10) || defined(__18F65J15) || \
    defined(__18F66J10) || defined(__18F66J15) || defined(__18F67J10) || \
    defined(__18F84J15) || defined(__18F85J10) || defined(__18F85J15) || \
    defined(__18F86J10) || defined(__18F86J15) || defined(__18F87J10) || \
    defined(__18F6525) || defined(__18F6621) || \
    defined(__18F8525) || defined(__18F8621) || \
    defined(__18F6527) || defined(__18F6622) || \
    defined(__18F6627) || defined(__18F6722) || \
    defined(__18F8527) || defined(__18F8622) || \
    defined(__18F8627) || defined(__18F8722)

/* CAPTURE5 edge mask -- to be 'anded' with the interrupt mask and
 * passed as the 'config' parameter. */
#define C5_EVERY_FALL_EDGE     0b10000100  /* Every falling edge     */
#define C5_EVERY_RISE_EDGE     0b10000101  /* Every rising edge      */
#define C5_EVERY_4_RISE_EDGE   0b10000110  /* Every 4th rising edge  */
#define C5_EVERY_16_RISE_EDGE  0b10000111  /* Every 16th rising edge */

void OpenCapture5 (PARAM_SCLASS unsigned char config);
unsigned int ReadCapture5 (void);
void CloseCapture5 (void);

#endif


/* ***** ECAPTURE1 (ECCP1CON) ***** */

#if defined(__18F448)  || defined(__18F458) || \
    defined(__18F4480) || defined(__18F4580) || \
    defined(__18F4585) || defined(__18F4680) 

/* ECAPTURE1 edge mask -- to be 'anded' with the interrupt mask and
 * passed as the 'config' parameter. */
#define EC1_EVERY_FALL_EDGE     0b10000100  /* Every falling edge     */
#define EC1_EVERY_RISE_EDGE     0b10000101  /* Every rising edge      */
#define EC1_EVERY_4_RISE_EDGE   0b10000110  /* Every 4th rising edge  */
#define EC1_EVERY_16_RISE_EDGE  0b10000111  /* Every 16th rising edge */

void OpenECapture1 (PARAM_SCLASS unsigned char config);
unsigned int ReadECapture1 (void);
void CloseECapture1 (void);

#endif

#endif

⌨️ 快捷键说明

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