久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

STC8G1K0A單片機為什么接收不對ADC值?

查看數: 2110 | 評論數: 18 | 收藏 2
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2024-1-11 06:50

正文摘要:

#include "STC8G.h" #define uint unsigned int #define uchar unsigned char #define FOSC 1105920L //系統頻率 #define BAUD 11520 //串口波特率 uint ADC1_DATA; uchar ADC1_H; uchar ADC1_L; void ...

回復

ID:72649 發表于 2024-1-13 09:20
wulin 發表于 2024-1-13 06:11
首先要說清楚所選用的MCU具體型號,你標題寫STC8G1K0A,在15、16樓又說是STC8G1H08A。實際上你說的型號都 ...

把定時器2修改為定時器1后,可以發送數據了,謝謝
ID:213173 發表于 2024-1-13 06:11
hjx5548 發表于 2024-1-12 20:14
能不能把你的代碼發上來參考一下,STC8H1K08A的8腳單片機,ADC采集是P32。

首先要說清楚所選用的MCU具體型號,你標題寫STC8G1K0A,在15、16樓又說是STC8G1H08A。實際上你說的型號都不存在。估猜實際型號是STC8G1K08A-PIN8。那么問題就非常明確了。STC8G1K08A只有定時器0和定時器1,沒有定時器2。你用定時器2作波特率發生器怎么能成功?
ID:72649 發表于 2024-1-12 20:14
wulin 發表于 2024-1-11 22:12

能不能把你的代碼發上來參考一下,STC8H1K08A的8腳單片機,ADC采集是P32。
ID:72649 發表于 2024-1-12 15:49
hjx5548 發表于 2024-1-11 14:41
謝謝啦,有空我試一下

STC8G1H08A-PIN8 單片機的P32
ID:72649 發表于 2024-1-12 13:52
wulin 發表于 2024-1-11 22:12

#include "STC8G.h"
#include "intrins.h"
#define uchar unsigned char     
#define uint unsigned int     
#define ADCTIM  (*(unsigned char volatile xdata *)0xfea8)
#define ADC_POWER   0x80                        //ADC電源控制位1000 0000
#define ADC_START   0x40                        //ADC啟動控制位0100 0000
#define ADC_FLAG    0x20                        //ADC完成標志位0010 0000
#define ADC_EPWMT   0x10                        //ADC使能控制位0001 0000   

#define FOSC 1105920L //系統頻率
#define BAUD 11520 //串口波特率

uint ADC_A,ADC_B;

void Delay1ms()                //@11.0592MHz
{
        unsigned char i, j;

        i = 15;
        j = 90;
        do
        {
                while (--j);
        } while (--i);
}
/*-----------------------------
  初始化ADC
------------------------------*/
void UartInit() //可變波特率設置 115200bps@11.0592MHz
{
        SCON = 0x50; //8位可變波特率
        AUXR |= 0x14; //T2為1T模式
        T2L = (65536 - (FOSC/4/BAUD)); //設置波特率重裝值
        T2H = (65536 - (FOSC/4/BAUD))>>8;
}

void send_byte(uchar by)
{
        SBUF = by;
        while (!TI);
        TI = 0;
}

void Init_ADC()
{        //ADC 控制器  電源  啟動  完成  --   15通道模擬選擇位  單片機STC8G1K08A-8PIN   P30 0000 P31  0001 P32  0010  P33  0011  P54  0100   P55   0101
        //ADC_CONTR    B7    B6    B5   B4   B3   B2   B1   B0
        P_SW2 |= 0x80;                        //打開
        ADCTIM = 0x3f;                        //設置 ADC 內部時序
        P_SW2 &= 0x7f;                        //關閉
        ADCCFG = 0x27;                        //設置ADC結果右對齊,速度為512系統時鐘
        ADC_RES=0;                                //清除ADC_RES存儲器以前的結果
        ADC_RESL=0;
        ADC_CONTR=ADC_POWER; //ADC 開啟電源
        Delay1ms();                                //上電延時1ms
}
/*----------------------------
        讀取ADC結果
----------------------------*/
uint GetADCResult(uchar CH)
{
        ADC_CONTR=ADC_POWER|ADC_START|CH;//啟動轉換1100 1000   STC8G1K08A-8PIN的CH   P30 0000 P31  0001 P32  0010  P33  0011  P54  0100   P55   0101
        _nop_();_nop_();                                //小延時
        while (!(ADC_CONTR & ADC_FLAG));//等待ADC轉換完成標志置位 1010 0000
        ADC_CONTR &=~ADC_FLAG;                        //清完成標志
        return ADC_RES<<8|ADC_RESL;                //返回十位ADC結果
}

void main ()
{         
        P3M0 = 0x00;
        P3M1 = 0x04;

        P5M0 = 0x00;
        P5M1 = 0x00;
        Init_ADC();
        while(1)
        {
                ADC_A=GetADCResult(2);
//                ADC_B=GetADCResult(1);
                //添加顯示/控制代碼
                                        send_byte(ADC_A/1000 + 0x30);
                send_byte(ADC_A%1000/100 + 0x30);
                send_byte(ADC_A%100/10 + 0x30);
                send_byte(ADC_A%10 + 0x30);
                send_byte(0x0a);
                Delay100ms();
                Delay100ms();
                Delay100ms();        
        }
}
//這個是你以前帖子,加入了串口發送,也是無法發送ADC  ,芯片為8腳的STC8G1K08A ,ADC采集口P32

ID:72649 發表于 2024-1-12 13:25

設置P32為ADC口,需要修改哪里?
ID:384109 發表于 2024-1-12 08:25
#define BAUD 11520 //串口波特率,先單獨測試串口吧
ID:213173 發表于 2024-1-11 22:12
hjx5548 發表于 2024-1-11 20:37
#include "STC8G.h"
#include "intrins.h"
#define uint unsigned int


ID:72649 發表于 2024-1-11 20:49
hjx5548 發表于 2024-1-11 14:41
謝謝啦,有空我試一下

ADC_CONTR |=0x40;//啟動AD交換 后4位表示采集的通道 ADC0口 P30 0000 P31  0001 P32  0010  P33  0011  P54  0100   P55   0101
ID:72649 發表于 2024-1-11 20:41
cocolala 發表于 2024-1-11 09:43
1、沒有看到你用到哪個IO口作為ADC口。需要選擇通道打開。
    2、這里也用到了串口,當然需要保證串 ...

代碼是什么型號單片機?
ID:213173 發表于 2024-1-11 16:02
hjx5548 發表于 2024-1-11 14:42
定時器后面還有代碼要用的。先謝謝了

上面改過的程序實測串口可以正常發送ADC轉換值。問題可能是你串口中斷與send_byte(uchar by)函數TI處理沖突。
ID:72649 發表于 2024-1-11 14:42
wulin 發表于 2024-1-11 10:47
用不到的函數屏蔽掉

定時器后面還有代碼要用的。先謝謝了
ID:72649 發表于 2024-1-11 14:41
cocolala 發表于 2024-1-11 09:43
1、沒有看到你用到哪個IO口作為ADC口。需要選擇通道打開。
    2、這里也用到了串口,當然需要保證串 ...

謝謝啦,有空我試一下
ID:213173 發表于 2024-1-11 10:47
用不到的函數屏蔽掉
  1. #include "STC8G.h"
  2. #include "intrins.h"
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define FOSC 1105920L //系統頻率
  6. #define BAUD 11520 //串口波特率
  7. uint ADC1_DATA;
  8. uchar ADC1_H;
  9. uchar ADC1_L;

  10. void Delay1us() //@11.0592MHz
  11. {
  12.         unsigned char i;
  13.         i = 3;
  14.         while (--i);
  15. }

  16. void Delay100ms() //@11.0592MHz
  17. {
  18.         unsigned char i, j, k;
  19.         i = 6;
  20.         j = 157;
  21.         k = 59;
  22.         do
  23.         {
  24.                 do
  25.                 {
  26.                         while (--k);
  27.                 }
  28.                 while (--j);
  29.         } while (--i);
  30. }
  31. /*
  32. void Timer0Init() //1毫秒@11.0592MHz
  33. {
  34.         AUXR |= 0x80; //定時器時鐘1T模式
  35.         TMOD &= 0xF0; //設置定時器模式
  36.         TL0 = 0xCD; //設置定時初值
  37.         TH0 = 0xD4; //設置定時初值
  38.         ET0 = 1; //開啟定時器0
  39.         TR0 = 1; //定時器0開始計時
  40. }*/

  41. void UartInit() //可變波特率設置 115200bps@11.0592MHz
  42. {
  43.         SCON = 0x50; //8位可變波特率
  44.         AUXR |= 0x14; //T2為1T模式
  45.         T2L = (65536 - (FOSC/4/BAUD)); //設置波特率重裝值
  46.         T2H = (65536 - (FOSC/4/BAUD))>>8;
  47. //        ES=1;
  48. //        EA=1;
  49. }
  50. /*
  51. void time0() interrupt 1
  52. {
  53.         TL0 = 0xCD; //設置定時初值
  54.         TH0 = 0xD4; //設置定時初值
  55. }*/
  56. /*
  57. void Uart() interrupt 4 using 1
  58. {
  59. //        unsigned char temp;
  60.         if (RI)
  61.         {
  62.                 RI = 0; //清除RI位
  63. //                temp = SBUF; //緩存串口數據
  64.         }
  65.         else
  66.         {
  67.                 TI = 0; //清除TI位
  68.         }
  69. }*/
  70.       
  71. void send_byte(uchar by)
  72. {
  73.         SBUF = by;
  74.         while (!TI);
  75.         TI = 0;
  76. }
  77.       
  78. void main()
  79. {
  80.         P3M0=0x00; P3M1=0x01;//設置P30為ADC口,高阻輸入模式
  81.         P5M0=0x00; P5M1=0x00;
  82. //        Timer0Init();
  83.         UartInit();
  84. //        P3M0=0x00;
  85. //        P3M1=0x01;
  86.         P_SW2 |=0x80;
  87.         ADCTIM=0x3f; //設置ADC內部時序
  88.         P_SW2 &=0x7f;
  89.         ADCCFG=0x2f; //右對齊,設置ADC時間系總統時間/2/16/16 和數據輸出格式
  90.         ADC_CONTR=0x80; //使能 ADC 模塊
  91.         Delay100ms(); //等待系統穩定
  92.         while(1)
  93.         {
  94.                 ADC_CONTR |=0x40;//啟動AD交換 后4位表示采集的通道 ADC0口
  95.                 Delay1us();
  96.                 while(!(ADC_CONTR&0x20));//查詢ADC完成標志
  97.                 ADC_CONTR &=~0x20;//清完成標志               
  98.                 ADC1_H=ADC_RES;
  99.                 ADC1_L=ADC_RESL;
  100.                 ADC1_DATA=ADC1_H*256 + ADC1_L;
  101.                 send_byte(ADC1_DATA/1000 + 0x30);
  102.                 send_byte(ADC1_DATA%1000/100 + 0x30);
  103.                 send_byte(ADC1_DATA%100/10 + 0x30);
  104.                 send_byte(ADC1_DATA%10 + 0x30);
  105.                 send_byte(0x0a);
  106.                 Delay100ms();
  107.                 Delay100ms();
  108.                 Delay100ms();
  109.         }
  110. }
復制代碼
ID:226055 發表于 2024-1-11 09:43
    1、沒有看到你用到哪個IO口作為ADC口。需要選擇通道打開。
    2、這里也用到了串口,當然需要保證串口部分程序也是沒問題的。


    3、上面是ADC部分STC8H單片機的配置參考。程序應該都是通用的,你看下自己的ADC選擇通道修改下。附件我把艾克姆的例程正好是ADC采集串口發送的發你參考下。






ADC.rar

41.61 KB, 下載次數: 6

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品视频一区二区三区 | 欧美日韩亚洲一区 | 成人三级av| 91久久国产综合久久91精品网站 | 成人一区二区视频 | 久久成人一区二区三区 | 久久亚洲春色中文字幕久久久 | www.日本国产 | 91欧美精品成人综合在线观看 | 亚洲一区二区免费电影 | 91久久精品一区二区二区 | 中文区中文字幕免费看 | 91视频电影 | 免费久久久久久 | 日本精品一区 | www.久久久.com | 国产1区2区 | 亚洲视频在线观看 | 国产伦精品一区二区三区高清 | 欧美二区在线 | 日韩一区二区三区在线视频 | 伊人久久综合 | 亚洲一区久久久 | 日韩欧美中文在线 | 伊人婷婷 | 密室大逃脱第六季大神版在线观看 | 成人影院av | 91中文字幕在线观看 | 国产精品污www一区二区三区 | 欧美一区二区在线免费观看 | 另类专区亚洲 | 涩涩导航 | 91豆花视频 | 视频1区 | 日韩成人影院 | 国产成人免费视频 | 精品一区二区三区在线观看 | 久久中文高清 | www.日本在线播放 | 久草新在线 | 一区二区av|