STC12C5201AD 샘플링 + 직렬 전송 템플릿
2350 단어 거푸집
#include<reg52.h>
sfr ADC_CONTR = 0xBC; //ADC control register
sfr ADC_RES = 0xBD; //ADC 8-bit result register
sfr P1ASF = 0x9D; //P1 secondary function control register
/* Define ADC operation const for ADC_CONTER */
#define ADC_POWER 0x80
#define ADC_FLAG 0x10
#define ADC_START 0x08
#define ADC_SPEEDLL 0x00
#define ADC_SPEEDL 0x20
#define ADC_SPEEDH 0x40
#define ADC_SPEEDHH 0x60
unsigned char ADC_ch = 0;
void Delay(unsigned int n);
/*Initial ADC sfr*/
void initADC()
{
P1ASF = 0xff; //Set All P1 as analog input port
ADC_RES = 0; //Clear previous result
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ADC_ch;
Delay(2); //ADC power-on delay and Start A/D conversion
//IE = 0xa0; //Enable ADC interrupt and Open master interrupt switch
}
void initSCI(void)
{
SM0 = 0; /*Step 1 : */
SM1 = 1;
TMOD = 0x20; /*step 2: */
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1; /*step 3 : */
REN = 1;
EA = 1; /*step 4: */
ES = 1;
}
void putChar (unsigned char chr)//
{
SBUF = chr;
while(!TI); TI=0;
}
void putStr(unsigned char str[], unsigned char n)
{
while( n-- )
{
SBUF = str[n];
while(!TI); TI=0;
}
}
void Delay(unsigned int n)
{
unsigned int x;
while( n-- ){
x = 5000;
while(x--);
}
}
int main()
{
initSCI();
initADC();
while(1)
{
//operation;
}
return 0;
}
/* ADC interrupt service routine */
void adc_isr() interrupt 5 using 1
{
ADC_CONTR &= !ADC_FLAG; // Clear ADC interrupt flag
//SendData(ADC_ch); //Show Channel NO.
//SendData(ADC_RES); //Get ADC 8-bit result and Send to UART
if(++ADC_ch > 7) ADC_ch = 0; //switch to next channel
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ADC_ch;
}
void ser() interrupt 4
{
if( RI )
{
RI = 0;
/*Operation SBUF*/
}
else if( TI )
{
TI = 0;
}
return ;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
STC12C5201AD 샘플링 + 직렬 전송 템플릿텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.