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

📄 vsrc.c

📁 PIC Kit serial source code.
💻 C
字号:
//==================================================================== 
//--- COPYRIGHT
//==================================================================== 
// Copyright 2006 Microchip Technology Inc.
// 
// Microchip Technology Inc. ("Microchip") licenses this software to
// you solely for use with Microchip products. The software is owned
// by Microchip and is protected under applicable copyright laws. All
// rights reserved.
// 
// SOFTWARE IS PROVIDED IN AN "AS IS." MICROCHIP EXPRESSLY DISCLAIMS ANY
// WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
// PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP
// BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL
// DAMAGES, LOST PROFITS OR LOST DATA, HARM TO YOUR EQUIPMENT, COST OF
// PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
// BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF),
// ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER SIMILAR COSTS.
// 
//==================================================================== 
//--- TITLE
//==================================================================== 
//    Filename:            vsrc.c
//    Microcontroller:     PIC18F2550
//    Compiled using:      C18 V3.00
//
//    Author:              Mark Enochson
//    Company:             Microchip Technology Inc.
//
//==================================================================== 
//--- DESCRIPTION
//==================================================================== 
//
//==================================================================== 
//--- HISTORY
//==================================================================== 
//
//    0001 - 08-01-06 - ME
//    - initial release
//
//==================================================================== 
#include "project.h"
#include "vsrc.h"

TD_BYTE_B   vsrc_flags_B;
TD_BYTE     vsrc_fault_count;

//==========================================================
//--- vsrc_init()
//    configure VSRC resources
//==========================================================
void vsrc_init(void)
{
   //-----------------------------------
   //--- disable PWM
   //-----------------------------------
   vsrc_pwm_off();
   
   //-----------------------------------
   //--- setup READ/MEASURE
   //-----------------------------------
   VSRC_READ_TRIS = 1;
   if((ADCON1 & 0x0F) == 0x0F)
      ADCON1 = 0x0E;

   //-----------------------------------
   VSRC_CONTROL_TRIS = 0;     // set control pin to output
   vsrc_flags_B._b = 0;       // clear FLAGs
   vsrc_fault_count = 0;
}


//==========================================================
//--- vsrc_read()
//    measure VSRC (ADC channel: 0)
//==========================================================
TD_BYTE vsrc_read(TD_BYTE fault_level)
{
   //-------------------------
   //--- MEASURE VSRC
   //-------------------------
   ADCON2 = VSRC_ADCON2;      // configure ADC
   ADCON0 = VSRC_ADCON0;
   while(ADCON0bits.GO)       // wait for result
   {} 

   //-------------------------
   //--- CHECK FAULT CONDITION
   //-------------------------
   if(VSRC_SET_FLAG)
   {
      if(ADRESH < fault_level)
      {
         if(vsrc_fault_count < VSRC_FAULT_COUNT_TARGET)
            vsrc_fault_count++;
         else
         {
            vsrc_set_off();
            VSRC_FAULT_FLAG = 1;
         }
      }
      else
         vsrc_fault_count = 0;
   }

   //-------------------------
   return(ADRESH);            // return measurement
   
}

//==========================================================
//--- vsrc_set_on()
//    set VSRC control "on"
//==========================================================
void vsrc_set_on(void)
{
   vsrc_pwm_off();
   if(not VSRC_FAULT_FLAG)
   {
      VSRC_CONTROL_PIN = 1;
      VSRC_SET_FLAG = 1;
   }
}


//==========================================================
//--- vsrc_set_off()
//    set VSRC control "off"
//==========================================================
void vsrc_set_off(void)
{
   vsrc_pwm_off();
   VSRC_CONTROL_PIN = 0;
   VSRC_SET_FLAG = 0;
}


//==========================================================
//--- vsrc_set_var()
//    set variable VSRC control
//==========================================================
void vsrc_set_var(TD_BYTE setpoint)
{
   if(not VSRC_FAULT_FLAG)
   {
      //-----------------------------------
      //--- config
      //-----------------------------------
      if(not VSRC_PWM_FLAG)
      {
         PR2 = VSRC_PR2;
         T2CON = VSRC_T2CON_ON;
         CCP1CON = VSRC_CCP1CON_ON;
         VSRC_PWM_FLAG = 1;
      }

      //-----------------------------------
      //--- set
      //-----------------------------------
      CCPR1L = setpoint >> 2;
      if(setpoint & 0x02)
         CCP1CONbits.DC1B1 = 1;
      else
         CCP1CONbits.DC1B1 = 0;
      if(setpoint & 0x01)
         CCP1CONbits.DC1B0 = 1;
      else
         CCP1CONbits.DC1B0 = 0;

      VSRC_SET_FLAG = 1;
   }
}


//==========================================================  
//--- vsrc_pwm_off()
//    disable VSRC PWM (if enabled)
//==========================================================  
void vsrc_pwm_off(void)
{
   if(VSRC_PWM_FLAG)
   {
      T2CON = VSRC_T2CON_OFF;
      CCP1CON = VSRC_CCP1CON_OFF;
      VSRC_PWM_FLAG = 0;
   }
}

⌨️ 快捷键说明

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