打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用IAR for MSP430 和 Proteus 进行仿真的设置

一时热情, 学习MSP430, 不知能坚持多久. 呵呵....... 就这样吧.

第一个实验, 用定时器 A 实现流水灯. 没钱买板子, 就仿真吧.

建立一个新的工程, 很多软件都这样子, 如下图:


然后, 点击 project->options 或者 ALT + F7 就可进入选项栏. 点进General Options, 在 Target 内选择器件型号, 千万别搞错了, 不然和Proteus里不一样, 没法仿真. 次栏下的其他项就选择默认吧. 下图所示:


然后再进入 Linker 栏, 进行相关设置, 其他默认即可, 如下图所示:


下面试仿真测试的效果, 我很懒, 晶振和复位电路什么的没画, 大家可以画画, 不画也可以仿真, 实际上必须的.

hex文件在 "\**\**\Debug\Exe" 目录下.


最后是仿真的程序源代码(网上找的, 不知作者是谁, 见谅):

  1. #include  <msp430x24x.h>   
  2.   
  3. typedef unsigned char UCHAR;        // 自定义变量别名  
  4. typedef unsigned int  UINT;  
  5.   
  6. UCHAR i = 0, j = 0;  
  7. UCHAR dir = 0;                      // dir 为 LED 的流动方向  
  8. UCHAR Mode = 0, speed = 0;          // Mode--LED流动方式,speed--LED流动速度  
  9.   
  10. /* 
  11. **  主函数 
  12. */  
  13. int main(void)   
  14. {   
  15.     WDTCTL = WDTPW + WDTHOLD;       // 关闭看门狗   
  16.     _EINT();                        // 使能全局中断   
  17.     CCTL0 = CCIE;                   // 使能 CCR0 中断   
  18.     CCR0  = 50000;   
  19.     TACTL = TASSEL_2 + ID_3 + MC_1; // 定时器A的时钟源选择 SMCLK,增计数模式   
  20.     P1DIR = 0xff;                   // 设置 P1 口方向为输出   
  21.     P1OUT = 0xff;   
  22.     LPM0;                           // CPU 进入 LPM0 模式   
  23.       
  24.     return 0;  
  25. }   
  26.   
  27. /* 
  28. ** 函数名称:Timer_A   
  29. ** 功    能:定时器 A 的 ISR,在这里通过 Mode  
  30. **           控制流水灯的流动方向和流动速度  
  31. ** 参    数:无  
  32. ** 返回值  :无  
  33. ** 注    意: 无 
  34. */   
  35.   
  36. #pragma vector = TIMERA0_VECTOR   
  37.   
  38. __interrupt void Timer_A (void)   
  39. {     
  40.     if(Mode == 0) {   
  41.         P1OUT = ~(0x80>>(i++));         // 灯的点亮顺序 D8 -> D1   
  42.     } else if(Mode == 1) {   
  43.         P1OUT = ~(0x01<<(i++));         // 灯的点亮顺序 D1 -> D8   
  44.     } else {   
  45.             if(dir) {                   // 灯的点亮顺序 D8 -> D1,D1 -> D8,循环绕圈                           
  46.                 P1OUT = ~(0x80>>(i++));   
  47.             } else {   
  48.                 P1OUT = ~(0x01<<(i++));   
  49.             }   
  50.     }   
  51.      
  52.     if(i == 8) {   
  53.         i = 0;   
  54.         dir = ~dir;                    // 方向取反  
  55.     }   
  56.      
  57.     if(j++ == 30) {    
  58.         j = 0;   
  59.           
  60.         switch(speed)                  // 根据速度来设置定时器  
  61.         {   
  62.         case 0:   
  63.             TACTL &=~ (ID0 + ID1);   
  64.             TACTL |= ID_3;   
  65.             break;   
  66.         case 1:   
  67.             TACTL &=~ (ID0 + ID1);   
  68.             TACTL |= ID_2;   
  69.             break;   
  70.         case 2:   
  71.             TACTL &=~ (ID0 + ID1);   
  72.             TACTL |= ID_1;   
  73.             break;   
  74.         case 3:   
  75.             TACTL &=~ (ID0 + ID1);   
  76.             TACTL |= ID_0;   
  77.             break;   
  78.         default:   
  79.             break;   
  80.         }   
  81.           
  82.         if(Mode++ < 4)      
  83.             speed++;  
  84.         else   
  85.             Mode = 0;  
  86.           
  87.         if(speed == 8)  speed = 0;   
  88.     }    
  89. }   
好多不会, 错了请指出!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
msp430 定时器
MSP430单片机定时器A结构及其应用范例
proteus与keil Cx51的单片机仿真(定时器方式2应用)
MSP430单片机串口控制5路PWM频率变化程序
Proteus通过虚拟串口程序仿真51单片机串口的实现
Proteus 仿真库简介
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服