📄 upsd_adc.c
字号:
//============================================================================
// UPSD_ADC.C
//
// Copyright 2002 STMicroelectrons Inc.
//
// Modified by William Chin for uPSD3234 from STMicroelectronics
// on June 14, 2002
//============================================================================
//-- Includes ----------------------------------------------------------------
#include <intrins.h>
#include "general.h"
#include "upsd.h" // SFRs
#include "upsd_xreg.h" // extended registers in uPSD
//-- Variables ---------------------------------------------------------------
extern const uchar code cADC_CH_used;
extern const uchar code cASCL_value;
//----------------------------------------------------------------------------
//
// getADC(): reads an analog signal from the channel specified in hex format,
// and returns the converted value in ADAT reg.
//
unsigned char getADC(uchar channel)
{
ACON &= ~(bADEN|bADST); //Clears the input channels
ACON |= channel<<2 & (bADS1|bADS0); //Loads Channel to sampled
ACON |= (bADEN|bADST); //Enables and Starts Conversion
_nop_ ();
_nop_ (); //delay 1 machine cycle: ADST: 1->0
while( !(ACON & bADSF) ); //Waits for Conversion to end
ACON &= ~(bADEN|bADST); //disable ADC
return( (uchar)ADAT );
}
//----------------------------------------------------------------------------
// Setup I/O ports and ADC prescaler value
void initADC (void)
{
/*
long ASCL_value;
ASCL_value = ((OSC*10L/2L)/(ADC_clk_in*1000L))+5;
ASCL = (uchar)(ASCL_value/10)-1; // Setup prescaler for ADC clock
*/
ASCL = cASCL_value; //Setup prescaler for ADC clock
ACON &= ~(bADEN|bADST); //disable ADC
if (cADC_CH_used & bADC0)
P1SFS |= bADC0; // Input port P1[4] = ADC_in[0]
if (cADC_CH_used & bADC1)
P1SFS |= bADC1; // Input port P1[5] = ADC_in[1]
if (cADC_CH_used & bADC2)
P1SFS |= bADC2; // Input port P1[6] = ADC_in[2]
if (cADC_CH_used & bADC3)
P1SFS |= bADC3; // Input port P1[7] = ADC_in[3]
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -