单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:3899|回复:1
打印上一主题下一主题

STC8单片机ad数模转换速度电压源程序

[复制链接]
跳转到指定楼层
楼主
ID:460161发表于 2019-1-2 15:54|只看该作者回帖奖励
include "STC8.h"
#include "intrins.h"

typedef unsigned char BYTE;
typedef unsigned int WORD;

#define FOSC         11059200UL
#define BRT         (65536 - FOSC / 9600 / 4)

bit busy;
char wptr;
char rptr;
char buffer[16];

void Delay(WORD n)
{
   WORD x;

   while (n--)
   {
       x = 5000;
       while (x--);
   }
}

void UartIsr() interrupt 4 using 1
{
   if (TI)
   {
       TI = 0;
       busy = 0;
   }
   if (RI)
   {
       RI = 0;
       buffer[wptr++] = SBUF;
       wptr& = 0x0f;
   }
}

void UartInit()
{
   SCON = 0x50;
   TMOD = 0x00;
   TL1 = BRT;
   TH1 = BRT >> 8;
   TR1 = 1;
   AUXR = 0x40;
   wptr = 0x00;
   rptr = 0x00;
   busy = 0;
}

void UartSend(char dat)
{
   while (busy);
   busy = 1;
   SBUF = dat;
}

void UartSendStr(char *p)
{
   while (*p)
   {
       UartSend(*p++);
   }
}

void InitADC()
{
   P1M0 = 0xff;                    
   P1M1 = 0xff;
       P0M0 = 0xff;                      
   P0M1 = 0xff;    
       ADCCFG = 0x0f;                     //设置ADC时钟为系统时钟/2/16/16
   ADC_CONTR = 0x80;                   //使能ADC模块
}

BYTE GetADCResult(BYTE ch)
{
       ADC_CONTR |= (0x40+ch);
       _nop_();
   _nop_();


       _nop_();
   _nop_();
       _nop_();
   _nop_();_nop_();
   _nop_();_nop_();
   _nop_();_nop_();
   _nop_();_nop_();
   _nop_();_nop_();

   while (!(ADC_CONTR& 0x20));         //查询ADC完成标志
       ADC_CONTR& = ~ADC_FLAG;       //Close ADC
   ADC_CONTR& = ~0x20;               //清完成标志
   return ADC_RES;                   //读取ADC结果
}

void ShowResult(BYTE ch)
{
   //UartSend(ch);             //Show Channel NO.
   UartSend(GetADCResult(ch));     //Show ADC high 8-bit result

//if you want show 10-bit result, uncomment next line
//   SendData(ADC_LOW2);         //Show ADC low 2-bit result
}



void main()
{
   BYTE i=0;
       UartInit();
   ES = 1;
   EA = 1;
   //UartSendStr("Uart OK !\r\n");

       InitADC();               //Init ADC sfr

   while (1)
   {
           InitADC();        
           //UartSend(1);  
           ShowResult(11);
           Delay(100);      

           InitADC();        
           UartSend(2);  
           //ShowResult(12);
           Delay(100);      

           InitADC();        
           UartSend(3);  
           //ShowResult(13);
           Delay(100);      

           InitADC();
           UartSend(4);
           //ShowResult(14);          
           Delay(100);
          
   }
}
沙发
ID:838732发表于 2024-5-15 17:36|只看该作者
点赞,测试可用!

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

Powered by 单片机教程网