📄 552_adc_pol.c
字号:
/**************************************************************************
* 功能描述: 在STADC引脚的上升沿之后扫描所有ADC通道。由定时器T2
* 控制在P4.7引脚上产生重复周期为1.14ms的上升沿信号。
* A/D转换结果被送往UART。
**************************************************************************/
#include <reg552.h>
#define ADEX 0x20
#define ADCI 0x10
#define ADCS 0x08
void write_UART(unsigned int *, unsigned int);
void main(void) {
unsigned int conversion, result_ADC[8];
unsigned char ADC_Channel;
S0CON=0x40; /* 串行口初始化 */
TH1=TL1=0xfd; /* 19200 Baud @11.0592MHz */
TMOD=0x20;
TR1=1;
TM2CON=0xfd; /* 定时器T2初始化: osc/96 */
RTE=0x80; /* 溢出率= 0.569ms, 在STADC的上升沿
开始A/D转换,转换速率=1.14ms */
conversion=0;
while(1) {
for (ADC_Channel=0; ADC_Channel<8; ADC_Channel++) {
ADCON=0; /* 在选通ADC通道之前 */
ADCON=ADC_Channel; /* 保证ADCI 和 ADCS 被清0 */
if (ADC_Channel==0)
ADCON=ADEX; /* ADC0: 外部启动 */
else
ADCON=ADCON|ADCS; /* ADC1...ADC7: 软件启动 */
while((ADCON&ADCI)==0); /* 检测ADCI状态并等待A/D转换结束 */
result_ADC[ADC_Channel]=5*((256*ADCH+(ADCON&0xc0))>>6);
/* 计算相应于5.12V参考电压的10螤 涣/D转换结果*/
}
write_UART(&result_ADC, conversion++); /* 结果送往 UART */
if (conversion==10000)
conversion=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -