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

📄 main.c

📁 stc15单片机测试程序V1.0版
💻 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 + -