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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3624|回復: 1
打印 上一主題 下一主題
收起左側

STC12C5A60S2自帶AD與TL5615DA轉換芯片完成AD/DA轉換Keil程序(模擬串口發送)

[復制鏈接]
跳轉到指定樓層
樓主
ID:361044 發表于 2019-1-12 10:19 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

  1. /******************************************/


  2. /*************        用戶系統配置        **************/

  3. #define MAIN_Fosc                22118400L        //定義主時鐘, 模擬串口和和延時會自動適應。5~35MHZ

  4. /*************        以下宏定義用戶請勿修改        **************/
  5. #include        "reg51.H"
  6. #define        uchar        unsigned char
  7. #define uint        unsigned int
  8. /******************************************/

  9. sfr P1ASF     = 0x9D;        //12C5204AD/S2系列模擬輸入(AD或LVD)選擇
  10. sfr ADC_CONTR = 0xBC;        //帶AD系列
  11. sfr ADC_RES   = 0xBD;        //帶AD系列
  12. sfr ADC_RESL  = 0xBE;        //帶AD系列

  13. //                                                                7       6      5       4         3      2    1    0   Reset Value
  14. //sfr ADC_CONTR = 0xBC;                ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000        //AD 轉換控制寄存器
  15. #define ADC_OFF()        ADC_CONTR = 0
  16. #define ADC_ON                (1 << 7)
  17. #define ADC_90T                (3 << 5)
  18. #define ADC_180T        (2 << 5)
  19. #define ADC_360T        (1 << 5)
  20. #define ADC_540T        0
  21. #define ADC_FLAG        (1 << 4)        //軟件清0
  22. #define ADC_START        (1 << 3)        //自動清0
  23. #define ADC_CH0                0
  24. #define ADC_CH1                1
  25. #define ADC_CH2                2
  26. #define ADC_CH3                3
  27. #define ADC_CH4                4
  28. #define ADC_CH5                5
  29. #define ADC_CH6                6
  30. #define ADC_CH7                7


  31. /************* 本地變量聲明 **************/
  32. sbit        P_TXD1 = P3^1;


  33. /************* 本地函數聲明 **************/
  34. void        Tx1Send(uchar dat);
  35. void        PrintString(unsigned char code *puts);
  36. void          delay_ms(unsigned char ms);
  37. uchar        GetAdc8(uchar channel);        //channel = 0~7


  38. void TX_ADC(uchar chn, uchar adc)
  39. {
  40.         Tx1Send('A');
  41.         Tx1Send('D');
  42.         Tx1Send(chn+'0');
  43.         Tx1Send('=');
  44.         Tx1Send(adc / 100 + '0');
  45.         Tx1Send(adc % 100 / 10 + '0');
  46.         Tx1Send(adc % 10 + '0');
  47.         Tx1Send(0x0d);
  48.         Tx1Send(0x0a);
  49. }

  50. /********************* 主函數 *************************/


  51. /********************* 做一次ADC轉換 *******************/
  52. uchar        GetAdc8(uchar channel)        //channel = 0~7
  53. {
  54.         uchar        i;

  55.         ADC_RES = 0;

  56.         ADC_CONTR = (ADC_CONTR & 0xe0) | ADC_START | channel;

  57.         for(i=0; i<250; i++)                //13T/loop, 40*13=520T=23.5us @ 22.1184M
  58.         {
  59.                 if(ADC_CONTR & ADC_FLAG)
  60.                 {
  61.                         ADC_CONTR &= ~ADC_FLAG;
  62.                         return        ADC_RES;
  63.                 }
  64.         }while(--i);
  65.         return        0;        //錯誤
  66. }

  67. //========================================================================
  68. // 函數: void  delay_ms(unsigned char ms)
  69. // 描述: 延時函數。
  70. // 參數: ms,要延時的ms數.
  71. // 返回: none.
  72. // 版本: VER1.0
  73. // 日期: 2010-12-15
  74. // 備注:
  75. //========================================================================
  76. void  delay_ms(unsigned char ms)
  77. {
  78.      unsigned int i;
  79.          do{
  80.               i = MAIN_Fosc / 14000;
  81.                   while(--i)        ;   //14T per loop
  82.      }while(--ms);
  83. }


  84. /********************** 模擬串口相關函數************************/

  85. void        BitTime(void)        //位時間函數
  86. {
  87.         uint i;
  88.         i = ((MAIN_Fosc / 100) * 104) / 140000L - 1;                //根據主時鐘來計算位時間
  89.         while(--i);
  90. }

  91. //模擬串口發送
  92. void        Tx1Send(uchar dat)                //9600,N,8,1                發送一個字節
  93. {
  94.         uchar        i;
  95.         EA = 0;
  96.         P_TXD1 = 0;
  97.         BitTime();
  98.         for(i=0; i<8; i++)
  99.         {
  100.                 if(dat & 1)                P_TXD1 = 1;
  101.                 else                        P_TXD1 = 0;
  102.                 dat >>= 1;
  103.                 BitTime();
  104.         }
  105.         P_TXD1 = 1;
  106.         EA = 1;
  107.         BitTime();
  108.         BitTime();
  109. }

  110. void PrintString(unsigned char code *puts)                //發送一串字符串
  111. {
  112.     for (; *puts != 0;        puts++)  Tx1Send(*puts);         //遇到停止符0結束
  113. }
復制代碼



#include "ad.h"
#include "da.h"
#include <reg51.h>
void main(void)
{
    double    j;

    PrintString("****** STC12C5204AD系列ADC程序 2011-02-27 ******\r\n");    //上電后串口發送一條提示信息

//    P1ASF = ((1 << ADC_CH0) + (1 << ADC_CH1) + (1 << ADC_CH2));            //12C5204AD系列模擬輸入(AD)選擇
    P1ASF = ((1 << ADC_CH0) + (1 << ADC_CH6) + (1 << ADC_CH7));            //12C5204AD系列模擬輸入(AD)選擇
    ADC_CONTR = ADC_360T | ADC_ON;

    while(1)
    {
        delay_ms(250);        //1秒轉換1次
        delay_ms(250);
        delay_ms(250);
        delay_ms(250);
    /*   
        GetAdc8(0);            // P1.0 ADC, 丟棄
        j = GetAdc8(0);        // P1.0 ADC
        TX_ADC(0,j);

    //    GetAdc8(1);            // P1.1 ADC, 丟棄
    //    j = GetAdc8(1);        // P1.1 ADC
    //    TX_ADC(1,j);
        GetAdc8(6);            // P1.1 ADC, 丟棄
        j = GetAdc8(6);        // P1.1 ADC
        TX_ADC(6,j);
         
    //    GetAdc8(2);            // P1.2 ADC, 丟棄
    //    j = GetAdc8(2);        // P1.2 ADC
    //    TX_ADC(2,j);
        GetAdc8(7);            // P1.1 ADC, 丟棄
        j = GetAdc8(7);        // P1.1 ADC
        TX_ADC(7,j);

        Tx1Send(0x0d);
        Tx1Send(0x0a);
    */
        GetAdc8(6);            // P1.1 ADC, 丟棄
        j = GetAdc8(6);        // P1.1 ADC
        j=j*5.0/256.0;
        PLC5615_writeV(j);  
    }
}


這是主函數的部分,有字數限制,發不了那么多啊

全部資料51hei下載地址:
AD與DA直接轉.zip (42.05 KB, 下載次數: 43)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:465279 發表于 2020-2-13 22:05 | 只看該作者
學習來的,感謝分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 97超碰在线免费 | 日本精品视频 | 国产精品久久久久无码av | 自拍偷拍第一页 | 人人艹人人 | 免费观看成人鲁鲁鲁鲁鲁视频 | 欧美涩涩网 | 精品综合久久久 | 国产色网站 | 999久久久 | 精品在线观看一区 | 中文字幕第100页 | 一级黄色毛片免费 | 国产视频一视频二 | 国产不卡在线 | 久久日韩粉嫩一区二区三区 | 亚洲 欧美 综合 | 欧美日韩亚洲国产综合 | 久久成人免费 | 日日躁狠狠躁aaaaxxxx | 午夜爽爽男女免费观看hd | 国产精品美女久久久久久久久久久 | 日韩日b视频 | 亚洲精品国产综合区久久久久久久 | 一级片av | 二区不卡 | 99亚洲 | 国产精品久久久久久高潮 | 日日噜噜夜夜爽爽狠狠 | 国产精品毛片一区二区三区 | 精品一区二区三区在线观看国产 | 欧美一区二区二区 | 91麻豆精品国产91久久久久久 | 欧美精品一区二区三区四区五区 | 国产成人精品久久久 | 午夜视频在线播放 | 国产日韩视频 | 自拍偷拍亚洲一区 | 日日夜夜天天久久 | 日本福利视频免费观看 | 久久九九99 |