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

📄 32bits_multiple.asm

📁 改程序实现了C8051F120混合信号片上系统32位乘法
💻 ASM
📖 第 1 页 / 共 2 页
字号:

/* TMR3CN 0xC8 */
sbit TF3 =        0xCF ;  /* TIMER 3 OVERFLOW FLAG */
sbit EXF3 =       0xCE ;  /* TIMER 3 EXTERNAL FLAG */
sbit EXEN3 =      0xCB ;  /* TIMER 3 EXTERNAL ENABLE FLAG */
sbit TR3 =        0xCA ;  /* TIMER 3 ON/OFF CONTROL */
sbit CT3 =        0xC9 ;  /* TIMER 3 COUNTER SELECT */
sbit CPRL3 =      0xC8 ;  /* TIMER 3 CAPTURE SELECT */

/* TMR4CN 0xC8 */
sbit TF4 =        0xCF ;  /* TIMER 4 OVERFLOW FLAG */
sbit EXF4 =       0xCE ;  /* TIMER 4 EXTERNAL FLAG */
sbit EXEN4 =      0xCB ;  /* TIMER 4 EXTERNAL ENABLE FLAG */
sbit TR4 =        0xCA ;  /* TIMER 4 ON/OFF CONTROL */
sbit CT4 =        0xC9 ;  /* TIMER 4 COUNTER SELECT */
sbit CPRL4 =      0xC8 ;  /* TIMER 4 CAPTURE SELECT */

/* PSW 0xD0 */
sbit CY =         0xD7 ;  /* CARRY FLAG */
sbit AC =         0xD6 ;  /* AUXILIARY CARRY FLAG */
sbit F0 =         0xD5 ;  /* USER FLAG 0 */
sbit RS1 =        0xD4 ;  /* REGISTER BANK SELECT 1 */
sbit RS0 =        0xD3 ;  /* REGISTER BANK SELECT 0 */
sbit OV =         0xD2 ;  /* OVERFLOW FLAG */
sbit F1 =         0xD1 ;  /* USER FLAG 1 */
sbit P =          0xD0 ;  /* ACCUMULATOR PARITY FLAG */

/* PCA0CN 0xD8 */
sbit CF =         0xDF ;  /* PCA 0 COUNTER OVERFLOW FLAG */
sbit CR =         0xDE ;  /* PCA 0 COUNTER RUN CONTROL BIT */
sbit CCF5 =       0xDD ;  /* PCA 0 MODULE 5 INTERRUPT FLAG */
sbit CCF4 =       0xDC ;  /* PCA 0 MODULE 4 INTERRUPT FLAG */
sbit CCF3 =       0xDB ;  /* PCA 0 MODULE 3 INTERRUPT FLAG */
sbit CCF2 =       0xDA ;  /* PCA 0 MODULE 2 INTERRUPT FLAG */
sbit CCF1 =       0xD9 ;  /* PCA 0 MODULE 1 INTERRUPT FLAG */
sbit CCF0 =       0xD8 ;  /* PCA 0 MODULE 0 INTERRUPT FLAG */

/* ADC0CN 0xE8 */
sbit AD0EN  =     0xEF ;  /* ADC 0 ENABLE */
sbit AD0TM =      0xEE ;  /* ADC 0 TRACK MODE */
sbit AD0INT =     0xED ;  /* ADC 0 EOC INTERRUPT FLAG */
sbit AD0BUSY =    0xEC ;  /* ADC 0 BUSY FLAG */
sbit AD0CM1   =   0xEB ;  /* ADC 0 CONVERT START MODE BIT 1 */
sbit AD0CM0 =     0xEA ;  /* ADC 0 CONVERT START MODE BIT 0 */
sbit AD0WINT =    0xE9 ;  /* ADC 0 WINDOW INTERRUPT FLAG */
sbit AD0LJST =    0xE8 ;  /* ADC 0 RIGHT JUSTIFY DATA BIT */

/* ADC2CN 0xE8 */
sbit AD2EN  =     0xEF ;  /* ADC 2 ENABLE */
sbit AD2TM =      0xEE ;  /* ADC 2 TRACK MODE */
sbit AD2INT =     0xED ;  /* ADC 2 EOC INTERRUPT FLAG */
sbit AD2BUSY =    0xEC ;  /* ADC 2 BUSY FLAG */
sbit AD2CM2 =     0xEB ;  /* ADC 2 CONVERT START MODE BIT 2 */
sbit AD2CM1 =     0xEA ;  /* ADC 2 CONVERT START MODE BIT 1 */
sbit AD2CM0 =     0xE9 ;  /* ADC 2 CONVERT START MODE BIT 0 */
sbit AD2WINT =    0xE8 ;  /* ADC 2 WINDOW INTERRUPT FLAG */

/* SPI0CN 0xF8 */
sbit SPIF =       0xFF ;  /* SPI 0 INTERRUPT FLAG */
sbit WCOL =       0xFE ;  /* SPI 0 WRITE COLLISION FLAG */
sbit MODF =       0xFD ;  /* SPI 0 MODE FAULT FLAG */
sbit RXOVRN =     0xFC ;  /* SPI 0 RX OVERRUN FLAG */
sbit NSSMD1 =     0xFB ;  /* SPI 0 SLAVE SELECT MODE 1 */
sbit NSSMD0 =     0xFA ;  /* SPI 0 SLAVE SELECT MODE 0 */
sbit TXBMT =      0xF9 ;  /* SPI 0 TX BUFFER EMPTY FLAG */
sbit SPIEN =      0xF8 ;  /* SPI 0 SPI ENABLE */


/* SFR PAGE DEFINITIONS */

#define CONFIG_PAGE       0x0F    /* SYSTEM AND PORT CONFIGURATION PAGE */
#define LEGACY_PAGE       0x00    /* LEGACY SFR PAGE */
#define TIMER01_PAGE      0x00    /* TIMER 0 AND TIMER 1 */
#define CPT0_PAGE         0x01    /* COMPARATOR 0 */
#define CPT1_PAGE         0x02    /* COMPARATOR 1 */
#define UART0_PAGE        0x00    /* UART 0 */
#define UART1_PAGE        0x01    /* UART 1 */
#define SPI0_PAGE         0x00    /* SPI 0 */
#define EMI0_PAGE         0x00    /* EXTERNAL MEMORY INTERFACE */
#define ADC0_PAGE         0x00    /* ADC 0 */
#define ADC2_PAGE         0x02    /* ADC 2 */
#define SMB0_PAGE         0x00    /* SMBUS 0 */
#define TMR2_PAGE         0x00    /* TIMER 2 */
#define TMR3_PAGE         0x01    /* TIMER 3 */
#define TMR4_PAGE         0x02    /* TIMER 4 */
#define DAC0_PAGE         0x00    /* DAC 0 */
#define DAC1_PAGE         0x01    /* DAC 1 */
#define PCA0_PAGE         0x00    /* PCA 0 */
#define PLL0_PAGE         0x0F    /* PLL 0 */
#define MAC0_PAGE         0x03    /* MAC 0 */

 Result EQU 28H
     COM    EQU 25H
     DAT    EQU 26H
     CS     EQU P0.7
     RS     EQU P0.5
     SCLK   EQU P0.4
     SID    EQU P0.3
     RESET  EQU P0.6
;*******LCD端口初始化说明完毕***************************

     ORG 	0000H
     AJMP	MAIN    ;******入口转主程序BEGIN*************
 ORG  0100H
MAIN:
	   
     LCALL Oscillator_Init;不用修改,直接用,外接晶振为12M 系统时钟4倍频
	//	 LCALL IO_Init        ;****I/O初始化***************************
		// LCALL LCD_Init       ;****LCD 初始化**************************
     //LCALL ADC2_EXchange  ;
	//	 MOV SFRPAGE,#03H
  MOV R0,#10
	MOV R1,#0
	MOV R2,#0
	MOV R3,#0
	MOV R4,#10
	MOV R5,#0
	MOV R6,#0
	MOV R7,#0
BEGIN:
  MOV A,R3  //获得运算符号;
	XRL A,R7
  MOV C,ACC.7
	MOV F0,C
	PUSH PSW

  MOV SFRPAGE,#03H //低16位相乘结果送:33,32,31,30H中;
  MOV MAC0STA,#0
  MOV MAC0ACC1,#0
	MOV MAC0ACC0,#0
	MOV MAC0OVR,#0
  MOV MAC0CF,#01H
	MOV MAC0AH,R5
	MOV MAC0AL,R4
	MOV MAC0BH,R1
	MOV MAC0BL,R0
	NOP
	MOV R5,MAC0ACC3
	MOV 33H,R5
	MOV R4,MAC0ACC2
	MOV 32H,R4
	MOV R1,MAC0ACC1
	MOV 31H,R1
	MOV R0,MAC0ACC0
  MOV 30H,R0 
	MOV B,#0
	MOV C,MAC0SO
	MOV B.0,C

  MOV MAC0CF,#01H  //乘数低16位与被乘数高16位相乘,
	MOV MAC0AH,R7  
	MOV MAC0AL,R6
	MOV MAC0BH,R1
	MOV MAC0BL,R0 
	NOP
	MOV C,MAC0SO
	MOV B.1,C
	CLR C
	MOV R7,MAC0ACC3 
	MOV 35H,R7
	MOV R6,MAC0ACC2
	MOV 34H,R6
	MOV R1,MAC0ACC1	
	MOV R0,MAC0ACC0//结果相加;最后此次乘法结果送:35,34,33,32,31,30h中;
	MOV A,R0
	ADD A,32H
	MOV 32H,A
	MOV A,R1
  ADDC A,33H
	MOV 33H,A
  MOV C,B.0
	MOV A,34H
	ADDC A ,#0
	MOV 34H,A
	MOV A,35H
	ADDC A,#0H
	MOV 35H,A
	ORL C,B.1
	MOV  B.2,C

	MOV MAC0CF,#01H  //乘数高16位与被乘数低16位相乘,
	MOV MAC0AH,R5  
	MOV MAC0AL,R4 
	MOV MAC0BH,R3
	MOV MAC0BL,R2
	NOP
	NOP
	MOV C,MAC0SO
	MOV B.3,C
	CLR C
	MOV R7,MAC0ACC3
	MOV R6,MAC0ACC2
	MOV R1,MAC0ACC1	
	MOV R0,MAC0ACC0//结果相加;最后此次乘法结果送:35,34,33,32h中;
	MOV A,R0
	ADD A,32H
	MOV 32H,A
	MOV A,R1
  ADDC A,33H
	MOV 33H,A
	MOV A,R6
	ADDC A ,34H
	MOV 34H,A
	MOV A,R7
	ADDC A,35H
	MOV 35H,A
	ORL C,B.3
	MOV  B.3,C


  MOV MAC0CF,#01H  //乘数高16位与被乘数高16位相乘,
	MOV MAC0AH,R7  
	MOV MAC0AL,R6 
	MOV MAC0BH,R3
	MOV MAC0BL,R2
	NOP
	NOP
	MOV C,MAC0SO
	MOV B.4,C
	CLR C
	MOV R7,MAC0ACC3
	MOV R6,MAC0ACC2
	MOV R1,MAC0ACC1	
	MOV R0,MAC0ACC0//结果相加;最后此次乘法结果送:37、36、35,34,33,32h中;
	MOV A,R0
	ADD A,34H
	MOV 34H,A
	MOV A,R1
  ADDC A,35H
	MOV 35H,A
	MOV A,R6
	ADDC A ,#00h
	MOV C,B.2
	ADDC A,#00H
	CLR C
	MOV C,B.3
	ADDC A,#00H
	MOV 36H,A
	MOV A,R7
	ADDC A,#00h
	MOV 37H,A
	ORL C,B.4
	MOV  B.4,C//结果保留在:F0、B.4、37、36、35、34、33、32、31、30H中;其中F0为符号位、B.4为溢出位
             //             37h为高位,30h为低位;      

;************************************************完成32*16;******************
	                     
 
 
	SJMP $
 /// ANL MAC0OVR,#80H
//	MOV A,MAC0OVR
//	ORL A,R0
//	MOV R0,A
 // SJMP $
            ;
Oscillator_Init:   
    MOV  WDTCN,#0deh
		MOV  WDTCN,#0adh
    MOV  SFRPAGE,   #CONFIG_PAGE
    MOV  OSCXCN,    #067h
    MOV  R0,        #030        ; Wait 1ms for initialization
Osc_Wait1:
    CLR  A
    DJNZ ACC,       $
    DJNZ R0,        Osc_Wait1
Osc_Wait2:
    MOV  A,         OSCXCN
    JNB  ACC.7,     Osc_Wait2
    MOV  CLKSEL,    #011h
    RET                        ;********外部晶振22.1184M,该系统的将其2分频

;*************************************************************************************************************

END

⌨️ 快捷键说明

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