请选择 进入手机版 | 继续访问电脑版
查看: 3768|回复: 0

给使用应广单片机 做开发的初学者一个入门的例程

[复制链接]
发表于 2015-3-12 11:46:07 | 显示全部楼层 |阅读模式

给使用应广单片机 做开发的初学者一个入门的例程
这是一个 电推剪的 案子 最先开始的样子 刚拿到 应广的单片机 第一次尝试做电推剪
由于这是一个公司真实的案子 所以请见谅 给大家的是一个 刚开始的版本

有一段 32 bit /32 bit 的除法 改自 匠人手记

;;====================除法宏定义
;;入口:
;;         被除数  =  NUM_A3,NUM_A2,NUM_A1,NUM_A0
;;  除数          =  NUM_B3,NUM_B2,NUM_B1,NUM_B0         
;;出口:
;;                商     =  NUM_C3,NUM_C2,NUM_C1,NUM_C0               
;;         余数   =  NUM_D3,NUM_D2,NUM_D1,NUM_D0               
DIV_RLC:

        CLEAR                        COUNT_JSQ
        SET1                        COUNT_JSQ,0X05                                ;32
        MOV        A,0x00
        CEQSN        NUM_B3,A
        ;MOV                        NUM_B3,NUM_B3
        ;T1SN                        Z
        GOTO                        DIV_RLC_0
        ;MOV                        NUM_B2,NUM_B2
        ;T1SN                        Z
;        MOV        A,0x00
        CEQSN        NUM_B2,A
        GOTO                        DIV_RLC_0
        ;MOV                        NUM_B1,NUM_B1
        ;T1SN                        Z
;        MOV        A,0x00
        CEQSN        NUM_B1,A
        GOTO                        DIV_RLC_0
        ;MOV                        NUM_B0,NUM_B0
        ;T1SN                        Z
;        MOV        A,0x00
        CEQSN        NUM_B0,A
        GOTO                        DIV_RLC_0
        GOTO                        DIV_ERR
DIV_RLC_0:        
        ALLCLR        NUM_C3,NUM_C2,NUM_C1,NUM_C0
        ALLCLR        NUM_D3,NUM_D2,NUM_D1,NUM_D0                        
;======除数不为0
DIV_32_32_LP:               
        ALLRLC        NUM_A3,NUM_A2,NUM_A1,NUM_A0
        ALLRLC        NUM_D3,NUM_D2,NUM_D1,NUM_D0        
;==试商
        T0SN                        C
        GOTO                        DIV_32_32_LP1
        ;SIZE_COMP                NUM_D3,NUM_D2,NUM_D1,NUM_D0,NUM_B3,NUM_B2,NUM_B1,NUM_B0
        MOV                A,NUM_D3
        ;MOV                RTMP_MAC,A
        ;MOV                A,NUM_B3
        ;SUB                A,RTMP_MAC
        COMP                A,NUM_B3
        T0SN                C
        GOTO                COMP_Small
        T1SN                Z
        GOTO                COMP_LARGE

        MOV                A,NUM_D2
        ;MOV                RTMP_MAC,A
        ;MOV                A,NUM_B2
        ;SUB                A,RTMP_MAC
        COMP                A,NUM_B2
        T0SN                C
        GOTO                COMP_Small
        T1SN                Z
        GOTO                COMP_LARGE        

        MOV                A,NUM_D1
        ;MOV                RTMP_MAC,A
        ;MOV                A,NUM_B1
        ;SUB                A,RTMP_MAC
        COMP                A,NUM_B1
        T0SN                C
        GOTO                COMP_Small
        T1SN                Z
        GOTO                COMP_LARGE        

        MOV                A,NUM_D0
        ;MOV                RTMP_MAC,A
        ;MOV                A,NUM_B0
        ;SUB                A,RTMP_MAC
        COMP        A,NUM_B0
        T0SN                C
        GOTO                COMP_Small
        T1SN                Z
        GOTO                COMP_LARGE               
;        GOTO                COMP_LARGE
COMP_LARGE:
        SET1                C
        GOTO                SIZE_COMP_OUT
COMP_Small:
        SET0                C
        GOTO                SIZE_COMP_OUT        
SIZE_COMP_OUT:
        ;
        ;*/
        T1SN                        C
        GOTO                        DIV_32_32_LP2
;        SET0                        C
DIV_32_32_LP1:
        MOV                        A,NUM_B0
        SUB                        NUM_D0,A
        SUBCC                NUM_D1,NUM_B1
        SUBCC                NUM_D2,NUM_B2
        SUBCC                NUM_D3,NUM_B3
        SET1                        C        
DIV_32_32_LP2:
        ALLRLC        NUM_C3,NUM_C2,NUM_C1,NUM_C0
        DZSN                        COUNT_JSQ
        GOTO                        DIV_32_32_LP
        SET0                        C
        GOTO                        DIV_RLC_OUT
DIV_ERR:                                                        ;溢出(除数=0)处理
        MOV                A,0XFF
        MOV                NUM_C3,A
        MOV                NUM_C2,A
        MOV                NUM_C1,A
        MOV                NUM_C0,A

        MOV                NUM_D3,A
        MOV                NUM_D2,A
        MOV                NUM_D1,A
        MOV                NUM_D0,A
        SET1                C
DIV_RLC_OUT:
        RET      

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表