找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 7992|回復(fù): 14
收起左側(cè)

STC8G1K08A--SOP8查詢ADC串口發(fā)送10位ADC值

  [復(fù)制鏈接]
ID:796012 發(fā)表于 2022-6-4 11:26 | 顯示全部樓層 |閱讀模式
#include "STC8G.h"  //6路10位高速ADC(8路PWM可當(dāng)8路D/A使用)  00 0000 0000
#include "intrins.h"
unsigned  int dy;unsigned  char tempData[9];/*MCU發(fā)送到串行口的數(shù)據(jù)*/unsigned  char shuzi[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};/*數(shù)組串行口顯示數(shù)值用*/
void UartInit() //9600bps@11.0592MHz
{
  SCON=0x50;/*8位數(shù)據(jù),可變波特率*/AUXR|=0x40;/*定時(shí)器時(shí)鐘1T模式*/AUXR &= 0xFE;/*串口1選擇定時(shí)器1為波特率發(fā)生器*/TMOD&=0x0F;/*設(shè)置定時(shí)器模式*/
        TL1=0xE0;/*設(shè)置定時(shí)初始值*/TH1=0xFE;/*設(shè)置定時(shí)初始值*/ET1= 0;/*禁止定時(shí)器%d中斷*/TR1 = 1;/*定時(shí)器1開始計(jì)時(shí)*/
}
void LED1()
{
     P5M1=0;P5M0=0x20;//推挽輸出
}
void SendData(unsigned char dat)/* 串口發(fā)送字節(jié)數(shù)據(jù)函數(shù) 參數(shù)是你要發(fā)送的字節(jié) */
{
     SBUF = dat;/*把要發(fā)送的數(shù)據(jù)給了SBUF寄存器*/while(!TI);/*等待數(shù)據(jù)發(fā)送完成*/TI = 0;/*清除發(fā)送完成標(biāo)志位*/
}
void SendString(unsigned char *puf)   //發(fā)送一個(gè)字符串  
{
        while(*puf!='\0')/*遇到空格跳出循環(huán)*/{SendData(*puf);puf++;}SendData('\r');/*回車*/SendData('\n');/*換行*/        
}
void adccx()  //?只有8位數(shù)據(jù) 255
{
   ADC_CONTR |= 0x40;          //啟動(dòng)AD轉(zhuǎn)換
   _nop_();
   _nop_();
   while (!(ADC_CONTR & 0x20));//查詢ADC完成標(biāo)志
   ADC_CONTR &= ~0x20;         //清完成標(biāo)志
         //dy = ADC_RES+ADC_RESL;    //只讀取8位ADC結(jié)果
         ADC_RESL=ADC_RESL&0XC0;     //讀取10位的低字節(jié)2位
         dy = (ADC_RES << 2)|ADC_RESL>>6;//讀取10位ADC結(jié)果
}
void adczh()
{
        adccx();tempData[0]=shuzi[dy/1000]; tempData[1]=shuzi[dy%1000/100];tempData[2]=shuzi[dy%100/10];  tempData[3]=shuzi[dy%10];   
        SendString(tempData);//由0-9發(fā)送串口數(shù)值
}
void main()
{
          unsigned char x =0; /* 定義一個(gè)8位變量 用于接收串口接收的字節(jié) */
    P5M0 = 0x00;P5M1 = 0x10; /*設(shè)置ADC4(P5.4)為ADC口*/LED1(); /* IO設(shè)置*/ UartInit(); // 串口初始化
    P_SW2 |= 0x80;ADCTIM = 0x3f;/*設(shè)置ADC內(nèi)部時(shí)序*/P_SW2 &= 0x7f;ADCCFG = 0x0f;/*設(shè)置ADC時(shí)鐘為系統(tǒng)時(shí)鐘/2/16*/ADC_CONTR = 0x80;/*使能ADC模塊*/
    while (1)
    {
     adczh();  
     if (RI)// 如果串口接收到數(shù)據(jù)
     {
     RI = 0;      //清中斷標(biāo)志                         
     x =SBUF;
                 SendData(SBUF);     // 把接收的數(shù)據(jù)再發(fā)送出去
     if (x == 0x02)
     {
     P55 = !P55;  //翻轉(zhuǎn)led狀態(tài)
     }
     }
    }
}
void Uart() interrupt 4
{       
        if (RI)/*接收中斷標(biāo)志位*/{RI = 0;/*清除RI位*/}if (TI)/*發(fā)送中斷標(biāo)志位*/{TI = 0;/*清除TI位*/}
}

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:796012 發(fā)表于 2022-6-4 11:28 | 顯示全部樓層
程序是拼湊修改的,供黑友一起學(xué)習(xí)琢磨
回復(fù)

使用道具 舉報(bào)

ID:796012 發(fā)表于 2022-6-4 14:04 | 顯示全部樓層
把主函數(shù)那ADC_ADC_CONTR = 0x80;/*使能ADC模塊*/   修改成 = 0x84;/*使能ADC模塊 打開ADC模塊 將ADC引腳設(shè)置到P5.4*/  
以下是ADC5-0通道選擇:0x85 0x84  0x83 0x82 0x81 0x80
/*低位權(quán)值:8421。  P3.0/ADC0:0000  P3.1/ADC1:0001  P3.2/ADC2:0010  P3.3/ADC3:0011  P5.4/ADC4:0100  P5.5/ADC5:0101*/
回復(fù)

使用道具 舉報(bào)

ID:546224 發(fā)表于 2022-7-12 19:22 | 顯示全部樓層
“dy = (ADC_RES << 2)|ADC_RESL>>6;//讀取10位ADC結(jié)果”
這句確定可以正常運(yùn)行嗎?ADC_RES是8位的值,左移兩位就會(huì)把高兩位結(jié)果丟掉
應(yīng)該先把ADC_RES的值賦值給一個(gè)16位變量后再左移
回復(fù)

使用道具 舉報(bào)

ID:796012 發(fā)表于 2022-7-16 14:23 | 顯示全部樓層
kiki900330 發(fā)表于 2022-7-12 19:22
“dy = (ADC_RES >6;//讀取10位ADC結(jié)果”
這句確定可以正常運(yùn)行嗎?ADC_RES是8位的值,左移兩位就會(huì)把高兩 ...

沒仔細(xì)研究過,我這精度要求不是很高,就很久沒琢磨了。放在太陽能電路上,夠12伏就升壓供小愛音箱,低于11伏就關(guān)停。運(yùn)行了半個(gè)月吧,還行
回復(fù)

使用道具 舉報(bào)

ID:229641 發(fā)表于 2022-7-16 16:20 來自手機(jī) | 顯示全部樓層
玉萌業(yè)余發(fā)展 發(fā)表于 2022-7-16 14:23
沒仔細(xì)研究過,我這精度要求不是很高,就很久沒琢磨了。放在太陽能電路上,夠12伏就升壓供小愛音箱,低于 ...

這個(gè)片子的例程大佬有嗎?能不能分享一下?
回復(fù)

使用道具 舉報(bào)

ID:188720 發(fā)表于 2022-7-21 09:34 | 顯示全部樓層
觸景情傷 發(fā)表于 2022-7-16 16:20
這個(gè)片子的例程大佬有嗎?能不能分享一下?

去看STC官方提供的技術(shù)手冊(cè),例程非常豐富。
回復(fù)

使用道具 舉報(bào)

ID:639666 發(fā)表于 2023-2-7 16:03 | 顯示全部樓層
玉萌業(yè)余發(fā)展 發(fā)表于 2022-6-4 14:04
把主函數(shù)那ADC_ADC_CONTR = 0x80;/*使能ADC模塊*/   修改成 = 0x84;/*使能ADC模塊 打開ADC模塊 將ADC引腳設(shè) ...

能給個(gè)完整電路圖嗎?電壓檢測(cè)端子是芯片的第1腳嗎?
回復(fù)

使用道具 舉報(bào)

ID:1042619 發(fā)表于 2023-2-9 16:57 | 顯示全部樓層
   感謝樓主精彩分享! 如有需要也可參考STC-ISP 6.91J一體化軟件范例程序:下載STC8G系列ADC-基本操作(查詢方式)范例代碼
   jpg.200.png
#include "reg51.h"
#include "intrins.h"

sfr     ADC_CONTR   =   0xbc;
sfr     ADC_RES     =   0xbd;
sfr     ADC_RESL    =   0xbe;
sfr     ADCCFG      =   0xde;

sfr     P_SW2   =   0xba;
#define ADCTIM  (*(unsigned char volatile xdata *)0xfea8)

sfr     P0M1    =   0x93;
sfr     P0M0    =   0x94;
sfr     P1M1    =   0x91;
sfr     P1M0    =   0x92;
sfr     P2M1    =   0x95;
sfr     P2M0    =   0x96;
sfr     P3M1    =   0xb1;
sfr     P3M0    =   0xb2;
sfr     P4M1    =   0xb3;
sfr     P4M0    =   0xb4;
sfr     P5M1    =   0xc9;
sfr     P5M0    =   0xca;

void main()
{
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;

    P1M0 = 0x00;                                //設(shè)置P1.0為ADC口
    P1M1 = 0x01;
    P_SW2 |= 0x80;
    ADCTIM = 0x3f;                              //設(shè)置ADC內(nèi)部時(shí)序
    P_SW2 &= 0x7f;
    ADCCFG = 0x0f;                              //設(shè)置ADC時(shí)鐘為系統(tǒng)時(shí)鐘/2/16
    ADC_CONTR = 0x80;                           //使能ADC模塊

    while (1)
    {
        ADC_CONTR |= 0x40;                      //啟動(dòng)AD轉(zhuǎn)換
        _nop_();
        _nop_();
        while (!(ADC_CONTR & 0x20));            //查詢ADC完成標(biāo)志
        ADC_CONTR &= ~0x20;                     //清完成標(biāo)志
        P2 = ADC_RES;                           //讀取ADC結(jié)果
    }
}


回復(fù)

使用道具 舉報(bào)

ID:796012 發(fā)表于 2023-3-20 14:37 | 顯示全部樓層
大漠孤煙001 發(fā)表于 2023-2-9 16:57
感謝樓主精彩分享! 如有需要也可參考STC-ISP 6.91J一體化軟件范例程序:下載STC8G系列ADC-基本操作(查 ...

回復(fù)

使用道具 舉報(bào)

ID:1060517 發(fā)表于 2023-3-21 13:18 | 顯示全部樓層
請(qǐng)問STC8G1K08A誤觸發(fā)是什么原因
回復(fù)

使用道具 舉報(bào)

ID:796012 發(fā)表于 2023-5-17 09:02 | 顯示全部樓層
unsigned int dy;  dy=ADC_RES<<2|ADC_RESL;/*10位ADC*/       
回復(fù)

使用道具 舉報(bào)

ID:796012 發(fā)表于 2023-5-17 09:05 | 顯示全部樓層
unsigned int dy;  /*先聲明16位變量*/
dy=ADC_RES<<2|ADC_RESL;/*低2位和高8位拼成10位ADC*/       
回復(fù)

使用道具 舉報(bào)

ID:9486 發(fā)表于 2023-6-20 09:51 | 顯示全部樓層
電路圖有嗎,P5.4來檢測(cè)電壓?
回復(fù)

使用道具 舉報(bào)

ID:232366 發(fā)表于 2024-7-8 21:04 | 顯示全部樓層
玉萌業(yè)余發(fā)展 發(fā)表于 2023-5-17 09:05
unsigned int dy;  /*先聲明16位變量*/
dy=ADC_RES

此改動(dòng)后不知道為什么采樣口直接對(duì)地AD值還有2  變成2-1023了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表