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

📄 552_adc_pol.c

📁 这是《Keil Cx51 V7.0单片机高级语言编程与uVision2应用实践》教材各章中列出的全部程序例子。
💻 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 + -