找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3047|回复: 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 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:465279 发表于 2020-2-13 22:05 | 显示全部楼层
学习来的,感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表