找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3154|回复: 0
打印 上一主题 下一主题
收起左侧

stc单片机ADC控制器程序

[复制链接]
跳转到指定楼层
楼主
ID:26188 发表于 2015-2-18 01:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <intrins.h>
#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  分频
unsigned int  xdata ADC_Data[]={0,0,0,0,0,0,0,0}; //ADC转换结果
struct ADCs
{//串口1结构数据类型
    unsigned char        ASFS;                //允许接收端口指示
    unsigned char        Speed:4;             //允许接收端口指示
    unsigned char        Data_P:4;            //当前转换端口指针
}ADCs;
//设置ADC转换
void InitADC()
{
     ADCs.Speed=ADC_SPEEDHH;               //ADC转换速度设置
     P1ASF = 0xff;                         //P1口模拟输入设置
     ADCs.Data_P=0;                        //设置初次转换的端口
     ADC_RES = 0;                          //清除ADC转换结果位
     ADC_RESL = 0;                         //清除ADC转换结果位
     //ADC控制器,电源开,设置速度,设置当前转换口,开始转换
     ADC_CONTR = ADC_POWER | ADCs.Speed | ADC_START | ADCs.Data_P;
     _nop_();
     _nop_();
     _nop_();
     _nop_();                                //4个空操作延迟,必须包含库函数 #include "intrins.h"
     EADC =1;                              //开ADC中断
     EA   =1;                              //开总中断
}
void adc_isr() interrupt 5 using 1
{
    ADC_CONTR &= !ADC_FLAG;                 //清ADC中断
    ADC_Data[ADCs.Data_P]=ADC_RES;
    ADC_Data[ADCs.Data_P]<<=2;
    ADC_Data[ADCs.Data_P]|=ADC_RESL;
    do
    {
        if(++ADCs.Data_P>7) ADCs.Data_P=0;
    }while(ADCs.ASFS|1<<(ADCs.Data_P+1));
    ADC_CONTR = ADC_POWER | ADCs.Speed | ADC_START | ADCs.Data_P;
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表