3677|6

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

st7定时器使用 [复制链接]

我使用的是ST7FLITE05YOM6的芯片,在使用LITE定时器的过程中,出现问题。源程序代码如下,主要实现的功能是一秒钟延时。请问一下各位这个源代码为什么不能够运行,谢谢!
st7/
    ;------------------------------------------------------
    ; SEGMENT MAPPING FILE AUTOMATICALLY GENERATED BY STVD7
    ; SHOULD NOT BE MANUALLY MODIFIED.
    ; CHANGES WILL BE LOST WHEN FILE IS REGENERATED.
    ;------------------------------------------------------
    TITLE "KF85.ASM"
    MOTOROLA
    #INCLUDE "st7flite05.inc"
    
    BYTES            ; The following addresses are 8 bits long
    segment byte at 80-FF 'ram0'
MMSH   DS.B $1
MMSL   DS.B $1
    
    WORDS            ; The following addresses are 16 bits long
    segment byte at FA00-FFDF 'rom'
MAIN:
    LD A,#0
    LD PBDDR,A
    LD PBOR,A
    LD A,#$0F
    LD PADDR,A
    LD PAOR,A
    CLR PBDR
    CLR PADR
    BSET PADR,#3
  BSET PADR,#2
    LD A,#0
    LD MMSH,A
    LD MMSL,A
    LD A,2
LOOP:
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    DEC A
    JRNE LOOP
    BRES PADR,#3
    NOP
    NOP
    NOP
    NOP
    BRES PADR,#2
    ;JP MAIN
  LD A,#$10
  LD LTCSR,A
    RIM
LOOP1  HALT
    
TBINT:
         LD A,LTCSR
    LD A,#3
    CP A,MMSH
    JRNE L2
L1:
         LD A,MMSL
    CP A,#$0E7
    JRUGE L5
L2:
         INC MMSL
    JRNE L4
    INC MMSH
    JRA L4
L5:
         BRES PADR,#3
    BRES PADR,#2
L4:
  IRET
    
    
NonHandledInterrupt
  iret
    
    WORDS            ; The following addresses are 16 bits long
    segment byte at FFE0-FFFF 'vectit'
                DC.W    NonHandledInterrupt ;FFE0-FFE1h location
                DC.W    NonHandledInterrupt ;FFE2-FFE3h location
                DC.W    TBINT ;FFE4-FFE5h location
                DC.W    NonHandledInterrupt ;FFE6-FFE7h location
                DC.W    NonHandledInterrupt ;FFE8-FFE9h location  
                DC.W    NonHandledInterrupt ;FFEA-FFEBh location  
                DC.W    NonHandledInterrupt ;FFEC-FFEDh location 
                DC.W    NonHandledInterrupt ;FFEE-FFEFh location
                DC.W    NonHandledInterrupt ;FFF0-FFF1h location 
                DC.W    NonHandledInterrupt ;FFF2-FFF3h location  
                DC.W    NonHandledInterrupt ;FFF4-FFF5h location  
                DC.W    NonHandledInterrupt ;FFF6-FFF7h location  
                DC.W    NonHandledInterrupt ;FFF8-FFF9h location 
                DC.W    NonHandledInterrupt ;FFFA-FFFBh location 
                DC.W    NonHandledInterrupt ;FFFC-FFFDh location 
                                DC.W    MAIN                ;reset
        END
此帖出自stm32/stm8论坛

最新回复

                                 只是测过你的中断是否执行。中断是可以正进入的,你应该查查你的定时时间计算的流程逻辑。这么简单的几句,跟着单步一遍很快能找到问题。我很愿意引导我的客户自己学会解决问题,而不愿纯粹只是做个保姆。建议:问题既然出在 JRUGE L5 你就看看什么条件会执行L1,当MMSL满足什么条件要去执行清零动作?当等于的时候去跳转,JRUGE会影响到什么标准?JRUGE尽是C=0,JRUGT 是C+Z=0     LD A,LTCSR    LD A,#3    CP A,MMSH      ;MMSHMMSL=1000*1ms=1秒=11E7,即MMSH=11,MMSL=E7    JRULE L2L1:  LD A,MMSL    CP A,#$0E7    JRUGE L5      ;这里怎么调试都无法跳转到L5,我感觉到很奇怪JP的几条指令:JREC   等于JRNE   不等于JRULT  [小于] 或者 [大于或等于]  JRUGT  [大于] 或者 [小于或等于]对于ST7汇编指令集请参考:ST7 Family Programming Manual在http://www.stmcu.com可以下载   详情 回复 发表于 2008-9-9 23:16
点赞 关注
 

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

中断向量表中地址映射

                                 还有一个问题是,定时器定时,应该使用的是定时中断才对,但是为什么中断向量表中,其地址是FFE4-FFE5(LITE定时器输入捕获中断)呢,我查了一下书籍应该是FFE2-FFE3,因为它是LITE定时器RTC中断。
此帖出自stm32/stm8论坛
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

没仔细看你的工程

  LD LTCSR,A

这里你初始化的是LT TB定时器,你将Timebase打开。中断向量FFE4h-FFE5h对应的中断是LITE TIMER RTC Interrupt中断,没有错。地址FFE2h-FFE3h对应的是SPI。ST7LITE0x datasheet Rev5 Oct 2006。


此帖出自stm32/stm8论坛
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 

Timebase怎么打开

                                 中断向量FFE4h-FFE5h对应的中断是LITE TIMER RTC Interrupt中断,这个我证实了是正确的。但是我想问一下grant_jx怎么去打开Timebase呢?谢谢!
此帖出自stm32/stm8论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

5
 

你的代码是可以打开TB的

正常情况下:
1、通过OSC,计算你需要配置的TB时间周期,也就是LTCSR.TB ,第5位;
2、打开LTCSR.TBIE,第四位,中断允许位;
3、开全局中断;

在中断服务程序中,记得退出中断前一定要读一次LTCSR,以便清除LTCSR.TBF,TB中断标准位。否则你的中断将无法正确退出。



需要提醒的是,你的代码中使用了HALT指令,这条指令没问题,只是需要注意什么中断源才能将MCU唤醒。


我将你的代码copy到STVD下做了一个工程,使用indart的IDB-ST7FLITE0开发板,测试MCU使用ST7FLite09Y0B6,确认TB中断是可以重复进入的。至于定时时间没关心,时间太晚了,明天还要出差。

看下图,A读取的值。










此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 

我调试过了,可以运行中断,但是实现不了功能。

st7/
    ;------------------------------------------------------
    ; SEGMENT MAPPING FILE AUTOMATICALLY GENERATED BY STVD7
    ; SHOULD NOT BE MANUALLY MODIFIED.
    ; CHANGES WILL BE LOST WHEN FILE IS REGENERATED.
    ;------------------------------------------------------
    TITLE "KF85.ASM"
    MOTOROLA
    #INCLUDE "st7flite05.inc"
    
    BYTES            ; The following addresses are 8 bits long
    segment byte at 80-FF 'ram0'
MMSH   DS.B $1
MMSL   DS.B $1
    
    WORDS            ; The following addresses are 16 bits long
    segment byte at FA00-FFDF 'rom'
MAIN:
    LD A,#0
    LD PBDDR,A
    LD PBOR,A
    LD A,#$0F
    LD PADDR,A
    LD PAOR,A
    CLR PADR
    CLR PBDR    
    BSET PADR,#2
  ;BRES PADR,#2
    LD A,#0
    LD MMSH,A
    LD MMSL,A
    LD A,#$10
  LD LTCSR,A
    LD Y,#255
    ;BRES PADR,#3
    RIM
  JRA *
TBINT:
  
  LD A,LTCSR
    LD A,#3
    CP A,MMSH      ;MMSHMMSL=1000*1ms=1秒=11E7,即MMSH=11,MMSL=E7
    JRULE L2
L1:
  LD A,MMSL
    CP A,#$0E7
    JRUGE L5      ;这里怎么调试都无法跳转到L5,我感觉到很奇怪
L2:
  INC MMSL
    CP Y,MMSL
    JRUGT L6
    JRA L4
L6:
  INC MMSH
  CLR MMSL
    JRA L4
L5:
  LD A,#0
    LD MMSL,A
    LD MMSH,A
    BSET PADR,#3   ;PA3接指示灯,用来调试程序有无运行,但是怎么调试PA3的灯都不亮
  L4:    
  IRET
NonHandledInterrupt
  iret
    
    WORDS            ; The following addresses are 16 bits long
    segment byte at FFE0-FFFF 'vectit'
                DC.W    NonHandledInterrupt ;FFE0-FFE1h location
                DC.W    NonHandledInterrupt ;FFE2-FFE3h location
                DC.W    TBINT ;FFE4-FFE5h location
                DC.W    NonHandledInterrupt ;FFE6-FFE7h location
                DC.W    NonHandledInterrupt ;FFE8-FFE9h location  
                DC.W    NonHandledInterrupt ;FFEA-FFEBh location  
                DC.W    NonHandledInterrupt ;FFEC-FFEDh location 
                DC.W    NonHandledInterrupt ;FFEE-FFEFh location
                DC.W    NonHandledInterrupt ;FFF0-FFF1h location 
                DC.W    NonHandledInterrupt ;FFF2-FFF3h location  
                DC.W    NonHandledInterrupt ;FFF4-FFF5h location  
                DC.W    NonHandledInterrupt ;FFF6-FFF7h location  
                DC.W    NonHandledInterrupt ;FFF8-FFF9h location 
                DC.W    NonHandledInterrupt ;FFFA-FFFBh location 
                DC.W    NonHandledInterrupt ;FFFC-FFFDh location 
                                DC.W    MAIN                ;reset
        END
还有一个我对JRNE老是搞不懂,我觉得很奇怪,请解释一下其中的用法,谢谢
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

7
 

上面你只说中断不能进,我没看你的代码逻辑

只是测过你的中断是否执行。
中断是可以正进入的,你应该查查你的定时时间计算的流程逻辑。这么简单的几句,跟着单步一遍很快能找到问题。我很愿意引导我的客户自己学会解决问题,而不愿纯粹只是做个保姆。

建议:
问题既然出在 JRUGE L5 
你就看看什么条件会执行L1,当MMSL满足什么条件要去执行清零动作?当等于的时候去跳转,JRUGE会影响到什么标准?JRUGE尽是C=0,JRUGT 是C+Z=0
 
    LD A,LTCSR
    LD A,#3
    CP A,MMSH      ;MMSHMMSL=1000*1ms=1秒=11E7,即MMSH=11,MMSL=E7
    JRULE L2
L1:
  LD A,MMSL
    CP A,#$0E7
    JRUGE L5      ;这里怎么调试都无法跳转到L5,我感觉到很奇怪



JP的几条指令:
JREC   等于
JRNE   不等于
JRULT  [小于] 或者 [大于或等于]  
JRUGT  [大于] 或者 [小于或等于]


对于ST7汇编指令集请参考:ST7 Family Programming Manual

在http://www.stmcu.com可以下载
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表