📄 main.c
字号:
/***********************************************************
实验名称:ad
程序说明:本程序测试了ad
实验平台:stc15单片机开发板v1.0版
日期:2012-05-27
QQ: 259902530
www.stcstudy.com 61mcu.taobao.com 版权所有
***********************************************************/
/*----------------------------------------
本测试程序使用了串口1进行AD数值输出。
如果需要更换测试的通道,请改变ch的值。
可采用STC下载软件自带串口调试助手观察
-----------------------------------------*/
#include "STC15F2K.h"
#include "UART.H"
#include <intrins.h>
uint GetADC;
#define URMD 0 //0:使用定时器2作为波特率发生器
//1:使用定时器1的模式0(16位自动重载模式)作为波特率发生器
//2:使用定时器1的模式2(8位自动重载模式)作为波特率发生器
#define ADC_POWER 0x80 //ADC电源控制位
#define ADC_FLAG 0x10 //ADC完成标志
#define ADC_START 0x08 //ADC起始控制位
#define ADC_SPEEDLL 0x00 //540个时钟
#define ADC_SPEEDL 0x20 //360个时钟
#define ADC_SPEEDH 0x40 //180个时钟
#define ADC_SPEEDHH 0x60 //90个时钟
void UAS(uint Data,uchar *p);
void Delay(uint n);
void InitADC();
uchar ch = 3; //ADC通道号
void main()
{
uchar tmp[]="0123456789";
uchar out[5]="0000";
P2=0x01;
InitADC(); //初始化ADC
IE = 0xa0; //使能ADC中断
//开始AD转换
InitUART(); //初始化串口
SendString("All OK now!!!\r\n\r\n") ;
while (1)
{
SendString("The ADC Num is: ");
SendData(tmp[ch]);
SendString(" - ") ;
UAS(GetADC,out);
SendString(out);
SendString("\r\n\r\n");
Delay(150);
ch++;
if(ch>5) ch=3;
}
}
/*----------------------------
ADC中断服务程序
----------------------------*/
void adc_isr() interrupt 5 using 1
{
ADC_CONTR &= !ADC_FLAG; //清除ADC中断标志
GetADC=(ADC_RES<<2)| (ADC_RESL&0xFC);
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
}
/*----------------------------
初始化ADC
----------------------------*/
void InitADC()
{
P1ASF = 0xff; //设置P1口为AD口
ADC_RES = 0; //清除结果寄存器
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
Delay(2); //ADC上电并延时
}
void Delay(uint n)
{
uint x;
while (n--)
{
x = 5000;
while (x--);
}
}
void UAS(uint Data,uchar *p)
{
uchar a[]="0123456789";
*p=a[Data/1000];
*(p+1)=a[Data%1000/100];
*(p+2)=a[Data%100/10];
*(p+3)=a[Data%10];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -