倔强青铜铜 2023-03-24 16:53 采纳率: 84%
浏览 10
已结题

iar程序没实现想要的功能

请问这个程序放proteus为啥仿真不出波形呀?编译的时候没有报错

#include "msp430f249.h"
#define CPU_F ((double)8000000)
#define delay_us(x)__delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0))
//void sawtooth(void)
//{
//  char i;
//  P4OUT=i++;
//  delay_us(390);
//}

void triangular(void)//三角波
{
  char i;
  for(i=0;i<255;i++)
  {
    P4OUT=i;
    delay_us(195);
  }
  for(i=255;i>0;i--)
  {
    P4OUT=i;
    delay_us(195);
  }
}
void square(void)//方波
{
  P1OUT=51;
  delay_ms(50);
  P1OUT=255;
  delay_ms(50);
}

#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
    static unsigned int task_to_execute = 0;
 
    if (task_to_execute == 0)
    {
        P1OUT |= BIT0;
        square();
        // 执行第一个任务
    }
    else
    {
         P4OUT |= BIT0;

        triangular();
        // 执行第二个任务
    }
    // 切换任务
    task_to_execute = !task_to_execute;
}
int main(void)
{
    unsigned int i;
  WDTCTL=WDTPW+WDTHOLD;//停止看门狗功能
  BCSCTL1&=~XT2OFF;//使TX2有效,TX2上电时默认为关闭
  do
  {
    IFG1&=~XT2OFF;//清除振荡器失效标志
    for(i=0xff;i>0;i--);//延时,待稳定
  }
  while((IFG1 & OFIFG)!=0);//振荡器失效标志
  BCSCTL2 |= SELM1;//使MCLK=XT2

////     设置 P1 和 P4 管脚为输出模式
    P1DIR |= BIT0;
    P4DIR |= BIT0;
 
    // 设置 Timer A 为计数器模式,计数器值为 32768
    TA0CTL = TASSEL_1 + MC_1 + TACLR;
    TA0CCR0 = 32768 - 1;
 
    // 启用 Timer A 中断
    TA0CCTL0 |= CCIE;
 
    // 启用全局中断
    __enable_interrupt();
 
    // 循环等待
    while(1)
    {
    }
}

  • 写回答

2条回答 默认 最新

  • 於黾 2023-03-24 17:02
    关注

    只定义了一个timer函数,没设置定时器功能,函数没有执行
    此外,timer里面只应该设置标识位,main里死循环中才应该执行输出和delay
    你在中断程序里写delay会把逻辑顺序全搞乱了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月1日
  • 已采纳回答 3月24日
  • 创建了问题 3月24日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分