找回密码
 立即注册

QQ登录

只需一步,快速开始

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

用C51单片机把只带的ADC(12bit)转换为RS232输出

[复制链接]
跳转到指定楼层
楼主
ID:115923 发表于 2020-2-21 17:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "reg51.h"         // STC8G1K08A-SOP8  
  2. #include "intrins.h"

  3. /*
  4.   STC8G1K08A-SOP8
  5.   读取 VCC值 ,先发送出去
  6.   然后 循环开始 读取ch4的 (P55 ,第3脚)值 发送出去
  7. */

  8. sfr     ADC_CONTR   =   0xbc;
  9. sfr     ADC_RES     =   0xbd;
  10. sfr     ADC_RESL    =   0xbe;
  11. sfr     ADCCFG      =   0xde;
  12. sbit    EADC        =   IE^5;

  13. sfr P3M1=0xb1;
  14. sfr P3M0=0xb2;
  15. sfr P5M1=0xc9;
  16. sfr P5M0=0xca;

  17. sfr AUXR =0x8e;

  18. unsigned int myADC;
  19. bit bFlag;
  20. int *BGV;
  21. bit busy;  
  22. #define BRT (65536-11059200UL/115200/4)

  23. void ADC_Isr() interrupt 5
  24. {
  25.     ADC_CONTR &= ~0x20;                         //清中断标志
  26.    
  27.         ADCCFG=0x20;        //右对齐

  28.         myADC= (ADC_RES<<8) + ADC_RESL ;
  29. //        P0 = ADC_RES;   //High 2bit
  30. //  P2 = ADC_RESL;   //Low 8bit

  31.         ADC_CONTR |= 0x40;
  32.         bFlag=1;
  33. }

  34. void UartISR() interrupt 4
  35. {
  36.         if(TI)
  37.         {
  38.                 TI=0;
  39.                 busy=0;
  40.         }
  41.         if(RI)
  42.                 RI=0;

  43. }

  44. void UartInit()
  45. {
  46.         SCON=0x50;
  47.         TMOD=0x0;
  48.         TL1= BRT;
  49.         TH1= BRT>>8;
  50.         TR1=1;
  51.         AUXR=0x40;
  52.         busy=0;
  53. }
  54. void UartSend( char dat)
  55. {
  56.         while(busy);
  57.         busy=1;
  58.         SBUF=dat;
  59. }
  60. void ADCInit()
  61. {
  62.    ADCCFG=0x2f;
  63.    ADC_CONTR=0x8f;// Bandgap voltage
  64. }
  65. int ADCRead()
  66. {
  67.    int res;
  68.    ADC_CONTR|=0x40;
  69.    _nop_();
  70.    _nop_();
  71.    while(!(ADC_CONTR & 0x20));
  72.    ADC_CONTR &=~0x20;
  73.    res=(ADC_RES<<8)|ADC_RESL;
  74.    return res;
  75. }


  76. void main()
  77. {
  78.         int res,vcc,adc,i;
  79.    
  80.         P5M0=0;
  81.         P5M1=0;
  82.        
  83.         BGV=(int idata*)0xef;
  84.         ADCInit();
  85.         UartInit();

  86.         ES=1;
  87.         EA=1;

  88.                 ADCRead();
  89.                 ADCRead();
  90.                 res=0;
  91.                 for(i=0;i<8;i++)
  92.                         res+=ADCRead();
  93.                 res>>=3;
  94.                 vcc=(int)(4095L**BGV/res);

  95.                 UartSend(vcc>>8);UartSend(vcc);          //这里先输出VCC电压


  96.         ADCCFG = 0x0f;                          //set sysCLk
  97.     ADC_CONTR = 0x84;          //使能并启动ADC模块 0x84读通道4(P55 ,第3脚),        0x8f读通道F:BGV值
  98.     EADC = 1;                 //使能ADC中断                 //0x85读通道5(P54 ,第1脚)
  99.     EA = 1;                                                                                 //0x83读通道3(P33 ,第8脚)
  100.         ADC_CONTR |= 0x40;                 //Run ADC change         //0x82读通道2(P32 ,第7脚)
  101.                                                                                                  //P30,P31为程序下载口Rx,Tx
  102.         res=0;

  103.     while (1)
  104.         {
  105.            if(bFlag)
  106.            {
  107.                    i++;
  108.                    res+=myADC;
  109.                    bFlag=0;
  110.            }
  111.            if(i>=8)
  112.            {
  113.                     res>>=3;
  114.                         adc=(int)(4095L**BGV/res);
  115.                         UartSend(adc>>8);UartSend(adc);         //这里 循环 输出 ADC的电压,
  116.                         res=0;
  117.                         i=0;
  118.            }
  119.         }



  120. }

复制代码

mA 232.rar

27.24 KB, 下载次数: 7, 下载积分: 黑币 -5

用C51 把只带的ADC12bit)转换为RS232输出

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

使用道具 举报

沙发
ID:465279 发表于 2020-2-27 00:00 来自手机 | 只看该作者
来学习的,谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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