⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 em78math.inc

📁 FM发射器源代码,方案义隆MCU+罗姆1418,频率88MHZ到108MHZ
💻 INC
字号:
;**********************************************************************;
; Title:        EM78Math Macros Define                                 ;
; Description:  The Maths for EM78x447xxx                              ;
; Company:      Elan Corp.Inc                                          ;
; Author:       Bin.Ren                                                ;
; Date:         5/26/2004                                              ;
; Version:      1.0                                                    ;
;**********************************************************************;
;
IFNDEF STATUS
STATUS      ==    0x03
ENDIF
        ;{
IFNDEF Z
            Z       ==  0x02
ENDIF
IFNDEF C
            C       ==  0x00
ENDIF
        ;}
IFNDEF reg_acc
reg_acc     ==    0x20
ENDIF
IFNDEF R20
R20         ==    0x20
ENDIF
IFNDEF reg_acc1
reg_acc1    ==    0x21
ENDIF
IFNDEF R21
R21         ==    0x21
ENDIF
IFNDEF reg_acc2
reg_acc2    ==    0x22
ENDIF
IFNDEF R22
R22         ==    0x22
ENDIF
IFNDEF reg_acc3
reg_acc3    ==    0x23
ENDIF
IFNDEF R23
R23         ==    0x23
ENDIF
IFNDEF reg_acc4
reg_acc4    ==    0x24
ENDIF
IFNDEF R24
R24         ==    0x24
ENDIF
IFNDEF reg_acc5
reg_acc5    ==    0x25
ENDIF
IFNDEF R25
R25         ==    0x25
ENDIF
IFNDEF reg_acc6
reg_acc6    ==    0x26
ENDIF
IFNDEF R26
R26         ==    0x26
ENDIF
IFNDEF reg_acc7
reg_acc7    ==    0x27
ENDIF
IFNDEF R27
R27         ==    0x27
ENDIF
IFNDEF reg_acc8
reg_acc8    ==    0x28
ENDIF
IFNDEF R28
R28         ==    0x28
ENDIF
IFNDEF reg_acc9
reg_acc9    ==    0x29
ENDIF
IFNDEF R29
R29         ==    0x29
ENDIF
IFNDEF reg_acca
reg_acca    ==    0x2A
ENDIF
IFNDEF R2A
R2A         ==    0x2A
ENDIF
IFNDEF reg_accb
reg_accb    ==    0x2B
ENDIF
IFNDEF R2B
R2B         ==    0x2B
ENDIF
IFNDEF reg_accc
reg_accc    ==    0x2C
ENDIF
IFNDEF R2C
R2C         ==    0x2C
ENDIF
IFNDEF reg_accd
reg_accd    ==    0x2D
ENDIF
IFNDEF R2D
R2D         ==    0x2D
ENDIF
;
;**********************************************************************;
; Title:       1 Byte Binary Code Transform BCD Code                   ;
; Description: Hundred Bigit Of Bcd Cade Storage In  Low Bigit  Of     ;
;              reg_acc3,Entries Bigit Of Bcd Cade Storage In High      ;
;              Bigit Of reg_acc2, Binary Data Storage In reg_acc1      ;
; Arithmetic:  BCD==100*a+10*b+c                                       ;
; Input:       reg_acc1                                                ;
; Output:      reg_acc3, reg_acc2                                      ;
; Variable Register:None                                               ;
; Register Changed: R3, 0 ;ACC                                         ;
;**********************************************************************;
;
mBinToBcd1 MACRO reg_acc1, reg_acc3, reg_acc2
;
        CLR     reg_acc2        ;clear BCD data register
        CLR     reg_acc3
        MOV     A, reg_acc1
$Bin_Bcd1:
        ADD     A, @156         ;subtract 100 from binary that is transform
        JBS     STATUS, C       ;borrow bigit?
        JMP     $Bin_Bcd2       ;borrow bigit jump to Bin_Bcd2
        INC     reg_acc3        ;if don't borrow bigit then hundred bigit adding 1
        JMP     $Bin_Bcd1       ;backing out
$Bin_Bcd2:
        ADD     A, @100         ;有借位,则加回被减去的数100
        MOV     reg_acc1, A
$Bin_Bcd3:
        ADD     A, @246         ;余下的被减数再减10
        JBS     STATUS, C       ;有借位吗?
        JMP     $Bin_Bcd4       ;有借位,则跳出
        INC     reg_acc2        ;无借位,则BCD码的十位寄存器加1
        JMP     $Bin_Bcd3
$Bin_Bcd4:
        ADD     A, @10          ;有借位,则加回被减去的数10
        SWAP    reg_acc2        ;将BCD码的十位存到reg_acc2的高半字节
        ADD     reg_acc2, A     ;将BCD码的个位存到reg_acc2的低半字节
        ENDM
;
;**********************************************************************;
; Title:       2 Byte Binary Code Transform BCD Code                   ;
; Description: Highest Bigit Of Bcd Storage In Low Byte Of reg_acc5,   ;
;              Lowest Bigit Of Bcd Storage In Low Byte Of reg_acc3,    ;
;              High Bigit Of Binary Storage In reg_acc1,               ;
;              Low Bigit Of Binart Storage In reg_acc2,                ;
; Input:       reg_acc1, reg_acc2                                      ;
; Output:      reg_acc3, reg_acc4, reg_acc5                            ;
; Variable Register:reg_acc, reg_accd                                  ;
; Register Changed: R3, 0; ACC                                         ;
; Status:      1                                                       ;
;**********************************************************************;
;
mBinToBcd2 MACRO reg_acc2, reg_acc1, reg_acc5, reg_acc4, reg_acc3
;
        MOV     A, @16          ;设定移位字节长度(其值=byte*8)
        MOV     reg_acc, A
        CLR     reg_acc5        ;清BCD码寄存器
        CLR     reg_acc4
        CLR     reg_acc3
        BC      STATUS, C       ;清R3标志位C
$Bin_Bcd1:
        RLC     reg_acc1        ;左移被转换的字节的最低位寄存器
        RLC     reg_acc2        ;左移被转换的字节的最高位寄存器
        RLC     reg_acc3        ;左移BCD码的最低位寄存器
        RLC     reg_acc4
        RLC     reg_acc5        ;左移BCD码的最高位寄存器
        DJZ     reg_acc         ;移位完成了吗?
        JMP     $Bin_Bcd2       ;未完,进行BCD码调整
        JMP     $Bin_Bcd3       ;移位完,跳出
$Bin_Bcd2:
        MOV     A, reg_acc3     ;对reg_acc3进行BCD码调整
        CALL    $bcdadj         ;调BCD码调整子程序
        MOV     reg_acc3, A     ;
        MOV     A, reg_acc4     ;对reg_acc4进行BCD码调整
        CALL    $BCDADJ
        MOV     reg_acc4, A
        MOV     A, reg_acc5     ;对reg_acc5进行BCD码调整
        CALL    $BCDADJ
        MOV     reg_acc5, A
        JMP     $Bin_Bcd1       ;返回,继续进行移位处理
;-------BCD Code Adjust Subprogram---------------
$BCDADJ:
        ADD     A, @51
        MOV     reg_accd, A
        JBS     reg_accd, 3
        ADD     A, @253
        JBS     reg_accd, 7
        ADD     A, @208
        RET
$Bin_Bcd3:
        ENDM
;
;**********************************************************************;
; Title:      3 Byte Binary Code Transform Bcd Code                    ;
; Description:reg_acc7的高半字节存放BCD码的最高位,                    ;
;             reg_acc4的低半字节存放BCD码的最低位,                     ;
;             reg_acc3存放被转换字节的最高位,                         ;
;             reg_acc1存放被转换字节的最低位。                         ;
; Input:      reg_acc1, reg_acc2, reg_acc3                             ;
; Output:     reg_acc4, reg_acc5, reg_acc6, reg_acc7                   ;
; Variable Register:reg_acc, reg_accd                                  ;
; Register Changed: R3, 0;ACC                                          ;
; stack:      1                                                        ;
;**********************************************************************;
;
mBinToBcd3 MACRO reg_acc3, reg_acc2, reg_acc1, reg_acc7, reg_acc6, reg_acc5, reg_acc4
;
        MOV     A, @24          ;设定移位字节长度(其值=byte*8)
        MOV     reg_acc, A
        CLR     reg_acc4
        CLR     reg_acc5
        CLR     reg_acc6
        CLR     reg_acc7
        BC      STATUS, C       ;清R3标志位C
$Bin_Bcd1:
        RLC     reg_acc1        ;左移被转换字节数的最低位寄存器
        RLC     reg_acc2
        RLC     reg_acc3        ;左移被转换字节数的最高位寄存器
        RLC     reg_acc4        ;左移BCD码的最低位寄存器
        RLC     reg_acc5
        RLC     reg_acc6
        RLC     reg_acc7        ;左移BCD码的最高位寄存器
        DJZ     reg_acc         ;移位完成了吗?
        JMP     $Bin_Bcd2       ;未完,进行BCD码调整
        JMP     $Bin_Bcd3       ;移位完,跳出
$Bin_Bcd2:
        MOV     A, reg_acc4     ;对reg_acc4进行BCD码调整
        CALL    $BCDADJ         ;调BCD码调整子程序
        MOV     reg_acc4, A
        MOV     A, reg_acc5     ;对reg_acc5进行BCD码调整
        CALL    $BCDADJ
        MOV     reg_acc5, A
        MOV     A, reg_acc6     ;对reg_acc6进行BCD码调整
        CALL    $BCDADJ
        MOV     reg_acc6, A
        MOV     A, reg_acc7     ;对reg_acc7进行BCD码调整
        CALL    $BCDADJ
        MOV     reg_acc7, A
        JMP     $Bin_Bcd1       ;移位未完,返回,继续进行移位处理
;-------BCD Code Adjust Subprogram---------------
$BCDADJ:
        ADD     A, @51
        MOV     reg_accd, A
        JBS     reg_accd, 3
        ADD     A, @253
        JBS     reg_accd, 7
        ADD     A, @208
        RET
$Bin_Bcd3:
        ENDM
;
;**********************************************************************;
; Title:      4 Byte Binary Code Transform Bcd Code                    ;
; Description:reg_acc9的高半字节存放BCD码的最高位,                    ;
;             reg_acc5的低半字节存放BCD码的最低位,                    ;
;             reg_acc4存放被转换字节的最高位,                         ;
;             reg_acc1存放被转换字节的最低位

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -