您的位置 首页 基础

51单片机AD转化的程序

voidRead_init(unsignedcharCHA){unsignedcharAD_FIN=0;存储AD转换标志CHAamp;=0x07;选择ADC的8个接口中的

  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. unsigned char Read (void){
  12. unsigned char AD_FIN=0; //存储A/D转化标志
  13. ADC_CONTR |= 0x08; //发动A/D转化(0000 1000 令ADCS = 1)
  14. _nop_();
  15. _nop_();
  16. _nop_();
  17. _nop_();
  18. while (AD_FIN ==0){ //等候A/D转化完毕
  19. AD_FIN = (ADC_CONTR 0x10); //0001 0000测验A/D转化完毕否
  20. }
  21. ADC_CONTR = 0xE7; //1111 0111 清ADC_FLAG位, 封闭A/D转化,
  22. return (ADC_DATA); //回来A/D转化成果(8位)
  23. }

以上- 8位ADC程序模块(适用于STC12C2052AD系列)

C代码
  1. #include //单片机头文件
  2. #include //51根本运算(包含_nop_空函数)
  3. void DELAY_MS (unsigned int a){
  4. unsigned int i;
  5. while( a– != 0){
  6. for(i = 0; i < 600; i++);
  7. }
  8. }
  9. void UART_init (void){
  10. //EA = 1; //答应总中止(如不运用中止,可用//屏蔽)
  11. //ES = 1; //答应UART串口的中止
  12. TMOD = 0x20; //定时器T/C1工作方式2
  13. SCON = 0x50; //串口工作方式1,答应串口接纳(SCON = 0x40 时制止串口接纳)
  14. TH1 = 0xF3; //定时器初值高8位设置
  15. TL1 = 0xF3; //定时器初值低8位设置
  16. PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)
  17. TR1 = 1; //定时器发动
  18. }
  19. void UART_T (unsigned char UART_data){ //界说串口发送数据变量
  20. SBUF = UART_data; //将接纳的数据发送回去
  21. while(TI == 0); //查看发送中止标志位
  22. TI = 0; //令发送中止标志位为0(软件清零)
  23. }
  24. void Read_init (unsigned char CHA){
  25. unsigned char AD_FIN=0; //存储A/D转化标志
  26. CHA = 0x07; //挑选ADC的8个接口中的一个(0000 0111 清0高5位)
  27. ADC_CONTR = 0x40; //ADC转化的速度(0XX0 0000 其间XX操控速度,请依据数据手册设置)
  28. _nop_();
  29. ADC_CONTR |= CHA; //挑选A/D当时通道
  30. _nop_();
  31. ADC_CONTR |= 0x80; //发动A/D电源
  32. DELAY_MS(1); //使输入电压到达安稳(1ms即可)
  33. }
  34. unsigned char Read (void){
  35. unsigned char AD_FIN=0; //存储A/D转化标志
  36. ADC_CONTR |= 0x08; //发动A/D转化(0000 1000 令ADCS = 1)
  37. _nop_();
  38. _nop_();
  39. _nop_();
  40. _nop_();
  41. while (AD_FIN ==0){ //等候A/D转化完毕
  42. AD_FIN = (ADC_CONTR 0x10); //0001 0000测验A/D转化完毕否
  43. }
  44. ADC_CONTR = 0xE7; //1111 0111 清ADC_FLAG位, 封闭A/D转化,
  45. return (ADC_DATA); //回来A/D转化成果(8位)
  46. }
  47. void main (void){
  48. unsigned char R;
  49. UART_init();//串口初始程序
  50. Read_init(0);//ADC初始化
  51. P1M0 = 0x01; //P1.7~.0:0000 0001(高阻)//留意:更改ADC通道时须一起将对应的IO接口修改为高阻输入。
  52. P1M1 = 0x00; //P1.7~.0:0000 0000(强推)
  53. while(1){
  54. R = Read ();
  55. UART_T (R); //串口小秘书,将ADC读出值送入串口显现
  56. }
  57. }

以上- 8位ADC运用实例(适用于STC12C2052AD系列)

C代码
  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. unsigned int ADC_Read (void){
  12. unsigned char AD_FIN=0; //存储A/D转化标志
  13. ADC_CONTR |= 0x08; //发动A/D转化(0000 1000 令ADCS = 1)
  14. _nop_();
  15. _nop_();
  16. _nop_();
  17. _nop_();
  18. while (AD_FIN ==0){ //等候A/D转化完毕
  19. AD_FIN = (ADC_CONTR 0x10); //0001 0000测验A/D转化完毕否
  20. }
  21. ADC_CONTR = 0xE7; //1111 0111 清ADC_FLAG位, 封闭A/D转化,
  22. return (ADC_RES*4+ADC_RESL);//回来A/D转化成果(10位ADC数据高8位在ADC_RES中,低2位在ADC_RESL中)
  23. }

以上- 10位ADC程序模块(适用于STC12C5A60S2系列)

C代码
  1. #include //单片机头文件
  2. #include //51根本运算(包含_nop_空函数)
  3. void DELAY_MS (unsigned int a){
  4. unsigned int i;
  5. while( a– != 0){
  6. for(i = 0; i < 600; i++);
  7. }
  8. }
  9. void UART_init (void){
  10. //EA = 1; //答应总中止(如不运用中止,可用//屏蔽)
  11. //ES = 1; //答应UART串口的中止
  12. TMOD = 0x20; //定时器T/C1工作方式2
  13. SCON = 0x50; //串口工作方式1,答应串口接纳(SCON = 0x40 时制止串口接纳)
  14. TH1 = 0xF3; //定时器初值高8位设置
  15. TL1 = 0xF3; //定时器初值低8位设置
  16. PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)
  17. TR1 = 1; //定时器发动
  18. }
  19. void UART_T (unsigned char UART_data){ //界说串口发送数据变量
  20. SBUF = UART_data; //将接纳的数据发送回去
  21. while(TI == 0); //查看发送中止标志位
  22. TI = 0; //令发送中止标志位为0(软件清零)
  23. }
  24. void Read_init (unsigned char CHA){
  25. unsigned char AD_FIN=0; //存储A/D转化标志
  26. CHA = 0x07; //挑选ADC的8个接口中的一个(0000 0111 清0高5位)
  27. ADC_CONTR = 0x40; //ADC转化的速度(0XX0 0000 其间XX操控速度,请依据数据手册设置)
  28. _nop_();
  29. ADC_CONTR |= CHA; //挑选A/D当时通道
  30. _nop_();
  31. ADC_CONTR |= 0x80; //发动A/D电源
  32. DELAY_MS(1); //使输入电压到达安稳(1ms即可)
  33. }
  34. void ADC_Read (void){
  35. unsigned char AD_FIN=0; //存储A/D转化标志
  36. ADC_CONTR |= 0x08; //发动A/D转化(0000 1000 令ADCS = 1)
  37. _nop_();
  38. _nop_();
  39. _nop_();
  40. _nop_();
  41. while (AD_FIN ==0){ //等候A/D转化完毕
  42. AD_FIN = (ADC_CONTR 0x10); //0001 0000测验A/D转化完毕否
  43. }
  44. ADC_CONTR = 0xE7; //1111 0111 清ADC_FLAG位, 封闭A/D转化,
  45. }
  46. void main (void){
  47. UART_init();//串口初始程序
  48. Read_init(0);//ADC初始化
  49. P1M1 = 0x01; //P1.7~P1.0:0000 0001(高阻)//留意:更改ADC通道时须一起将对应的IO接口修改为高阻输入。
  50. P1M0 = 0x00; //P1.7~P1.0:0000 0000(强推)
  51. while(1){
  52. ADC_Read ();//调用ADC转化程序
  53. UART_T (ADC_RES); //串口小秘书,将ADC读出值高8位送入串口 0000 0000
  54. UART_T (ADC_RESL); //串口小秘书,将ADC读出值低2位送入串口 XXXX XX00
  55. }
  56. }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/256673.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部