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

📄 jiance.asm

📁 主要用于8051F020的监测数据其中包括A/D等
💻 ASM
字号:
 /*  BYTE Registers  */
			
sfr PCON     =  0x87;	/* POWER CONTROL                                           */
sfr TCON     =  0x88;	/* TIMER CONTROL                                           */
sfr TMOD     =  0x89;	/* TIMER MODE                                              */
sfr TL0      =  0x8A;	/* TIMER 0 - LOW BYTE                                      */
sfr TL1      =  0x8B;	/* TIMER 1 - LOW BYTE                                      */
sfr TH0      =  0x8C;	/* TIMER 0 - HIGH BYTE                                     */	
sfr TH1      =  0x8D;	/* TIMER 1 - HIGH BYTE                                     */
sfr CKCON    =  0x8E;	/* CLOCK CONTROL                                           */
sfr PSCTL    =  0x8F;	/* PROGRAM STORE R/W CONTROL 
sfr SCON     =  0x98;                              */
sfr PRT0CF   =  0xA4;
sfr IE       =  0xA8;	/* INTERRUPT ENABLE                                        */
sfr OSCXCN   =  0xB1;	/* EXTERNAL OSCILLATOR CONTROL                             */
sfr OSCICN   =  0xB2;	/* INTERNAL OSCILLATOR CONTROL                             */

sfr AMX0CF   =  0xBA;	/* ADC 0 MUX CONFIGURATION                                 */
sfr AMX0SL   =  0xBB;	/* ADC 0 MUX CHANNEL SELECTION                             */
sfr ADC0CF   =  0xBC;	/* ADC 0 CONFIGURATION                                     */

sfr ADC0L    =  0xBE;	/* ADC 0 DATA - LOW BYTE                                   */
sfr ADC0H    =  0xBF;	/* ADC 0 DATA - HIGH BYTE                                  */


sfr PSW      =  0xD0;	/* PROGRAM STATUS WORD                                     */
sfr REF0CN   =  0xD1;	/* VOLTAGE REFERENCE 0 CONTROL
sfr DAC0L    =  0xD2;
sfr DAC0H    =  0xD3;
sfr DAC0CN   =  0xD4; /* DAC0CN ADDRESS*/                             */

sfr ACC      =  0xE0;	/* ACCUMULATOR                                             */
sfr XBR0     =  0xE1;	/* DIGITAL CROSSBAR CONFIGURATION REGISTER 0               */
sfr XBR1     =  0xE2;	/* DIGITAL CROSSBAR CONFIGURATION REGISTER 1               */
sfr XBR2     =  0xE3;	/* DIGITAL CROSSBAR CONFIGURATION REGISTER 2               */

sfr EIE1     =  0xE6;	/* EXTERNAL INTERRUPT ENABLE 1                             */
sfr EIE2     =  0xE7;	/* EXTERNAL INTERRUPT ENABLE 2                             */
sfr ADC0CN   =  0xE8;	/* ADC 0 CONTROL                                           */	

sfr B        =	 0xF0;   /* B REGISTER                                              */

sfr EIP1     =	 0xF6;   /* EXTERNAL INTERRUPT PRIORITY REGISTER 1                  */
sfr EIP2     =	 0xF7;   /* EXTERNAL INTERRUPT PRIORITY REGISTER 2                  */
sfr SPI0CN   =	 0xF8;   /* SERIAL PERIPHERAL INTERFACE 0 CONTROL                   */	

sfr WDTCN    =	 0xFF;   /* WATCHDOG TIMER CONTROL                                  */
sfr SBUF     =   0X99;
/*  BIT Registers  */

/*  TCON  0x88 */
sbit TF1   = TCON ^ 7;              /* TIMER 1 OVERFLOW FLAG      */
sbit TR1   = TCON ^ 6;              /* TIMER 1 ON/OFF CONTROL     */
sbit TF0   = TCON ^ 5;              /* TIMER 0 OVERFLOW FLAG      */
sbit TR0   = TCON ^ 4;              /* TIMER 0 ON/OFF CONTROL     */
sbit IE1   = TCON ^ 3;              /* EXT. INTERRUPT 1 EDGE FLAG */
sbit IT1   = TCON ^ 2;              /* EXT. INTERRUPT 1 TYPE      */
sbit IE0   = TCON ^ 1;              /* EXT. INTERRUPT 0 EDGE FLAG */
sbit IT0   = TCON ^ 0;              /* EXT. INTERRUPT 0 TYPE      */

/*  SCON  0x98 */
sbit SM0  = SCON ^ 7;             /* SERIAL MODE CONTROL BIT 0           */	
sbit SM1  = SCON ^ 6;             /* SERIAL MODE CONTROL BIT 1           */
sbit SM2  = SCON ^ 5;             /* MULTIPROCESSOR COMMUNICATION ENABLE */
sbit REN  = SCON ^ 4;             /* RECEIVE ENABLE                      */
sbit TB8  = SCON ^ 3;             /* TRANSMIT BIT 8                      */
sbit RB8  = SCON ^ 2;             /* RECEIVE BIT 8                       */
sbit TI   = SCON ^ 1;             /* TRANSMIT INTERRUPT FLAG             */
sbit RI   = SCON ^ 0;             /* RECEIVE INTERRUPT FLAG              */

/*  IE  0xA8 */
sbit EA    = IE ^ 7;                /* GLOBAL INTERRUPT ENABLE      */	
sbit ET2   = IE ^ 5;                /* TIMER 2 INTERRUPT ENABLE     */
sbit ES    = IE ^ 4;                /* SERIAL PORT INTERRUPT ENABLE */
sbit ET1   = IE ^ 3;                /* TIMER 1 INTERRUPT ENABLE     */
sbit EX1   = IE ^ 2;                /* EXTERNAL INTERRUPT 1 ENABLE  */
sbit ET0   = IE ^ 1;                /* TIMER 0 INTERRUPT ENABLE     */
sbit EX0   = IE ^ 0;                /* EXTERNAL INTERRUPT 0 ENABLE  */

/*  IP  0xB8 */
//sbit PT2   = IP ^ 5;                /* TIMER 2 PRIORITY					*/	
//sbit PS    = IP ^ 4;                /* SERIAL PORT PRIORITY				*/
//sbit PT1   = IP ^ 3;                /* TIMER 1 PRIORITY					*/
//sbit PX1   = IP ^ 2;                /* EXTERNAL INTERRUPT 1 PRIORITY	*/
//sbit PT0   = IP ^ 1;                /* TIMER 0 PRIORITY					*/
//sbit PX0   = IP ^ 0;                /* EXTERNAL INTERRUPT 0 PRIORITY	*/		

/* ADC0CN E8H */
sbit ADCEN   =   ADC0CN ^ 7;      /* ADC 0 ENABLE                              */
sbit ADCTM  =   ADC0CN ^ 6;      /* ADC 0 TRACK MODE                          */
sbit ADCINT    =   ADC0CN ^ 5;      /* ADC 0 CONVERISION COMPLETE INTERRUPT FLAG */
sbit ADCBUSY  =   ADC0CN ^ 4;      /* ADC 0 BUSY FLAG                           */
sbit ADCSTM1   =   ADC0CN ^ 3;      /* ADC 0 START OF CONVERSION MODE BIT 1      */
sbit ADCSTM0   =   ADC0CN ^ 2;      /* ADC 0 START OF CONVERSION MODE BIT 0      */
sbit ADCWINT   =   ADC0CN ^ 1;      /* ADC 0 WINDOW COMPARE INTERRUPT FLAG       */
sbit ADCLJST   =   ADC0CN ^ 0;      /* ADC 0 RIGHT JUSTIFY DATA BIT              */

///*  DAC0CN  */
//sbit DAC0EN    =   DAC0CN ^ 7;      /*            */

		 
		 ORG   0000h
     AJMP  MAIN
//     ORG   0023h
//     AJMP  INT_SERIAL
     ORG   007BH
     AJMP  INT_ADC0
     ORG   0100H

MAIN:          
     ACALL CLK_INIT
		 ACALL IE_INIT
     ACALL AMUX_INIT
		 ACALL T1_INIT
		 ACALL SERIAL_INIT
		 ACALL ADC_INIT
		 //端口设置寄存器设置,确定串口的输出和输入
		 ACALL DAC_INIT
     ACALL PORT_INIT
		 ACALL REF_INIT
		 AJMP  RUN_HER

CLK_INIT:      MOV OSCICN,#97H
               MOV OSCXCN,#00H      //内部的振荡器,选用16M,禁止外部的振荡器 
               RET

 IE_INIT:      MOV IE,#00H          //关中断
							 RET

                                    //使能IE,但是要屏蔽相应的中断,等到相应的程序中触发


     //通道的选择
AMUX_INIT:     MOV AMX0CF,#00H      //配置AMUX模式寄存器,控制单端输入或是差分输入。
		           MOV AMX0SL,#01H      //选择通道AIN0.1
							 RET                  //配置通道选择寄存器,选择第一通道,为水平传感器
		 //配置串口,工作在波特率可变的工作方式1,首先配置定时器1,使其工作于自动重装的模式2,
		 //然后配置串口控制寄存器
T1_INIT: 
		           MOV TCON,#00H
		           MOV TMOD,#20H
							 MOV CKCON,#10H
		           MOV TL1,#0FBH          //达到115200波特率
		           MOV TH1,#0FBH
							 RET
SERIAL_INIT:
               MOV SCON,#40H 
							 RET                   //配置串口控制寄存器

		          //配置ADC,开始AD转换
ADC_INIT:
               MOV ADC0CF,#20H       //配置转换时钟,1个系统周期,内部增益1。
               MOV ADC0CN,#00H       //配置控制寄存器
							 RET

DAC_INIT:      MOV DAC0CN,#80H
               RET 

PORT_INIT:     MOV  XBR2,#40H        //使能交叉开关
               MOV  XBR0,#04H         //
               MOV  PRT0CF,#0FFH
							 RET  

REF_INIT:      MOV  REF0CN,#03H
               RET
							 
//开始正式运行ADC转换和串口通信

               //MOV  R0,#02h             //计算转换的次数
               
//BEGIN:         MOV  DPTR,#0000H
RUN_HER:  		 SETB ADCEN            //使能ADC0
               SETB ADCBUSY           //启动AD转换
							 MOV  EIE2,#02H           
               SETB EA 
							 mov  A,#30H              //使能ADC0中断         
LOOP1:         nop
							 nop
							 DJNZ ACC,LOOP1
               CLR  ADCEN            //使ADC进入休眠状态
//               AJMP  RAM_INPUT

//RAM_INPUT:     
//               MOV  A,ADC0L
//							 MOVX  @DPTR,A
//							 INC   DPTR
//							 MOV  A,ADC0H
//							 MOVX  @DPTR,A
//							 INC   DPTR
//               MOV   R1,#020H
//LOOP:  				 MOV   R2,#02H
//LOOP_SERIAL:   NOP
//               NOP
//							 DJNZ  R2,LOOP_SERIAL
//							 DJNZ  R1,LOOP
//
//							 AJMP  RUN_HER
DAC_EX:          MOV   DAC0L,ADC0L
                 MOV   DAC0H,ADC0H
								 MOV   A,#01H
LOOP:						 NOP
								 DJNZ  ACC,LOOP
                 AJMP  RUN_HER
               

//SERIAL_OUT:    
//              SETB  TR1             //使能定时器
//							 SETB  ES
//              SETB  EA
//              MOV   A,ADC0L
//              MOV   SBUF,A          //需要等到发送完成以后才能够再次写入SBUF 
//WAIT_SERIAL:   MOV   A,#0ffH
//LOOP_SERIAL:   NOP
//               NOP
//							 DJNZ  ACC,LOOP_SERIAL
//							 SETB  TR1
//							 SETB  ES
//							 SETB  EA
//							 MOV   A,ADC0H
//							 MOV   SBUF,A          //需要等到发送完成以后才能够再次写入SBUF
//WAIT2_SERIAL:  MOV   A,#0ffH
//LOOP2_SERIAL:  NOP
//               NOP
//							 DJNZ  ACC,LOOP2_SERIAL
//							 AJMP  RUN_HER							 
                   

//串口发送中断程序
//INT_SERIAL:   
//              PUSH PSW
//              PUSH ACC
//							CLR  TR1
//              CLR  TI
//							CLR  ES                //清除串口的发送中断
//              CLR  EA               //中断定时器1的运行
//							POP  ACC
//							POP  PSW
//							reti
							
INT_ADC0:     
              PUSH PSW
							PUSH ACC
							CLR  EA
							MOV  EIE2,#00H
							CLR  ADCINT							
							POP  ACC
							POP  PSW
							reti


END  



⌨️ 快捷键说明

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