找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3559|回复: 0
收起左侧

MSP430 ADC12中断函数实现单通道单次转换程序,proteus8.7仿真

[复制链接]
ID:429971 发表于 2019-3-30 21:26 | 显示全部楼层 |阅读模式
这是在上一次基础上追加一个ADC12采样的功能。
在仿真的过程中,出现一个问题。
外部参考电压设置为3.3v时,报错
No power supply specified for net 3.3V in Power Rail Configuration.

原因是没有配置3.3v的电源,所以net 3.3v不知道连在哪里。
解决办法:在工具栏点击design -> configure power rails 出现弹窗

在弹窗中new一个3.3v的电源,再将节点3.3v添加到电源中即可,其他大小的电源添加类似操作。

添加前:
添加前.jpg
添加后:
添加后.jpg

环境:
IAR For MSP430  版本1721
Proteus 8.7

IAR文件夹下为MSP430工程项目
Proteus文件夹下为仿真项目,其中还包括仿真导入的hex文件

功能:DSP430F247设置ADC12,采集电压,在lcd1602上显示电压值。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
ADC12仿真图.jpg

MSP430
12位ADC转换器
分辨率 = VREF / 4096
ADC转换时间
ADC12结构与特点
1.参考电压发生器
    MSP430内部带有参考电源,通过控制REFON信号来启动内部参考电源,并通过REF2——5V来控制参考电压。
2.模拟多路通道
    8路外部通道  4路内部通道()
3.具有采样保持功能的12位模数转换内核


ADC12转换模式
1.单通道单次采样
2.序列通道单次采样
3.单通道多次采样
4.序列通道多次采样

单片机源程序如下:

  1. #include "msp430x24x.h"
  2. #define set_rs P1OUT |= BIT3
  3. #define rst_rs P1OUT &= ~BIT3
  4. #define set_rw P1OUT |= BIT4
  5. #define rst_rw P1OUT &= ~BIT4
  6. #define set_en P1OUT |= BIT5
  7. #define rst_en P1OUT &= ~BIT5
  8. #define dataout P2DIR = 0xff
  9. #define dataport P2OUT
  10. #define uchar unsigned char
  11. #define CPU_F1 ((double)8000000)
  12. #define delay_us8M(x) __delay_cycles((long)(CPU_F1*(double)x/1000000.0))
  13. #define delay_ms8M(x) __delay_cycles((long)(CPU_F1*(double)x/1000.0))

  14. void write_com(uchar com);
  15. void write_data(uchar data);

  16. long result = 0;
  17. long v_data = 0;
  18. /**
  19.   单通道单次采样
  20. */

  21. #pragma vector = ADC12_VECTOR
  22. __interrupt void ADC12ISR(void){
  23.   while((ADC12IFG & BIT1) == 0);
  24.   result = ADC12MEM1;
  25. }

  26. void main( void )
  27. {
  28.   // Stop watchdog timer to prevent time out reset
  29.   WDTCTL = WDTPW + WDTHOLD;
  30.   
  31.   P1DIR |= BIT3 + BIT4 + BIT5;
  32.   dataout;
  33.   rst_en;
  34.   write_com(0x38);//8 bit data, doule line, 5x7 point matrix
  35.   write_com(0x0c);//open display, close cusor,close blink
  36.   write_com(0x06);//auto plus 1 after write or read
  37.   write_com(0x01);//clear screen
  38.   
  39.   P6SEL |= BIT1;//将P6.1设置为第二功能,即 使能ADC通道
  40.   //这里如果想要保险的话,先设置ENC=0,但其实ENC默认为0
  41.   //1.打开ADC,设置采样时间 4*SHT0_8(b1000)*256
  42.   ADC12CTL0 = ADC12ON + SHT0_8;
  43.   //2.设置采样保持器的脉冲触发模式,转换模式=单通道单次转换,转换通道1
  44.   ADC12CTL1 = SHP + CONSEQ_0 + CSTARTADD_1;
  45.   //3.既然选择了通道1,就要配置通道1,
  46.   //设置转换通道端口为1即P6.1
  47.   ADC12MCTL1 |= INCH_1;
  48.   //4.设置为外部参考电压源
  49.   ADC12MCTL1 |= SREF_2;
  50.   delay_ms8M(1);
  51.   //5.ENC=1,不能再修改配置
  52.   //启动一次AD转换时,ENC和ADC12SC要同时设置
  53.   ADC12CTL0 |= ENC + ADC12SC;
  54.   //开启中断
  55.   _EINT();
  56.   while(1){
  57. //    _EINT();
  58.     ADC12CTL0 |= ENC + ADC12SC;
  59.     ADC12IE = 0X02;
  60.     delay_ms8M(4);
  61.     v_data = (long)result * 33;//3.3V参考电压
  62.     v_data = v_data * 10;
  63.     v_data = v_data / 4096;//这里把电压放大了100倍,便于显示小数点后两位
  64.     write_com(0x01);//清屏
  65.     write_com(0x80);//移到第一行第一列
  66.     write_data(v_data/100 + '0');
  67.     write_data('.');
  68.     write_data(v_data/10%10 + '0');
  69.     write_data(v_data%10 + '0');
  70.     write_data('V');
  71.     delay_ms8M(100);
  72. //    //这里其实可以不关闭中断,那相应的开始也就不要打开
  73. //    _DINT();
  74.   }

  75. }

  76. void write_com(uchar com){
  77.   rst_rs;
  78.   rst_rw;
  79.   rst_en;
  80.   _NOP();
  81.   set_en;// write command rs=0,rw=0,en=1
  82.   P2OUT = com;
  83.   delay_ms8M(5);
  84. //  _NOP();
  85. //  _NOP();
  86. //  check_busy();
  87.   rst_en;
  88. }

  89. void write_data(uchar data){
  90.   set_rs;
  91.   rst_rw;
  92.   rst_en;
  93.   _NOP();
  94.   set_en;//write data rs=2,rw=0,en=1
  95.   P2OUT = data;
  96.   delay_ms8M(5);
  97. //  _NOP();
  98. //  _NOP();
  99. //  check_busy();
  100.   rst_en;
  101. }
复制代码
0.png
所有资料51hei提供下载:
MSP430_ADC12.zip (290.39 KB, 下载次数: 43)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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