打印

有谁用过三星单片机的请进

[复制链接]
2120|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
koolean|  楼主 | 2008-11-3 00:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教一个三星写程序时遇到的问题;源程序如下
;**************************** 常通的定义 **********************************************
Bit0        EQU    1
Bit1        EQU    2
Bit2        EQU    4  
Bit3        EQU    8
Bit4        EQU    16    
Bit5        EQU    32
Bit6        EQU    64
Bit7        EQU    128
;*********** Contant Define **********************
CONT_10mSec    EQU    10
CONT_1Second    EQU    100
CONT_1Min    EQU    60        ;

;************* IO设定

; **** Port 0
CONT_P0        EQU    11111111B    ;
CONT_P0CONH    EQU    10101010B    ;
CONT_P0CONL    EQU    10101010B    ; 
 
; 外部中断设定
CONT_P0PND    EQU    00000000B    ; 
P00IF           EQU     00000001B       ; 
P01IF           EQU     00000100B       ;  

; ***** Port 1
CONT_P1        EQU    00001111B    ;
CONT_P1CON    EQU    00001010B    ;

; ***** Port 2
CONT_P2        EQU    11111111B    ;
CONT_P2CONH    EQU    01001010B    ;
CONT_P2CONL    EQU    10101010B    ;  

; **** T0 
CONT_T0CON    EQU    10001010B       ; 10001010B       ;
CONT_T0DATA    EQU    110   
T0_IF           EQU     00000001B       ; T0CON.0 T0 int Flag
T0_IE           EQU     00000010B       ; T0CON.1 Enable T0 Interrupt
T0_Count        EQU     00001000B       ; T0CON.3 Cleat 
T0 Count
;************* RAM Define ************************
;r0到r15为通用工作寄存器
;--自定义内存地址从00h 开始

            .RAM_ORG        00H
REG0        EQU    00H

T_1mSec        EQU    REG0
T_10mSec    EQU    REG0+1
T_1Sec        EQU    REG0+2s


;*********** T_Flag Define ***********************
F_10mSec        EQU     Bit0
F_1Second    EQU    Bit1    ;
F_1Minute    EQU    Bit2    ;  
;-----------------------------------------------------------
.include "E:开发软件目录OPENiceIncludeRegs3c9454.reg"
;************* Programme Start *******************
        .ORG     0000H
;中断向量
        .VECTOR  00h,P_INT
; SMART 定义
        .ORG     003CH        ;
        .DB      00H        ; 
        .DB      00H        ;
        .DB      0B3H        ;
        .DB      00H        ;
;*************************

;-----------------------------------------
    .ORG    0100H
RESET:     DI            ; 禁止全局中断
        LD      SP,#0C0H    ; 堆栈指针从0C0H开始到0B0H,共16个Byte
        LD    BTCON,#10100000B    ; 看门狗无效,清除BaseTime值
        LD    CLKCON,#01011000B    ; 总线频率等于晶体频率Fosc/1
      
    CALL    SYS_INIT        ; 
    CALL    RAM_CLR            ; 
        EI           
;************ Main Polling **************************
Main:
        TM      T_Flag,#F_10mSec          ;
        JR      Z,Main
        AND     T_Flag,#~F_10mSec         ;
        XOR     P0,#0FFH                    
        JP     Main
        
;*************** Main Polling End *******************
;*************** 
;*************** 
;*************** 
;*************** 
;***************   

;*************** Sys Initial *************************
SYS_INIT:
    LD      STOPCON,#00H            ; 
    LD    P0PND,#CONT_P0PND         ; 无外部中断
    LD    P0,#CONT_P0        ; 默认输出为高 
    LD    P0CONH,#CONT_P0CONH    ; 设置P04/P05/P06/P07为输出口
    LD    P0CONL,#CONT_P0CONL    ; 设置P00/P01/P02/P03为输出口
    ; 
    LD    P1,#CONT_P1        ; P1.1
    LD    P1CON,#CONT_P1CON    ; 外接晶体时p1.0 p1.1必须设为输出
    ;
    LD    P2,#CONT_P2        ;
    LD    P2CONH,#CONT_P2CONH    ;
    LD    P2CONL,#CONT_P2CONL    ;  
    ;
;-------- T0 Set
; 定时中断有效且为8分频
        
    LD    T0CON,#CONT_T0CON    ;enable T0 interrrupt
        LD      T0DATA,#CONT_T0DATA     ; ==110

; Fosc==8MHz,则T0中断为0.996ms =~= 1ms    ; 
    ;
    ;
    RET                ;
;*************** RAM Initial *************************
RAM_CLR:
    LD      R0,#0                   ;
RAM_CLR1:
    CLR    @R0
    INC    R0
    CP    R0,#0C0H
    JR    NZ,RAM_CLR1
    RET
;
;*********** INT Prog *******************************

P_INT:
INT0CHK:
    TM    P0PND,#P00IF            ;
    JP    NZ,P_INT0
;---------- 
T0CHK:
        TM    T0CON,#T0_IF             ;
        JP    NZ,T0INT
;---------- 
INT_END:        
        IRET 
;----------------------------------------------------
;
;********** INT Program *****************************
;        
;---------- INT0 Prog -------------------------------
P_INT0:
        AND     P0PND,#P00IF    ; 
    JP    INT_END        ;
;---------- T0 Prog ---------------------------------
; T0 timeOut ==0.996ms  
T0INT:
        AND     T0CON,#~T0_Count        ; 清除计数器数值
                AND    T0CON,#~T0_IF           ; 清除T0中断标示
        INC     T_10mSec                ; 
        CP      T_10mSec,#100           ; 
        JR      NZ,INT_END              ;
        CLR     T_10mSec
        OR      T_Flag,#F_10mSec        ;  ;10ms标志
        

;************ INT End *******************************

;********* Programme End *************************
       .END  
;************************************************

原意是想在P0口产生每10ms一次变化的方波,但是上电以后,看到IO口只输出高电平,不知道为什么?

相关帖子

沙发
koolean|  楼主 | 2008-11-4 00:01 | 只看该作者

没人用三星么?

给点建议啊?

使用特权

评论回复
板凳
koolean|  楼主 | 2008-11-10 17:46 | 只看该作者

终于找到问题了。

清ram的那个子程序,会把堆栈的内容清空,这样就会导致CLR_RAM子程序无法返回。

使用特权

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

本版积分规则

16

主题

127

帖子

1

粉丝