欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: STC8G1K08A--SOP8查詢ADC串口發送10位ADC值 [打印本頁]

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


作者: 玉萌業余發展    時間: 2022-6-4 11:28
程序是拼湊修改的,供黑友一起學習琢磨
作者: 玉萌業余發展    時間: 2022-6-4 14:04
把主函數那ADC_ADC_CONTR = 0x80;/*使能ADC模塊*/   修改成 = 0x84;/*使能ADC模塊 打開ADC模塊 將ADC引腳設置到P5.4*/  
以下是ADC5-0通道選擇:0x85 0x84  0x83 0x82 0x81 0x80
/*低位權值: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*/
作者: kiki900330    時間: 2022-7-12 19:22
“dy = (ADC_RES << 2)|ADC_RESL>>6;//讀取10位ADC結果”
這句確定可以正常運行嗎?ADC_RES是8位的值,左移兩位就會把高兩位結果丟掉
應該先把ADC_RES的值賦值給一個16位變量后再左移
作者: 玉萌業余發展    時間: 2022-7-16 14:23
kiki900330 發表于 2022-7-12 19:22
“dy = (ADC_RES >6;//讀取10位ADC結果”
這句確定可以正常運行嗎?ADC_RES是8位的值,左移兩位就會把高兩 ...

沒仔細研究過,我這精度要求不是很高,就很久沒琢磨了。放在太陽能電路上,夠12伏就升壓供小愛音箱,低于11伏就關停。運行了半個月吧,還行
作者: 觸景情傷    時間: 2022-7-16 16:20
玉萌業余發展 發表于 2022-7-16 14:23
沒仔細研究過,我這精度要求不是很高,就很久沒琢磨了。放在太陽能電路上,夠12伏就升壓供小愛音箱,低于 ...

這個片子的例程大佬有嗎?能不能分享一下?
作者: 紅燒魚頭    時間: 2022-7-21 09:34
觸景情傷 發表于 2022-7-16 16:20
這個片子的例程大佬有嗎?能不能分享一下?

去看STC官方提供的技術手冊,例程非常豐富。
作者: lhxtzlhxtz    時間: 2023-2-7 16:03
玉萌業余發展 發表于 2022-6-4 14:04
把主函數那ADC_ADC_CONTR = 0x80;/*使能ADC模塊*/   修改成 = 0x84;/*使能ADC模塊 打開ADC模塊 將ADC引腳設 ...

能給個完整電路圖嗎?電壓檢測端子是芯片的第1腳嗎?
作者: 大漠孤煙001    時間: 2023-2-9 16:57
   感謝樓主精彩分享! 如有需要也可參考STC-ISP 6.91J一體化軟件范例程序:下載STC8G系列ADC-基本操作(查詢方式)范例代碼
  
#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;                                //設置P1.0為ADC口
    P1M1 = 0x01;
    P_SW2 |= 0x80;
    ADCTIM = 0x3f;                              //設置ADC內部時序
    P_SW2 &= 0x7f;
    ADCCFG = 0x0f;                              //設置ADC時鐘為系統時鐘/2/16
    ADC_CONTR = 0x80;                           //使能ADC模塊

    while (1)
    {
        ADC_CONTR |= 0x40;                      //啟動AD轉換
        _nop_();
        _nop_();
        while (!(ADC_CONTR & 0x20));            //查詢ADC完成標志
        ADC_CONTR &= ~0x20;                     //清完成標志
        P2 = ADC_RES;                           //讀取ADC結果
    }
}



作者: 玉萌業余發展    時間: 2023-3-20 14:37
大漠孤煙001 發表于 2023-2-9 16:57
感謝樓主精彩分享! 如有需要也可參考STC-ISP 6.91J一體化軟件范例程序:下載STC8G系列ADC-基本操作(查 ...


作者: 星緣夢    時間: 2023-3-21 13:18
請問STC8G1K08A誤觸發是什么原因
作者: 玉萌業余發展    時間: 2023-5-17 09:02
unsigned int dy;  dy=ADC_RES<<2|ADC_RESL;/*10位ADC*/       
作者: 玉萌業余發展    時間: 2023-5-17 09:05
unsigned int dy;  /*先聲明16位變量*/
dy=ADC_RES<<2|ADC_RESL;/*低2位和高8位拼成10位ADC*/       

作者: fyc4480    時間: 2023-6-20 09:51
電路圖有嗎,P5.4來檢測電壓?
作者: SHANWAZI    時間: 2024-7-8 21:04
玉萌業余發展 發表于 2023-5-17 09:05
unsigned int dy;  /*先聲明16位變量*/
dy=ADC_RES

此改動后不知道為什么采樣口直接對地AD值還有2  變成2-1023了




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1