找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3574|回复: 1
收起左侧

单片机充电设计方案和MSP430AD/DA仿真程序

[复制链接]
ID:60063 发表于 2017-4-19 20:47 | 显示全部楼层 |阅读模式
单片机充电设计方案和MSP430AD/DA仿真程序

基于51单片机的智能快速充电器设计.doc

78 KB, 下载次数: 23, 下载积分: 黑币 -5

AD_DA.rar

160.8 KB, 下载次数: 35, 下载积分: 黑币 -5

回复

使用道具 举报

ID:1 发表于 2017-4-20 02:43 | 显示全部楼层
分享楼主的源码:

  1. /**************************************************************
  2. 程序功能:实现学习板通过USB端口与PC机通信,用户通过端点1(EP1)发
  3.           送控制DAC输出的数据,可以用这个电压来驱动LED发光,也可
  4.           以直接用电压表测量DAC输出电压
  5. ---------------------------------------------------------------
  6. 跳线设置:(1)将跳线座J3上的短路帽插好。
  7.           (2)将跳线座J1的1脚和2脚(靠上面的两个)短接
  8. ---------------------------------------------------------------
  9. 测试说明:将程序下载到MCU以后,从IAR软件中退出;用USB电缆连接学
  10.           习板和PC机,按下USB电源开关按键,在连接建立成功以后。
  11.           从WinDriver软件中通过EP1向学习板发送控制DAC输出模拟电
  12.           压的数据,观察LED亮度变化或者用电压表测量DAC输出端电压。
  13. ***************************************************************/
  14. #include  <msp430x14x.h>
  15. #include  "BoardConfig.h"
  16. #include  "USBfunctions.h"
  17. #include  "IIC.h"
  18. #include  "gdata.h"

  19. uchar Write_DAC(uchar wdata);
  20. /****************主函数****************/
  21. void main(void)
  22. {
  23.     uchar i;
  24.    
  25.     WDTCTL = WDTPW + WDTHOLD;           //关闭看门狗
  26.     BoardConfig(0xb8);                  //关闭数码管、流水灯和4245
  27.    
  28.     /*------选择系统主时钟为8MHz-------*/
  29.     BCSCTL1 &= ~XT2OFF;                 // 打开XT2高频晶体振荡器
  30.     do
  31.     {
  32.         IFG1 &= ~OFIFG;                 //清除晶振失败标志
  33.         for (i = 0xFF; i > 0; i--);     // 等待8MHz晶体起振
  34.     }
  35.     while ((IFG1 & OFIFG));             // 晶振失效标志仍然存在?
  36.     BCSCTL2 |= SELM_2;                  //主时钟选择高频晶振
  37.    
  38.     Set_IO();                           //设置DAC对应的IO
  39.    
  40.     D12_init();                         //初始化D12
  41.     USB_reconnect();                    //进行USB连接

  42.     while(1)
  43.     {
  44.         
  45.         if((!(P1IN&BIT5))&&(!(P1IFG&BIT5)))     //如果P1.5端口丢失了中断
  46.         {
  47.             uint int_sta;
  48.          
  49.             _DINT();
  50.             
  51.             USB_FLAG.in_isr = 1;
  52.             int_sta=Read_IntR();                //读取PDIUSBD12中断寄存器值
  53.          
  54.             if(int_sta!=0)
  55.             {
  56.                 if(int_sta&INT_BUSRESET)
  57.                         USB_FLAG.bus_reset=1;        //USB总线复位标志       
  58.                 if(int_sta&INT_ENDP0IN)
  59.                         Ep0_txdone();                //控制端点发送数据处理
  60.                 if(int_sta&INT_ENDP0OUT)
  61.                         Ep0_rxdone();                //控制端点接收数据处理
  62.                 if(int_sta&INT_ENDP1IN)
  63.                         Ep1_txdone();                //端点 1发送数据处理
  64.                 if(int_sta&INT_ENDP1OUT)
  65.                         Ep1_rxdone();                //端点 1接收数据处理
  66.                 if(int_sta&INT_ENDP2IN)
  67.                         Ep2_txdone();                //端点 2发送数据处理
  68.                 if(int_sta&INT_ENDP2OUT)
  69.                         Ep2_rxdone();                //端点 2接收数据处理
  70.             }
  71.             USB_FLAG.in_isr = 0;
  72.             
  73.             _EINT();
  74.         }
  75.       
  76.         if (USB_FLAG.setup_packet)   //Setup包处理
  77.         {               
  78.             _DINT();
  79.             USB_FLAG.setup_packet = 0;
  80.             Control_handler();             //调用请求处理子程序
  81.             _EINT();
  82.         }
  83.         
  84.         if(USB_FLAG.ep1_rxdone == 1) //端点1接收到数据
  85.         {
  86.            _DINT();
  87.            //将1个字节的控制数据写入DAC
  88.            Write_DAC(Ep1Buf[0]);           
  89.            USB_FLAG.ep1_rxdone = 0;
  90.            _EINT();
  91.         }
  92.         else if(USB_FLAG.ep2_rxdone == 1) //端点2接收到数据
  93.         {
  94.            _DINT();
  95.            USB_FLAG.ep2_rxdone = 0;
  96.            _EINT();
  97.         }
  98.     }
  99. }
  100. /*******************************************
  101. 函数名称:Write_DAC
  102. 功    能:向DAC中写入输出电压数据
  103. 参    数:无
  104. 返回值  :写入结果:1--成功,0--失败
  105. ********************************************/
  106. uchar Write_DAC(uchar wdata)
  107. {
  108.     start();
  109.     write1byte(0x98);   //DAC的设备地址
  110.     if(check())   write1byte(wdata >> 4);   //写控制模式和电压数据的高四位
  111.     else          return 0;
  112.     if(check())   write1byte(wdata << 4);  //写电压数据的低四位
  113.     else          return 0;
  114.     if(check())          stop();
  115.     else          return 0;
  116.     return 1;   
  117. }


复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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