?? 552_adc_int.c
字號:
/******************************************************************************
* 功能描述: 在STADC引腳的上升沿之后掃描所有ADC通道。由定時器T2
* 控制在P4.7引腳上產生重復周期為1.14ms的上升沿信號。
* A/D轉換結果被送往UART。
******************************************************************************/
#include <reg552.h>
#define ADEX 0x20
#define ADCI 0x10
#define ADCS 0x08
#define ADCIn 0x0ef
#define FALSE 0
#define TRUE 1
void write_UART(unsigned int *, unsigned int);
bit conversion_finished;
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 */
EAD=1; /* ADC 開中斷 */
EA=1;
conversion_finished=FALSE;
ADC_Channel=conversion=0;
ADCON=0; /* 第一次轉換由外部啟動 */
ADCON=ADEX;
while(1) {
if (conversion_finished==FALSE) {
/* 在A/D轉換期間可執行用戶的其他程序代碼 */
}
else {
result_ADC[ADC_Channel]=5*((256*ADCH+(ADCON&0xc0))>>6);
/* 存儲A/D轉換結果 */
if (ADC_Channel!=7) {
/* 準備對下一個通道進行轉換 */
ADCON=++ADC_Channel;
ADCON=ADCON|ADCS;
}
else {
/* ADC0...ADC7 全部轉換完畢, 結果送往 UART */
write_UART(&result_ADC, conversion++);
if (conversion==10000) conversion=0;
ADC_Channel=0;
ADCON=0; /* 準備下一次掃描 */
ADCON=ADEX;
}
conversion_finished=FALSE;
}
}
}
void ADC(void) interrupt 10 using 1 {
ADCON=ADCON&ADCIn; /* 清除ADCI標志 */
conversion_finished=TRUE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -