打印

关于EMC单片机使用

[复制链接]
1964|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
just_do_it|  楼主 | 2009-6-22 23:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位大侠,本人想用EMC单片机写个简单的流水灯程序的,但发现的问题挺麻烦的,也想不通:就是用单片机其中7个I/O口控制7组灯,用内部RC震荡,/RESET引脚用作普通I/O口,但发现有几个灯是亮的,其他的不亮,好奇怪,我也用仿真器试过。请问如果我用内部RC震荡,/RESET引脚用作普通I/O口,应该要注意什么?电路如下图

相关帖子

沙发
just_do_it|  楼主 | 2009-6-22 23:21 | 只看该作者

测试用的程序

    RAM_FIRST    ==    0X10        ; use    EM78P153S
    RAM_MAX        ==    0X2F        ; use     EM78P153S

    TCB_STS        ==    RAM_FIRST
    TCB_POINT    ==    TCB_STS + TCB_NUM
    TCB_TIM        ==    TCB_POINT + TCB_NUM
    
    TCB_CURRENT    ==    TCB_TIM + TCB_NUM
    INT_TEMP    ==    TCB_CURRENT + 1
    A_TEMP        ==    INT_TEMP + 1
    R3_TEMP        ==    A_TEMP + 1
    DP_TEMP        ==    R3_TEMP + 1
        
    LED_1     ==    1        ; p51    
    LED_2     ==    2        ; p52
    LED_3     ==    3        ; p53
    
    LED_4     ==    0        ; p60
    LED_5     ==    1        ; p61
    LED_6     ==    2        ; p62
    LED_7     ==    3        ; p63
        
;====================================================================
;        Define special register
;====================================================================
    DP_DATA        ==    0X00
    TCC        ==    0X01
    PC        ==    0X02
    R3        ==    0X03
    DP        ==    0X04
    
    P5        ==    0X05        ; use     EM78P153S
    P5_CONT        ==    0X05        ; use     EM78P153S
    P6        ==    0X06        ; use     EM78P153S
    P6_CONT        ==    0X06        ; use     EM78P153S
    
    PULL_DOWN_CONT    ==    0X0B        ; use     EM78P153S / EM78P447S
    OPEN_DRAIN_CONT    ==    0X0C        ; use     EM78P153S / EM78P447S
    PULL_HIGH_CONT    ==    0X0D        ; use     EM78P153S / EM78P447S
    WDT_CONT    ==    0X0E        ; use     EM78P153S / EM78P447S
    INT_CONT    ==    0X0F        ; use     EM78P153S / EM78P447S
            
;====================================================================
        ORG    0000H
        JMP    RESET
        
        ORG    0008H
        JMP    INTERRUPT
        
;====================================================================
;        start program
;====================================================================

        ORG    0058H
        
RESET:
        MOV    A,    @RAM_FIRST
        MOV    DP,    A
INIT_MEMORY:
        WDTC
        CLR    DP_DATA
        INC    DP
        MOV    A,    DP
        AND    A,    @0X3F
        XOR    A,    @RAM_MAX + 1
        JBS    R3,    Z
        JMP    INIT_MEMORY
        
INIT_TIMER:
        MOV    A,    @0B00000111      
        CONTW
        
        MOV    A,    @0X80            ; Enable WDT
        IOW    WDT_CONT
        
INIT_OTHER:
        MOV    A,    @0B00000000
        IOW    P5_CONT                ; Define p5.0- output,
                                      
        
        MOV    A,    @0B00000000          ; define p6 - output
        IOW    P6_CONT
        
        MOV    A,    @0B11111111
        MOV    P5,    A
        MOV    A,    @0B11111111        ; Close LED & motor
        MOV    P6,    A
        
        MOV    A,    @0B00000000        ; Enable pull down
        IOW    PULL_DOWN_CONT
        
        MOV    A,    @0B11111111
        IOW    PULL_HIGH_CONT            ; disable PULL UP
        
        MOV    A,    @0B11111111
        IOW    OPEN_DRAIN_CONT            ; Disable open drain 
        
        MOV    A,    @0B10101010
        MOV    P5,    A
        MOV    A,    @0B10101010        ; Close LEDs
        MOV    P6,    A
        
        CLR    INT_CONT
        NOP
        MOV    A,    @0X01
        IOW    INT_CONT            ; enble tcc, diable exter int
        
;====================================================================
MAIN:                                            
        BC    P5,    LED_1
        BC    P5,    LED_2
        BC    P5,    LED_3
        
        BS    P6,    LED_4
        BS    P6,    LED_5
        BS    P6,    LED_6
        BS    P6,    LED_7    
        
        CALL    LED_DELAY_PRO        ;这里省略

LED_DISPLAY_02:                                                                            
        BS    P5,    LED_1
        BS    P5,    LED_2
        BS    P5,    LED_3
        
        BC    P6,    LED_4
        BC    P6,    LED_5
        BC    P6,    LED_6
        BC    P6,    LED_7
        
            CALL     LED_DELAY_PRO        ;这里省略
        
        JMP    MAIN

;====================================================================
INTERRUPT:
        MOV    A_TEMP,    A
        SWAPA    R3
        MOV    R3_TEMP,    A
        MOV    A,    DP
        MOV    DP_TEMP,    A
        
        JBC    INT_CONT,    TCIF
        NOP
        
        BC     INT_CONT,    TCIF
            
INTERRUPT_RETURN:
        MOV    A,    DP_TEMP
        MOV    DP,    A
        SWAPA    R3_TEMP
        MOV    R3,    A
        SWAP    A_TEMP
        SWAPA    A_TEMP
        RETI
        
;====================================================================
        END
        
        
        
    
    
            
    
    
            

使用特权

评论回复
板凳
leolle| | 2009-6-23 10:40 | 只看该作者

RESET接高电平

使用特权

评论回复
地板
just_do_it|  楼主 | 2009-6-23 22:49 | 只看该作者

试试

明天试试

使用特权

评论回复
5
FREEXP| | 2009-6-26 10:27 | 只看该作者

兄弟,P63不能输出,只能输入!!!!!

P63不能输出,只能输入!!!!!

换一个端口就好了,P63直接接地或是电源

使用特权

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

本版积分规则

7

主题

21

帖子

1

粉丝