3813|3

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

帮忙看看2407的程序吧 [复制链接]

帮忙看看2407点灯的程序吧,为什么lacc    #8语句中输入>8的数时,在单步调试运行时,延时程序就跳不出来了,好像死机了似的。可是lacc    #8语句中输入<=8的数就什么问题都没有。快帮忙看看吧,我都在这个问题上停留好长时间了,谢谢!!
            .include \"X24x.h\"

; Step 1: Global declaration:
            .global    start,Main_counter,PADATDIR,OCRA,delay
;           .global    MON_RT_CNFG

; Variables declaration:
            .bss    test,1
            .bss    Isr_counter,11  
            .bss    Isr_step,1
            .bss    Main_counter,1
            .bss    GPR0,1

******************************************************************
******
******                                MAIN
******
******************************************************************
                .text
start:            

;_main:
; Disable interrupts, Clear SXM, OVM and CNF bits      
            POINT_PG0
            SETC    INTM            ; Disable interrupts
            SPLK    #0h, IMR        ; Mask all Ints
            SPLK    #0FFh, IFR      ; Clear all Int Flags
            CLRC    SXM             ; Clear Sign Extension Mode
            CLRC    OVM             ; Reset Overflow Mode
            CLRC    CNF             ; Config Block B0 to Data mem.
            
;           call    INIT_2407

; Infinite loop:
;                        point_b0
;                        SPLK        #1,Main_counter       
                        POINT_PF1
;LOOP               
                        LAR     AR0,#7090H
                        MAR                *,AR0
                        SPLK        #0FFFFH,*
                        SPLK    #0,*
;                        B       LOOP
                        LAR     AR1,#7098H
                        MAR                *,AR1
LOOP                       
                        SPLK        #0FF00H,*
                        call        delay
                        SPLK        #0FFFFH,*
                        call        delay
                        B                LOOP



delay:
                        SETC    INTM
                        point_b0
                        lacc        #8
                        sacl    Main_counter
delay_0:
                        lacc        Main_counter
                       
                        sub        #1
                        sacl        Main_counter       
                        cc                delay_0,gt


                        ret
         



****************************************************************
;Module:                 2407 Initialization
;
;                 Initialize the PLL, Watchdog and Wait state generator
;                                         Clear EV registers
***************************************************************
INIT_2407:
            POINT_B0                       ; Variables data page
            SPLK    #01000000b, GPR0       ; Set 1 wait state for I/O
            OUT     GPR0, WSGR

            POINT_PF1                      ; Peripherals first data page
            SPLK    #4000h, SCSR

; Disable the watchdog timer
            POINT_PF1                      ; Peripherals first data page
            SPLK    #006Fh, WD_CNTL
            SPLK    #05555h, WD_KEY
            SPLK    #0AAAAh, WD_KEY
            SPLK    #006Fh, WD_CNTL

; Enable EVA peripheral clocks
            SPLK    #4, 7018h                 

; Clear All EV Registers
            ZAC
            POINT_EV                       ; EV data page
            SACL    GPTCON
            SACL    T1CNT
            SACL    T1CMP
            SACL    T1PER
            SACL    T1CON
            SACL    T2CNT
            SACL    T2CMP
            SACL    T2PER
            SACL    T2CON
            SACL    COMCON
            SACL    ACTR  
            SACL    DBTCON
            SACL    CMPR1
            SACL    CMPR2
            SACL    CMPR3   
            SACL    CAPCON
            SACL    CAPFIFO
            SACL    FIFO1
            SACL    FIFO2
            SACL    FIFO3

                  RET                                    ; Return to main

最新回复

问题解决了,谢谢!   详情 回复 发表于 2007-8-1 07:46
 
点赞 关注

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

程序有点乱,可以精简一下

  怎么用:
   cc                delay_0,gt
   呢? cc   是条件调用,条件成立就 CALL,返回地址要进堆栈的。堆栈只有8 层,当 N < 8 时,也有点乱,但最后还能一层一层地退回来,N > 8 时,堆栈溢出,存放的返回地址被破坏,就彻底完蛋了。这是很有趣的一个例子,值得推敲。
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
  被破坏的是原先调用delay时保存的返回地址.
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

4
 
问题解决了,谢谢!
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表