51单片机AD转换的程序

来源:互联网 发布:sql 存储过程输出 编辑:程序博客网 时间:2024/05/01 04:36
  1. void Read_init (unsigned char CHA){  
  2.     unsigned char AD_FIN=0; //存储A/D转换标志  
  3.     CHA &= 0x07;            //选择ADC的8个接口中的一个(0000 0111 清0高5位)  
  4.     ADC_CONTR 0x40;       //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)  
  5.     _nop_();  
  6.     ADC_CONTR |= CHA;       //选择A/D当前通道  
  7.     _nop_();  
  8.     ADC_CONTR |= 0x80;      //启动A/D电源  
  9.     DELAY_MS(1);            //使输入电压达到稳定(1ms即可)  
  10.  
  11.   
  12.   
  13. unsigned char Read (void){  
  14.     unsigned char AD_FIN=0; //存储A/D转换标志  
  15.     ADC_CONTR |= 0x08;      //启动A/D转换(0000 1000 令ADCS 1)  
  16.     _nop_();  
  17.     _nop_();  
  18.     _nop_();  
  19.     _nop_();  
  20.     while (AD_FIN ==0){     //等待A/D转换结束  
  21.         AD_FIN (ADC_CONTR & 0x10); //0001 0000测试A/D转换结束否  
  22.      
  23.     ADC_CONTR &= 0xE7;      //1111 0111 清ADC_FLAG位, 关闭A/D转换,   
  24. return (ADC_DATA);          //返回A/D转换结果(8位)  
  25.  
  26.   

以上- 8位ADC程序模块(适用于STC12C2052AD系列) 
C代码  收藏代码
  1.   
  2.   
  3. #include <STC12C2052AD.H> //单片机头文件  
  4. #include <intrins.h>  //51基本运算(包括_nop_空函数)  
  5.   
  6.   
  7. void DELAY_MS (unsigned int a){  
  8.     unsigned int i;  
  9.     whilea-- != 0){  
  10.         for(i 0; 600; i++);  
  11.      
  12.  
  13.   
  14.   
  15.   
  16. void UART_init (void){  
  17.     //EA 1; //允许总中断(如不使用中断,可用//屏蔽)  
  18.     //ES 1; //允许UART串口的中断  
  19.   
  20.     TMOD 0x20;    //定时器T/C1工作方式2  
  21.     SCON 0x50;    //串口工作方式1,允许串口接收(SCON 0x40 时禁止串口接收)  
  22.     TH1 0xF3; //定时器初值高8位设置  
  23.     TL1 0xF3; //定时器初值低8位设置  
  24.     PCON 0x80;    //波特率倍频(屏蔽本句波特率为2400)  
  25.     TR1 1;    //定时器启动      
  26.  
  27.   
  28.   
  29.   
  30. void UART_T (unsigned char UART_data){ //定义串口发送数据变量  
  31.     SBUF UART_data;   //将接收的数据发送回去  
  32.     while(TI == 0);     //检查发送中断标志位  
  33.     TI 0;         //令发送中断标志位为0(软件清零)  
  34.  
  35.   
  36.   
  37. void Read_init (unsigned char CHA){  
  38.     unsigned char AD_FIN=0; //存储A/D转换标志  
  39.     CHA &amp;= 0x07;            //选择ADC的8个接口中的一个(0000 0111 清0高5位)  
  40.     ADC_CONTR 0x40;       //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)  
  41.     _nop_();  
  42.     ADC_CONTR |= CHA;       //选择A/D当前通道  
  43.     _nop_();  
  44.     ADC_CONTR |= 0x80;      //启动A/D电源  
  45.     DELAY_MS(1);            //使输入电压达到稳定(1ms即可)  
  46.  
  47.   
  48.   
  49. unsigned char Read (void){  
  50.     unsigned char AD_FIN=0; //存储A/D转换标志  
  51.     ADC_CONTR |= 0x08;      //启动A/D转换(0000 1000 令ADCS 1)  
  52.     _nop_();  
  53.     _nop_();  
  54.     _nop_();  
  55.     _nop_();  
  56.     while (AD_FIN ==0){     //等待A/D转换结束  
  57.         AD_FIN (ADC_CONTR &amp; 0x10); //0001 0000测试A/D转换结束否  
  58.      
  59.     ADC_CONTR &amp;= 0xE7;      //1111 0111 清ADC_FLAG位, 关闭A/D转换,   
  60. return (ADC_DATA);          //返回A/D转换结果(8位)  
  61.  
  62.   
  63.   
  64. void main (void){  
  65.     unsigned char R;  
  66.     UART_init();//串口初始程序  
  67.     Read_init(0);//ADC初始化  
  68.     P1M0 0x01; //P1.7~.0:0000 0001(高阻)//注意:更改ADC通道时须同时将对应的IO接口修改为高阻输入。  
  69.     P1M1 0x00; //P1.7~.0:0000 0000(强推)  
  70.     while(1){  
  71.         Read ();  
  72.         UART_T (R); //串口小秘书,将ADC读出值送入串口显示  
  73.      
  74.  

以上- 8位ADC应用实例(适用于STC12C2052AD系列) 
C代码  收藏代码
  1.   
  2. void Read_init (unsigned char CHA){  
  3.     unsigned char AD_FIN=0; //存储A/D转换标志  
  4.     CHA &amp;= 0x07;            //选择ADC的8个接口中的一个(0000 0111 清0高5位)  
  5.     ADC_CONTR 0x40;       //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)  
  6.     _nop_();  
  7.     ADC_CONTR |= CHA;       //选择A/D当前通道  
  8.     _nop_();  
  9.     ADC_CONTR |= 0x80;      //启动A/D电源  
  10.     DELAY_MS(1);            //使输入电压达到稳定(1ms即可)  
  11.  
  12.   
  13.   
  14. unsigned int ADC_Read (void){  
  15.     unsigned char AD_FIN=0; //存储A/D转换标志  
  16.     ADC_CONTR |= 0x08;      //启动A/D转换(0000 1000 令ADCS 1)  
  17.     _nop_();  
  18.     _nop_();  
  19.     _nop_();  
  20.     _nop_();  
  21.     while (AD_FIN ==0){     //等待A/D转换结束  
  22.         AD_FIN (ADC_CONTR &amp; 0x10); //0001 0000测试A/D转换结束否  
  23.      
  24.     ADC_CONTR &amp;= 0xE7;      //1111 0111 清ADC_FLAG位, 关闭A/D转换,   
  25. return (ADC_RES*4+ADC_RESL);//返回A/D转换结果(10位ADC数据高8位在ADC_RES中,低2位在ADC_RESL中)  
  26.  

以上- 10位ADC程序模块(适用于STC12C5A60S2系列) 
C代码  收藏代码
  1.   
  2.   
  3. #include <STC12C5A60S2.H> //单片机头文件  
  4. #include <intrins.h>  //51基本运算(包括_nop_空函数)  
  5.   
  6.   
  7. void DELAY_MS (unsigned int a){  
  8.     unsigned int i;  
  9.     whilea-- != 0){  
  10.         for(i 0; 600; i++);  
  11.      
  12.  
  13.   
  14.   
  15.   
  16. void UART_init (void){  
  17.     //EA 1; //允许总中断(如不使用中断,可用//屏蔽)  
  18.     //ES 1; //允许UART串口的中断  
  19.   
  20.     TMOD 0x20;    //定时器T/C1工作方式2  
  21.     SCON 0x50;    //串口工作方式1,允许串口接收(SCON 0x40 时禁止串口接收)  
  22.     TH1 0xF3; //定时器初值高8位设置  
  23.     TL1 0xF3; //定时器初值低8位设置  
  24.     PCON 0x80;    //波特率倍频(屏蔽本句波特率为2400)  
  25.     TR1 1;    //定时器启动      
  26.  
  27.   
  28.   
  29.   
  30. void UART_T (unsigned char UART_data){ //定义串口发送数据变量  
  31.     SBUF UART_data;   //将接收的数据发送回去  
  32.     while(TI == 0);     //检查发送中断标志位  
  33.     TI 0;         //令发送中断标志位为0(软件清零)  
  34.  
  35.   
  36.   
  37. void Read_init (unsigned char CHA){  
  38.     unsigned char AD_FIN=0; //存储A/D转换标志  
  39.     CHA &amp;= 0x07;            //选择ADC的8个接口中的一个(0000 0111 清0高5位)  
  40.     ADC_CONTR 0x40;       //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)  
  41.     _nop_();  
  42.     ADC_CONTR |= CHA;       //选择A/D当前通道  
  43.     _nop_();  
  44.     ADC_CONTR |= 0x80;      //启动A/D电源  
  45.     DELAY_MS(1);            //使输入电压达到稳定(1ms即可)  
  46.  
  47.   
  48.   
  49. void ADC_Read (void){  
  50.     unsigned char AD_FIN=0; //存储A/D转换标志  
  51.     ADC_CONTR |= 0x08;      //启动A/D转换(0000 1000 令ADCS 1)  
  52.     _nop_();  
  53.     _nop_();  
  54.     _nop_();  
  55.     _nop_();  
  56.     while (AD_FIN ==0){     //等待A/D转换结束  
  57.         AD_FIN (ADC_CONTR &amp; 0x10); //0001 0000测试A/D转换结束否  
  58.      
  59.     ADC_CONTR &amp;= 0xE7;      //1111 0111 清ADC_FLAG位, 关闭A/D转换,   
  60.  
  61.   
  62.   
  63. void main (void){  
  64.     UART_init();//串口初始程序  
  65.     Read_init(0);//ADC初始化  
  66.     P1M1 0x01; //P1.7~P1.0:0000 0001(高阻)//注意:更改ADC通道时须同时将对应的IO接口修改为高阻输入。  
  67.     P1M0 0x00; //P1.7~P1.0:0000 0000(强推)  
  68.     while(1){  
  69.         ADC_Read ();//调用ADC转换程序  
  70.         UART_T (ADC_RES); //串口小秘书,将ADC读出值高8位送入串口  0000 0000  
  71.         UART_T (ADC_RESL); //串口小秘书,将ADC读出值低2位送入串口  XXXX XX00  
  72.      
  73. }  
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 坐拥七夫 坐拥百城 坐拥天下美男 坐拥亿万家产 女皇驾到坐拥后宫三千 破茧-坐拥天下 盛夏沐阳 坐拥美人相公们 星璇 坐拥世界 冬不语 坐小月子 怎么坐好月子 如何坐好月子 坐月子怎么坐 学步车几个月可以坐 宝宝几个月坐 宝宝几个月可以坐 宝宝几个月坐学步车 宝宝几个月可以坐学步车 孕妇几个月不能坐飞机 婴儿几个月坐 几个月宝宝可以坐 婴儿几个月可以坐 四个月宝宝能坐吗 几个月可以坐学步车 六个月宝宝坐姿势图解 6个月可以坐学步车吗 怀孕一个月能坐飞机吗 怀孕几个月不能坐飞机 宝宝几个月坐腰凳 宝宝几个月可以坐腰凳 危险驾驶罪坐几个月 几个月坐学步车 怀孕一个月可以坐飞机吗 三个月宝宝可以坐吗 宝宝几个月能坐 几个月坐 5个月宝宝能坐吗 2个月的宝宝坐飞机 5个月大女婴被坐死 几个月的宝宝可以坐推车 坐月子月子餐 产妇坐月子