找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

基于STC15F2K60S2的AD轉(zhuǎn)換程序問題

查看數(shù): 2956 | 評(píng)論數(shù): 7 | 收藏 2
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時(shí)間: 2020-8-15 20:16

正文摘要:

自己寫了段測電壓的基于STC15F2K60S2的AD轉(zhuǎn)換。不過看了多遍不知道錯(cuò)在哪。大家?guī)兔χ附滔。謝謝! #include<STC15F2K60S2.H> #define uint unsigned int uint a; void main() {   &nb ...

回復(fù)

ID:619500 發(fā)表于 2020-8-18 19:47
wulin 發(fā)表于 2020-8-18 19:31
按你的意圖給你重新寫了個(gè)ADC轉(zhuǎn)換程序,如果還玩不轉(zhuǎn)只能懷疑你的硬件電路有問題。

嗯。我買新材料再做做看。非常感謝你!
ID:213173 發(fā)表于 2020-8-18 19:31
qjyvi2 發(fā)表于 2020-8-18 14:38
找了兩天,還是沒找到哪里錯(cuò)誤。有點(diǎn)絕望……。

按你的意圖給你重新寫了個(gè)ADC轉(zhuǎn)換程序,如果還玩不轉(zhuǎn)只能懷疑你的硬件電路有問題。
  1. /*---------------------------------
  2. 此程序適合STC15W系列單片機(jī)
  3. ------------------------------------*/
  4. #include<STC15F2K60S2.H>
  5. #include <intrins.h>
  6. #define uint unsigned int                         //宏定義變量uint為無符號(hào)整型數(shù)據(jù)(0-65535)
  7. #define uchar unsigned char                 //宏定義變量uchar為無符號(hào)字符型數(shù)據(jù)(0-255)
  8. //宏定義ADC的操作命令
  9. #define ADC_POWER   0x80                        //ADC power control dit (宏定義ADC電源控制位)1000 0000
  10. #define ADC_START   0x08                        //ADC start control dit (宏定義ADC啟動(dòng)控制位)0000 1000
  11. #define ADC_FLAG    0x10                        //ADC complete flag (宏定義ADC完成標(biāo)志位)    0001 0000
  12. #define ADC_SPEEDLL 0x00                        //420 clocks (宏定義540個(gè)時(shí)鐘)速度控制       0000 0000
  13. /*-----------------------------------------------------------------
  14.         1ms延時(shí)子程序(11.0592MHz 1T)
  15. ------------------------------------------------------------------*/
  16. void delayms(uint k)
  17. {
  18.         uint i,j;
  19.         for(i=k;i>0;i--)
  20.                 for(j=829;j>0;j--);
  21. }
  22. /*-----------------------------------------------------------------------------
  23.   InitADC 初始化ADC
  24. -----------------------------------------------------------------------------*/
  25. void InitADC()
  26. {
  27.         P1ASF=0x08;                                                //設(shè)置P1.3通道端口作為模擬輸入
  28.         ADC_RES=0;                                                //清除ADC_RES存儲(chǔ)器以前的結(jié)果
  29.         ADC_RESL=0;
  30.         ADC_CONTR=ADC_POWER|ADC_SPEEDLL;//ADC 開啟電源、轉(zhuǎn)換速度 1000 0000
  31.         delayms(1);                                                //上電延時(shí)1ms                                                                                       
  32. }
  33. /*----------------------------------------------------------------------------
  34. Get ADC Result(獲取ADC結(jié)果)
  35. ----------------------------------------------------------------------------*/
  36. uint Read(uchar CHA)                                      //獲取ADC結(jié)果
  37. {
  38.         ADC_CONTR=ADC_POWER|ADC_SPEEDLL|CHA|ADC_START;//啟動(dòng)轉(zhuǎn)換1000 1011
  39.     _nop_();                        //延時(shí)確保正確讀到ADC_CONTR寄存器的值
  40.     _nop_();
  41.     _nop_();
  42.     _nop_();
  43.         while(!(ADC_CONTR & ADC_FLAG));        //等待ADC轉(zhuǎn)換完成標(biāo)志置位 1001 1011
  44.         ADC_CONTR &=~ADC_FLAG;                           //清除完成標(biāo)志
  45.         return(ADC_RES<<2|ADC_RESL);           //返回十位ADC結(jié)果
  46. }
  47. void main()
  48. {
  49.         uint temp;
  50.         P0M0 = 0x00;
  51.         P0M1 = 0x00;
  52.         P1M1 = 0x08;//設(shè)置P1.3高阻
  53.         P1M0 = 0x00;//設(shè)置P1.3高阻
  54.         P2M1 = 0x00;//設(shè)置P2推挽模式
  55.         P2M0 = 0xff;//設(shè)置P2推挽模式
  56.         P3M1 = 0x00;//設(shè)置P3.6~3.7推挽模式
  57.         P3M0 = 0xc0;//設(shè)置P3.6~3.7推挽模式
  58.         P4M0 = 0x00;
  59.         P4M1 = 0x00;
  60.         P5M0 = 0x00;
  61.         P5M1 = 0x00;
  62.         P6M0 = 0x00;
  63.         P6M1 = 0x00;
  64.         P7M0 = 0x00;
  65.         P7M1 = 0x00;
  66.         InitADC();
  67.         while(1)
  68.         {
  69.                 temp=Read(3);
  70.                 P2=temp>>2;
  71.                 P3=temp<<6;            
  72.                 delayms(500);
  73.         }        
  74. }
復(fù)制代碼



評(píng)分

參與人數(shù) 1黑幣 +30 收起 理由
qjyvi2 + 30 很給力!

查看全部評(píng)分

ID:619500 發(fā)表于 2020-8-18 14:38
wulin 發(fā)表于 2020-8-17 06:46
STC15系列單片機(jī)加電復(fù)位后端口默認(rèn)為準(zhǔn)雙向模式高電平(部分型號(hào)少數(shù)特殊功能端口例外)。樓主想高電平 ...

找了兩天,還是沒找到哪里錯(cuò)誤。有點(diǎn)絕望……。
ID:213173 發(fā)表于 2020-8-17 06:46
qjyvi2 發(fā)表于 2020-8-16 22:00
謝謝你。不過。這代碼我復(fù)制過去,還是不行。不知道會(huì)不會(huì)是我電路有問題。我電路是這么接的有錯(cuò)嗎。請指 ...

STC15系列單片機(jī)加電復(fù)位后端口默認(rèn)為準(zhǔn)雙向模式高電平(部分型號(hào)少數(shù)特殊功能端口例外)。樓主想高電平驅(qū)動(dòng)LED發(fā)光需要將P2和P3.6~3.7設(shè)置為推挽模式:
        P2M1 = 0x00;                        //設(shè)置P2推挽模式
        P2M0 = 0xff;                        //設(shè)置P2推挽模式
        P3M1 = 0x00;                        //設(shè)置P3.6~3.7推挽模式
        P3M0 = 0xc0;                        //設(shè)置P3.6~3.7推挽模式
樓主用此方法只能顯示10位2進(jìn)制AD轉(zhuǎn)換值,1.3V電壓經(jīng)轉(zhuǎn)換≈0100001010。
ID:213173 發(fā)表于 2020-8-16 06:44
  1. #include<STC15F2K60S2.H>

  2. #define uint unsigned int

  3. uint a;

  4. void main()
  5. {
  6.         P1M1 = 0x08;                        //設(shè)置P1.3高阻
  7.         P1M0 = 0x00;                        //設(shè)置P1.3高阻
  8.         P1ASF= 0x08;                        //選擇P1.3做模擬通道
  9.         ADC_CONTR=0x80;                        //打開ADC電源
  10.         for(a=50000;a>0;a--);        //等待電源穩(wěn)定
  11.         while(1)
  12.         {
  13.                 ADC_CONTR=0x8B;                        //啟動(dòng)轉(zhuǎn)換(速度控制420時(shí)鐘)1000 1011
  14. //                ADC_CONTR=0XEB;                        //選擇P1^3做模擬通道
  15. //                CLK_DIV=0X0;//adrj位置0
  16.                 for(a=10;a>0;a--);                //小延時(shí)
  17. //                if(ADC_CONTR&0X10==0)        //如何條件為真,ADC_FLAG已被置0,轉(zhuǎn)換完成
  18.                 while(!(ADC_CONTR & 0x10));//等待ADC轉(zhuǎn)換完成標(biāo)志置位 1001 1000
  19.                 ADC_CONTR &=~0x10;                        //清除轉(zhuǎn)換完成標(biāo)志
  20.                 P2=ADC_RES;
  21. //                ADC_RESL<<=6;
  22.                 P3=ADC_RESL<<6;
  23. //                for(a=21000000;a>0;a--);
  24.                 for(a=65535;a>0;a--);        //uint數(shù)據(jù)范圍0~65535
  25. //                ADC_CONTR=0XEB;//將ADC_FLAG置0,ADC_START置1,以繼續(xù)轉(zhuǎn)換               
  26.         }       
  27. }
復(fù)制代碼

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

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

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