[国产单片机] 合泰单片机计数中断问题

[复制链接]
4067|8
 楼主| zjut_zone 发表于 2016-10-11 14:03 | 显示全部楼层 |阅读模式
红色语句加入就不能进入计数中断了,然后注释了就可以进中断计数,请教下是什么原因。 HT66F003

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
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就没问题,堆栈溢出不知道怎么看,我先搜搜看怎么确定堆栈是溢出的。现在是没用定时中断,就用查询的方式写的。
IQ110 发表于 2016-10-27 15:10 | 显示全部楼层
zjut_zone 发表于 2016-10-26 16:14
代码就这些,测试的时候其他都删了,主循环只要有取整运算中断里面就失效了。比如a*3运算也会失效,改成a ...

合泰V3编译器做了一些优化,如果a运算后的结果后续没使用到,运算会被优化掉(被忽略)。这边也没看到你的main在哪,你现在是在做实验,如果代码不重要的话,全部贴出来,比较好分析。
 楼主| 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的选项。
  1. #include "HT66F003.h"
  2. #define AD_START _start=0;_start=1;_start=0;
  3. unsigned long time;
  4. unsigned char i,j,p,step;
  5. unsigned long y,k,k1;
  6. #pragma vector isr_c [url=home.php?mod=space&uid=72445]@[/url] 0x0c
  7. void isr_c()
  8. {  
  9.          _stma0f=0;   
  10.          time++;
  11.          k1++;
  12.    if(time>=500)
  13.      {
  14.             time=0;
  15.             _pb5=~_pb5;
  16.      }
  17. }
  18. void time_init(void)
  19. {
  20.            _hlclk=1;
  21.            _st0pau=0;       //stm计数器暂停控制位,清零运行
  22.            _st0ck2=0;       //001选择系统时钟fsys
  23.            _st0ck1=0;
  24.            _st0ck0=1;
  25.            _mf0e=1;         //多功能中断0控制位,不置1定时器不工作
  26.            _mfi0=0x02;      //stm比较器A中断控制位
  27.            _stm0c0=0x08;    //fsys/4
  28.            _stm0c1=0xc1;    //stm定时器工作模式计数选择,选择比较器A匹配
  29.            _stm0al=0xe8;
  30.            _stm0ah=0x03;    //一次0.5ms
  31.            _st0on=1;        //stm计数器控制位
  32. }
  33. void main()
  34. {  
  35.            _wdtc=0xA8;      //开始没设置,导致io输出方波,关闭看门狗
  36.            _pac=0X0B;             //0-输出 1-输入
  37.            _pa=0xff;        //PA输出高电平
  38.            _papu0=1;
  39.            _pasr=0x16;      //共用引脚设置AN3,AN1
  40.            _pbc=0x00;       //PB设置输出
  41.            _pb5=0;         
  42.            time_init();     //计数器初始化
  43.            _emi=1;
  44.            y=10;
  45.            k1=0;
  46.            time=0;
  47.    while(1)
  48.     {     
  49.      // k=y/10;
  50.         i++;   
  51.     }
  52. }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| zjut_zone 发表于 2016-10-27 16:37 | 显示全部楼层
zjut_zone 发表于 2016-10-27 16:26
你好,谢谢你的解答。代码不重要的,简单的就是采样电压数码管显示,后来没解决没用定时器,已经写好了。 ...

刚看软件可以更新,我更新后试试有没有V3,再看看
NJZR 发表于 2016-10-27 18:58 | 显示全部楼层
测试程序最简化,确认还会出问题后看汇编!
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 讨论吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

129

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部