找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3652|回复: 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 单片机教程网

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