打印
[国产单片机]

合泰单片机计数中断问题

[复制链接]
3637|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zjut_zone|  楼主 | 2016-10-11 14:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
IQ110| | 2016-10-25 16:03 | 只看该作者
1、确定堆栈没溢出。
2、子函数没有被嵌套使用。
代码能多贴一点出来会更好分析

使用特权

评论回复
板凳
ayb_ice| | 2016-10-26 13:05 | 只看该作者
这种简单mcu用除法必须小心,何况是在中断中,还是16位的

使用特权

评论回复
地板
zjut_zone|  楼主 | 2016-10-26 16:14 | 只看该作者
IQ110 发表于 2016-10-25 16:03
1、确定堆栈没溢出。
2、子函数没有被嵌套使用。
代码能多贴一点出来会更好分析 ...

代码就这些,测试的时候其他都删了,主循环只要有取整运算中断里面就失效了。比如a*3运算也会失效,改成a*2+a就没问题,堆栈溢出不知道怎么看,我先搜搜看怎么确定堆栈是溢出的。现在是没用定时中断,就用查询的方式写的。

使用特权

评论回复
5
IQ110| | 2016-10-27 15:10 | 只看该作者
zjut_zone 发表于 2016-10-26 16:14
代码就这些,测试的时候其他都删了,主循环只要有取整运算中断里面就失效了。比如a*3运算也会失效,改成a ...

合泰V3编译器做了一些优化,如果a运算后的结果后续没使用到,运算会被优化掉(被忽略)。这边也没看到你的main在哪,你现在是在做实验,如果代码不重要的话,全部贴出来,比较好分析。

使用特权

评论回复
6
zjut_zone|  楼主 | 2016-10-27 16:26 | 只看该作者
本帖最后由 zjut_zone 于 2016-10-27 16:29 编辑
IQ110 发表于 2016-10-27 15:10
合泰V3编译器做了一些优化,如果a运算后的结果后续没使用到,运算会被优化掉(被忽略)。这边也没看到你 ...

你好,谢谢你的解答。代码不重要的,简单的就是采样电压数码管显示,后来没解决没用定时器,已经写好了。一下是测试取整的运算的,注释了取整pb5连接的灯就能秒闪,加进去就不行了。然后刚刚试了下单步运行,取整语句要运行约40秒才运行下一个语句。然后我这个用的是V1(HCC),没有V3的选项。
#include "HT66F003.h"
#define AD_START _start=0;_start=1;_start=0;
unsigned long time;
unsigned char i,j,p,step;
unsigned long y,k,k1;
#pragma vector isr_c [url=home.php?mod=space&uid=72445]@[/url] 0x0c
void isr_c()
{  
         _stma0f=0;   
         time++;
         k1++;
   if(time>=500)
     {
            time=0;
            _pb5=~_pb5;
     }
}
void time_init(void)
{
           _hlclk=1;
           _st0pau=0;       //stm计数器暂停控制位,清零运行
           _st0ck2=0;       //001选择系统时钟fsys
           _st0ck1=0;
           _st0ck0=1;
           _mf0e=1;         //多功能中断0控制位,不置1定时器不工作
           _mfi0=0x02;      //stm比较器A中断控制位
           _stm0c0=0x08;    //fsys/4
           _stm0c1=0xc1;    //stm定时器工作模式计数选择,选择比较器A匹配
           _stm0al=0xe8;
           _stm0ah=0x03;    //一次0.5ms
           _st0on=1;        //stm计数器控制位
}
void main()
{  
           _wdtc=0xA8;      //开始没设置,导致io输出方波,关闭看门狗
           _pac=0X0B;             //0-输出 1-输入
           _pa=0xff;        //PA输出高电平
           _papu0=1;
           _pasr=0x16;      //共用引脚设置AN3,AN1
           _pbc=0x00;       //PB设置输出
           _pb5=0;         
           time_init();     //计数器初始化
           _emi=1;
           y=10;
           k1=0;
           time=0;
   while(1)
    {     
     // k=y/10;
        i++;   
    }
}

1.png (36.14 KB )

1.png

使用特权

评论回复
7
zjut_zone|  楼主 | 2016-10-27 16:37 | 只看该作者
zjut_zone 发表于 2016-10-27 16:26
你好,谢谢你的解答。代码不重要的,简单的就是采样电压数码管显示,后来没解决没用定时器,已经写好了。 ...

刚看软件可以更新,我更新后试试有没有V3,再看看

使用特权

评论回复
8
NJZR| | 2016-10-27 18:58 | 只看该作者
测试程序最简化,确认还会出问题后看汇编!

使用特权

评论回复
9
IQ110| | 2016-11-2 10:59 | 只看该作者
zjut_zone 发表于 2016-10-27 16:26
你好,谢谢你的解答。代码不重要的,简单的就是采样电压数码管显示,后来没解决没用定时器,已经写好了。 ...

1、发现有个问题,中断入口设置,规格书里有写HT66F003的STM中断入口应该是 0x10,你程式里的0x0C应该是TBC1的入口。中断入口设错了还能秒闪看起来有点奇怪了。
2、HT66F003只支持到V1、V2,建议尽量使用高版本的编译器,可以选择V2,因为V1可能有些问题。我经常用合泰的IC,有什么问题加我QQ 1215037397 讨论吧。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

128

帖子

3

粉丝