请教一个三星写程序时遇到的问题;源程序如下 ;**************************** 常通的定义 ********************************************** 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口只输出高电平,不知道为什么? |