历史上的今天
返回首页

历史上的今天

今天是:2025年02月27日(星期四)

正在发生

2020年02月27日 | 用C51单片机把只带的ADC(12bit)转换为RS232输出

2020-02-27 来源:51hei

#include "reg51.h"         // STC8G1K08A-SOP8  

#include "intrins.h"


/*

  STC8G1K08A-SOP8 

  读取 VCC值 ,先发送出去

  然后 循环开始 读取ch4的 (P55 ,第3脚)值 发送出去 

*/


sfr     ADC_CONTR   =   0xbc;

sfr     ADC_RES     =   0xbd;

sfr     ADC_RESL    =   0xbe;

sfr     ADCCFG      =   0xde;

sbit    EADC        =   IE^5;


sfr P3M1=0xb1;

sfr P3M0=0xb2;

sfr P5M1=0xc9;

sfr P5M0=0xca;


sfr AUXR =0x8e;


unsigned int myADC;

bit bFlag;

int *BGV;

bit busy;  

#define BRT (65536-11059200UL/115200/4)


void ADC_Isr() interrupt 5

{

    ADC_CONTR &= ~0x20;                         //清中断标志

    

        ADCCFG=0x20;        //右对齐


        myADC= (ADC_RES<<8) + ADC_RESL ;

//        P0 = ADC_RES;   //High 2bit

//  P2 = ADC_RESL;   //Low 8bit


        ADC_CONTR |= 0x40; 

        bFlag=1;

}


void UartISR() interrupt 4

{

        if(TI)

        {

                TI=0;

                busy=0;

        }

        if(RI)

                RI=0;


}


void UartInit()

{

        SCON=0x50;

        TMOD=0x0;

        TL1= BRT;

        TH1= BRT>>8;

        TR1=1;

        AUXR=0x40;

        busy=0;

}

void UartSend( char dat)

{

        while(busy);

        busy=1;

        SBUF=dat;

}

void ADCInit()

{

   ADCCFG=0x2f;

   ADC_CONTR=0x8f;// Bandgap voltage

}

int ADCRead()

{

   int res;

   ADC_CONTR|=0x40;

   _nop_();

   _nop_();

   while(!(ADC_CONTR & 0x20));

   ADC_CONTR &=~0x20;

   res=(ADC_RES<<8)|ADC_RESL;

   return res;

}



void main()

{

        int res,vcc,adc,i;

    

        P5M0=0;

        P5M1=0;

        

        BGV=(int idata*)0xef;

        ADCInit();

        UartInit();


        ES=1;

        EA=1;


                ADCRead();

                ADCRead();

                res=0;

                for(i=0;i<8;i++)

                        res+=ADCRead();

                res>>=3;

                vcc=(int)(4095L**BGV/res);


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



        ADCCFG = 0x0f;                          //set sysCLk

    ADC_CONTR = 0x84;          //使能并启动ADC模块 0x84读通道4(P55 ,第3脚),        0x8f读通道F:BGV值

    EADC = 1;                 //使能ADC中断                 //0x85读通道5(P54 ,第1脚)

    EA = 1;                                                                                 //0x83读通道3(P33 ,第8脚)

        ADC_CONTR |= 0x40;                 //Run ADC change         //0x82读通道2(P32 ,第7脚)

                                                                                                 //P30,P31为程序下载口Rx,Tx

        res=0;


    while (1) 

        {

           if(bFlag)

           {

                   i++; 

                   res+=myADC;

                   bFlag=0;

           }

           if(i>=8)

           {

                    res>>=3;

                        adc=(int)(4095L**BGV/res);

                        UartSend(adc>>8);UartSend(adc);         //这里 循环 输出 ADC的电压,

                        res=0;

                        i=0;

           }

        }




}


推荐阅读

史海拾趣

Frequency Devices公司的发展小趣事

为了保证产品质量,Frequency Devices公司建立了完善的质量管理体系。公司引入了先进的生产设备和检测技术,对原材料采购、生产加工、成品检验等各个环节进行严格把控。同时,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。这些措施有效保障了产品的质量和稳定性,赢得了客户的信赖和好评。

Bliley Technologies Inc公司的发展小趣事

Bliley Technologies Inc.的历史可以追溯到1930年,当时它作为Bliley压电公司成立,专注于为业余无线电市场生产石英晶体。石英晶体的精确频率控制特性使其成为无线电通信领域的理想选择。随着技术的不断进步和市场需求的扩大,Bliley很快发现其产品的潜力远不止于此。到了20世纪30年代中期,Bliley的客户和产品范围迅速扩展到新兴的军事和商业通信领域,公司也因此更名为Bliley Electric Company。这一转变标志着Bliley从一家小型压电公司成长为晶振行业的佼佼者。

DIPTRONICS MANUFACTURING INC公司的发展小趣事

在稳定国内市场的基础上,圜达实业积极拓展海外市场。凭借优良的品质和快速的交期,公司的产品逐渐打入国际市场,并赢得了众多客户的信赖。如今,圜达实业的产品已营销至全球100余个国家,遍及五大洲。

Gould Fiber Optics公司的发展小趣事
确保电源电路中的接地良好,避免接地不良引起的噪声和干扰。对于数字电路和模拟电路共存的电源系统,应采用模拟地和数字地分开接地的方式。
中科芯(CKS)公司的发展小趣事

近年来,面对全球芯片市场的激烈竞争和内外部环境的挑战,中科芯坚持创新驱动发展战略,加大市场开拓和科技攻关力度。通过优化产品结构、提升产品质量和降低成本等措施,公司实现了营业收入和净利润的稳步增长。一季度,中科芯的营业收入较正常年度增长24%,净利润增长83%,新签合同增长50%以上。这一成绩的取得充分展示了公司的市场竞争力和发展潜力。

Antelec公司的发展小趣事

在电子行业竞争日益激烈的环境下,Antelec公司深知持续创新的重要性。公司不断加大研发投入,引进先进的研发设备和人才,推动技术升级和产品创新。同时,公司还积极关注行业发展趋势和客户需求变化,及时调整产品策略和市场布局,保持了在市场中的领先地位。

问答坊 | AI 解惑

三相正弦交流電路

三相正弦交流電路…

查看全部问答>

【FPGA设计问题】连续读取RAM的问题

连续读取RAM中的数据,组成流水线进行计算,但是发现读取RAM时读到的数据有时候不正确,经常是第一个数据有错误,请问一下,有没有什么稳定的设计去连续读取RAM的?我的设计是reg [7:0] ReadNum;if (ReadNum[0])begin     Dout ...…

查看全部问答>

如何在c51中定义一个全局变量

如何在c51中定义一个全局变量…

查看全部问答>

51 控制的步进电机

#include\"reg52.h\" //#include\"intrins.h\" #define uchar unsigned char #define uint unsigned int bit front_move=1, back_move; sbit key1=P3^2; sbit key2=P3^3; sbit key3=P3^4; //uchar jzaj(void); //单4拍正转 zheng[]={0x01 ...…

查看全部问答>

帮忙算一下GPRS的资费啊。。

昨天去移动开GPRS的卡,不知道选什么套餐哦。。具体需要按照流量来区分的。 这个GPRS的流量怎么计算啊?…

查看全部问答>

什么是Re-enumerating Devices

最近我阅读关于USB测试的一个英文资料,不知道Re-enumerating Devices具体什么意思…

查看全部问答>

串口中断进不去,急?

  我是用72324,外部4MHz晶体,用inDART硬件仿真,现在有两个问题:   1,调试通信不成功,但用inDART下的DataBlaze完全正常,读写都正常?没办法我先配置成内部振荡,可以进入硬件仿真,只是速度慢?   2,我的S ...…

查看全部问答>

问题请教

请问各位,我用的是MSP430F149进行试验,在连着仿真器的时候出来的效果不较好,可是当单独使用外接电源的时候感觉差的挺多的,我想问问大家有内有于建国,还有应该怎么样解决啊?谢谢啦!…

查看全部问答>