导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→求助,有用过义隆单片机的朋友帮帮忙[slightdark]

 *第8445篇: 求助,有用过义隆单片机的朋友帮帮忙

  
楼 主:slightdark 2007年8月2日10:27
 求助,有用过义隆单片机的朋友帮帮忙
我用的是义隆的EM78P153S单片机,最近编写了一个恒温控制与抽水的程序。P50,P60,P61,P62为输入口,P50内部下拉,P60,P61,P62内部上拉。如果P61口在上电前按地的话,上电后会出现电流持续过大,单片机迅速发热的情况。如果P61口在上电前没有接地,则工作基本正常,工作电流在10mA以下。其他的输入口都不会出现这种情况。试烧几个单片机都是这样。P61口只是普通IO口,并无第二功能,为什么会出现这样的情况呢?怎么样能解决这个问题?
还有,就是如果P62口所接的按键如果连续20分钟不动作,单片机进入休眠。因为程序休眠前采用TCC中断来计时,所以20分钟后是在中断服务程序中进入睡眠方式,醒来后再返回主程序,这样设计程序是否妥当?我在书上没有看到有这样设计程序的。
我编写的程序如下:
;*******************输入输出口定义***********************

P5       EQU        0X05
P6       EQU        0X06

;*******************控制寄存器***************************

IOC5     EQU        0X05
IOC6     EQU        0X06
IOCB     EQU        0X0B
IOCC     EQU        0X0C
IOCD     EQU        0X0D
IOCE     EQU        0X0E
IOCF     EQU        0X0F
RF       EQU        0X0F

;*******************特殊功能寄存器***********************

TCC      EQU        0X01         
PC       EQU        0X02
PSW      EQU        0X03


;********************用户自定义寄存器********************  

T1       EQU        0X10              ;计时寄存器
T2       EQU        0X11
T3       EQU        0X12
LP_CNT0  EQU        0X13            ;循环计数寄存器
LP_CNT1  EQU        0X14
LP_CNT2  EQU        0X15
LP_CNT3  EQU        0X16
STACK_A  EQU        0X17           ;A寄存器内容保存寄存器
STACK_S  EQU        0X18           ;状态寄存器内容保存寄存器

;********************位定义******************************

WATER1   EQU        0X00        ;入水水箱
WATER2   EQU        0X01        ;出水水箱
KY       EQU        0X02         ;按键
ALARM    EQU        0X07       ;报警蜂鸣器
FIRE     EQU        0X04         ;加热继电器
PUMP     EQU        0X05        ;水泵
TMPR     EQU        0X00        ;测温度电阻 

  ORG   0X00
  ADD   A,@0XFF
  ADD   A,@0XFF
  ADD   A,@0XFF
  JMP   MAIN
  ORG   0X08
  MOV   STACK_A,A       ;存储A值
                                SWAP  STACK_A 
                               SWAPA PSW             ;存储状态寄存器值 
                               MOV   STACK_S,A 
  CLR   RF
  JMP   TCCINT
INT_RET:
  SWAPA   STACK_S         ;恢复状态寄存值 
                                MOV     PSW,A 
                                SWAPA   STACK_A         ;恢复A值 
                                RETI 


MAIN:
  MOV   A,@0X0            ;禁看门狗
  IOW   IOCE          
  MOV   A,@00001111b      ;P60,P61,P62输入,P67,64,65输出
  IOW   IOC6          
  MOV   A,@00000001b      ;p50输入
  IOW   IOC5          
  MOV   A,@00000111b      ;TCC分频1:256
  CONTW         
  MOV   A,@130            ;20分钟延时     
  MOV   T1,A
  MOV   A,@93
  MOV   T2,A
  MOV   A,@3
  MOV   T3,A
                 MOV   A,@00000001b      ;允许TCC中断
  IOW   IOCF
  NOP
  NOP
  MOV   A,@11111000b      ;P60,P61,P62上拉使能
  IOW   IOCD
  MOV   A,@10110000b      ;P64,P65,P67漏极开路使能
  IOW   IOCC          
  MOV   A,@01111110b      ;p50下拉使能
  IOW   IOCB          

  
  
  
MAIN_1:  
  
  JBC   P6,WATER2         ;出水水箱水满  
  JMP   WT_1          
WT_0:
  JBS   P6,WATER1         ;入水水箱水位不够     
  JMP   WT_2          
  BS    P6,PUMP           ;抽水      
  JMP   MAIN_2
  
WT_1:
  BC    P6,FIRE           ;停加热
  BC    P6,PUMP           ;停抽水,报警      
  JMP   RING    
  
WT_2:
  BC    P6,PUMP           ;停抽水
  JMP   MAIN_2
  
MAIN_2:
  JBS   P6,KY             ;未按键        
  JMP   FR_1
  
  JBC   P5,TMPR           ;温度到90度      
  JMP   FR_2
  BC    P6,FIRE           ;停止加热
  JMP   MAIN_1
  
FR_1:                       
                  MOV   A,@00000000b      ;禁止TCC中断
                 IOW   IOCF
                 MOV   A,@130            ;20分钟延时     
  MOV   T1,A
  MOV   A,@93
  MOV   T2,A
  MOV   A,@3
  MOV   T3,A
                MOV   A,@00000001b      ;允许TCC中断
  IOW   IOCF
  
     
FR_2: 
  BS    P6,FIRE        ;加热      
  JMP   MAIN_1  
  


RING:                        ;报警音1KHz,0.3S响,2.7s停
  MOV   A,@3
  MOV   LP_CNT3,A
RING_LP_1:
  MOV   A,@100
  MOV   LP_CNT2,A
RING_LP_2:
  CALL  DELAY_05MS
  BS    P6,ALARM
  CALL  DELAY_05MS
  BC    P6,ALARM
  DJZ   LP_CNT2
  JMP   RING_LP_2
  DJZ   LP_CNT3
  JMP   RING_LP_1
  
  MOV   A,@27
  MOV   LP_CNT3,A
RING_LP_3:
  MOV   A,@100
  MOV   LP_CNT2,A
RING_LP_4:
  CALL  DELAY_05MS
  DJZ   LP_CNT2
  JMP   RING_LP_4
  DJZ   LP_CNT3
  JMP   RING_LP_3
  JBC   P6,WATER2    
  JMP   RING
  JMP   WT_0
    
  
DELAY_05MS:                       ;延时0.5ms子程序
  MOV A, @1              
  MOV LP_CNT0, A
DEL_1:
  NOP
  MOV A, @200
  MOV LP_CNT1, A
DEL_2:
  NOP
  NOP
  NOP
  DJZ LP_CNT1
  JMP DEL_2
  DJZ LP_CNT0
  JMP DEL_1
  RET


  
  
TCCINT:                        ;TCC中断子程序
  DJZ   T1
  JMP   INT_RET
  MOV   A,@130
  MOV   T1,A
  DJZ   T2
  JMP   INT_RET
  MOV   A,@130
  MOV   T1,A
  MOV   A,@93
  MOV   T2,A
  DJZ   T3
  JMP   INT_RET
  MOV   A,@00001110b     ;WDT预分频, 
  CONTW
                WDTC                   ;清WDT和预分频器                  
                               MOV   A,@00000000b     ;WDT禁止
                               IOW   IOCE 
                               MOV   P6,P6            ;读端口6     
                               MOV   A,@00000010b     ;使能端口6中断 
                              IOW   IOCF 
                              DISI                   ;禁止全局中断               
                              SLEP 
                              NOP
                              NOP 
                              MOV   A,@0X0            ;禁看门狗
  IOW   IOCE          
  MOV   A,@00000111b      ;TCC分频1:256
  CONTW         
  MOV   A,@130            ;20分钟延时     
  MOV   T1,A
  MOV   A,@93
  MOV   T2,A
  MOV   A,@3
  MOV   T3,A
                MOV   A,@00000001b      ;允许TCC中断
  IOW   IOCF     
                JMP   INT_RET

  
2楼:lyjin666 2009年9月24日11:06
 qweqwe
是不是I/O没关啊!I/O没关的会有大电流的

>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:ZigBee协议栈开发工具/开发系统

[下一篇主题]:急急急求助看门狗x5045的问题!!!!!![求助]