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

📄 f350_ad_show.asm

📁 c8051f350单片机的AD采集
💻 ASM
📖 第 1 页 / 共 2 页
字号:
						    movc  A  ,   @A+DPTR
             			     ;复位指令
                     mov   Nonfeedbackcommmand , #CMD_RESET  
                     lcall NonfeedbackCOMMAND_to_MCP2515
				           
									   ;==================================
										 mov  DelaytimesetIN,  #128
										 call delayshorterthan256osc
					           ;==================================

					           ;读寄存器CANSTAT值,检验是否复位成功  	 				
					           mov   MCP2515readaddress,#MCP2515CANSTAT
				 	           lcall READDATA_from_MCP2515
										 mov   A, SPI0DAT
										 cjne  A,#80h, RESET
RET
;----------------------------------------------------------------------------
MCP2515_modeset:
            SETMODE:;设置MCP2515工作模式						      	
                     mov MCP2515writeaddress, #MCP2515CANCTRL 									 
										 mov MCP2515writedata,  #CMD_NORMALMODE
										 lcall WRITEDATA_to_MCP2515
						
					           ;以下程序段读寄存器CANSTAT值,检验是否设置模式成功  										 
										 mov MCP2515readaddress,#MCP2515CANSTAT 
				 	           lcall READDATA_from_MCP2515
										 mov  A, SPI0DAT
					           cjne A,#00h, SETMODE
       
RET
;----------------------------------------------------------------------------
MCP2515_intruptset: ;入口参数MCP2515CANINTEdata,
  
                     mov MCP2515writeaddress, #MCP2515CANINTE  
                     mov    DPTR   ,       #MCP2515CANINTEdata
										 movx     A    ,       @DPTR
                     mov MCP2515writedata  , A
										 lcall WRITEDATA_to_MCP2515	

RET
;----------------------------------------------------------------------------

;----------------------------------------------------------------------------
MCP2515_REGpreconfig:



mov    A    ,  #0E3H
               mov   DPTR  ,  #MCP2515CANINTEdata
               movx  @DPTR ,           A


;设置接收寄存器RXB0的控制寄存器数据,决定RXB0的工作方式

mov    A    ,      #20H
                   mov   DPTR  ,  #MCP2515RXB0CTRLdata
                   movx  @DPTR ,           A


;设置接收寄存器RXB1的控制寄存器数据,决定RXB1的工作方式
mov    A    ,      #00H
                   mov   DPTR  ,  #MCP2515RXB1CTRLdata
                   movx  @DPTR ,           A
;---------------------------------
;位定时参数设置
;---------------------------------
mov    A    ,  #09H
               mov   DPTR  ,  #MCP2515CNF1data
               movx  @DPTR ,           A

mov    A    ,  #83H;#0C3H
               mov   DPTR  ,  #MCP2515CNF2data
               movx  @DPTR ,           A

mov    A    ,  #83H
               mov   DPTR  ,  #MCP2515CNF3data
               movx  @DPTR ,           A
;---------------------------
;接收屏蔽参数设置
;---------------------------
;接收屏蔽实际不太需要改变的


;-------------------------
;接收滤波参数设置
;--------------------------


		                   
														mov MCP2515writeaddress, #MCP2515CNF3
                            mov    DPTR   ,       #MCP2515CNF3data 
														movx     A    ,       @DPTR
														mov MCP2515writedata,      A  
													  lcall WRITEDATA_to_MCP2515

                           ;---------------------------------------------------
													 ;*************************************************
													 ;接收控制寄存器参数写入
													 ;*************************************************
													 ;---------------------------------------------------
                            ;中断是能寄存器设置
														mov MCP2515writeaddress, #MCP2515CANINTE
                            mov    DPTR   ,       #MCP2515CANINTEdata 
														movx     A    ,       @DPTR
														mov MCP2515writedata,      A 
													  lcall WRITEDATA_to_MCP2515

                 
														mov MCP2515writeaddress, #MCP2515RXB0CTRL
                            mov    DPTR   ,       #MCP2515RXB0CTRLdata 
														movx     A    ,       @DPTR
														mov MCP2515writedata,      A;
													  lcall WRITEDATA_to_MCP2515
           
                    
														mov MCP2515writeaddress, #MCP2515RXB1CTRL
                            mov    DPTR      ,       #MCP2515RXB1CTRLdata 
														movx     A       ,       @DPTR
                            mov MCP2515writedata  ,    A  
													  lcall WRITEDATA_to_MCP2515  
														  
													 ;---------------------------------------------------
													 ;*************************************************
													 ;接收屏蔽寄存器参数写入
													 ;*************************************************
													 ;---------------------------------------------------                   
	                    ;设置RXM0SIDH寄存器中                            
														mov MCP2515writeaddress, #MCP2515RXM0SIDH
                            mov MCP2515writedata,    #0FFH
													  lcall WRITEDATA_to_MCP2515              
											;设置RXM0SIDL寄存器			
														mov MCP2515writeaddress, #MCP2515RXM0SIDL
                            mov MCP2515writedata,    #0FFH
													  lcall WRITEDATA_to_MCP2515									                  
	                    ;设置RXM0EID8寄存器                            
														mov MCP2515writeaddress, #MCP2515RXM0EID8
                            mov MCP2515writedata,    #0FFH
													  lcall WRITEDATA_to_MCP2515                                    
	                    ;设置RXM0EID0寄存器                            
														mov MCP2515writeaddress, #MCP2515RXM0EID0
                            mov MCP2515writedata,    #0FFH
													  lcall WRITEDATA_to_MCP2515                   
                      ;----------------------------------------------------- 	
												 ;-----------------------------------------------------                    
	                    ;设置RXM1SIDH寄存器                            
														mov MCP2515writeaddress, #MCP2515RXM1SIDH
                            mov MCP2515writedata,    #0FFH
													  lcall WRITEDATA_to_MCP2515    
						          ;设置RXM1SIDL寄存器
													  mov MCP2515writeaddress, #MCP2515RXM1SIDL
                            mov MCP2515writedata,    #0FFH
													  lcall WRITEDATA_to_MCP2515                    
	                    ;设置RXM1EID8寄存器                            
														mov MCP2515writeaddress, #MCP2515RXM1EID8
                            mov MCP2515writedata,    #0FFH
													  lcall WRITEDATA_to_MCP2515
											;设置RXM1EID0寄存器                            
														mov MCP2515writeaddress, #MCP2515RXM1EID0
                            mov MCP2515writedata,    #0FFH
													  lcall WRITEDATA_to_MCP2515
														   
                      ;---------------------------------------------------
													 ;*************************************************
													 ;接收滤波寄存器参数写入
													 ;*************************************************
													 ;--------------------------------------------------- 
										  ;设置RXF0SIDH寄存器中				
          FILTER0:				  mov MCP2515writeaddress, #MCP2515RXF0SIDH
                            mov    DPTR   ,       #MCP2515RXF0SIDHdata 
														movx     A    ,       @DPTR
                            mov MCP2515writedata,   A
													  lcall WRITEDATA_to_MCP2515																						                              
											;设置RXF0SIDL寄存器中			
														mov MCP2515writeaddress, #MCP2515RXF0SIDL
                            mov    DPTR   ,          #MCP2515RXF0SIDLdata 
														movx     A    ,          @DPTR
                            mov MCP2515writedata,      A
													  lcall WRITEDATA_to_MCP2515					                         
											 ;设置RXF0EID8寄存器中				
													  mov MCP2515writeaddress, #MCP2515RXF0EID8
                            mov    DPTR   ,       #MCP2515RXF0EID8data 
														movx     A    ,       @DPTR
                            mov MCP2515writedata,   A
													  lcall WRITEDATA_to_MCP2515           									                              
											;设置RXF0EID0寄存器中			
														mov MCP2515writeaddress, #MCP2515RXF0EID0
                            mov    DPTR   ,          #MCP2515RXF0EID0data 
														movx     A    ,          @DPTR
                            mov MCP2515writedata,      A
													  lcall WRITEDATA_to_MCP2515								
                       ;----------------------------------------------------- 
									  ;设置RXF0SIDH寄存器中				
          FILTER2:				  mov MCP2515writeaddress, #MCP2515RXF2SIDH
                            mov    DPTR   ,       #MCP2515RXF0SIDHdata 
														movx     A    ,       @DPTR
                            mov MCP2515writedata,   A
													  lcall WRITEDATA_to_MCP2515																						                              
											;设置RXF0SIDL寄存器中			
														mov MCP2515writeaddress, #MCP2515RXF2SIDL
                            mov    DPTR   ,          #MCP2515RXF0SIDLdata 
														movx     A    ,          @DPTR
                            mov MCP2515writedata,      A
													  lcall WRITEDATA_to_MCP2515					                         
											 ;设置RXF0EID8寄存器中				
													  mov MCP2515writeaddress, #MCP2515RXF2EID8
                            mov    DPTR   ,       #MCP2515RXF0EID8data 
														movx     A    ,       @DPTR
                            mov MCP2515writedata,   A
													  lcall WRITEDATA_to_MCP2515           									                              
											;设置RXF0EID0寄存器中			
														mov MCP2515writeaddress, #MCP2515RXF2EID0
                            mov    DPTR   ,          #MCP2515RXF0EID0data 
														movx     A    ,          @DPTR
                            mov MCP2515writedata,      A
													  lcall WRITEDATA_to_MCP2515								
                       ;----------------------------------------------------- 
RET
;*******************************************************************************
;以下是LCD 操作函数
;*******************************************************************************

SHOW_ON_SCREEN:       		
            PUSH  ACC		
							  
						mov  A      , LCDFORTHBUF
						SWAP A
            mov  LCDFORTHBUF,   A   
						mov  LCDDATA, LCDFORTHBUF
						mov  LCDADDR, #FORTH
            lcall LCDDATA_SEND
		
		        mov  A      , LCDTHIRDBUF
						SWAP A
            mov  LCDTHIRDBUF,   A   
            mov  LCDDATA, LCDTHIRDBUF 
						mov  LCDADDR,#THIRD
            lcall LCDDATA_SEND

            mov  LCDDATA,  LCDSECONDBUF
						mov  LCDADDR, #SECOND
            lcall LCDDATA_SEND

            mov  LCDDATA, LCDFIRSTBUF
						mov  LCDADDR, #FIRST
            lcall LCDDATA_SEND
						
						POP ACC
 RET
;-----------------------------------
;液晶初始化
;-----------------------------------
LCD_INT:    MOV   LCDCOMMAND,#0E3H  ;NORMAL
            LCALL LCDCOMMAND_SEND ;
            
						MOV LCDCOMMAND,#05H   ;关看门狗
            LCALL LCDCOMMAND_SEND
           
					  MOV LCDCOMMAND,#29H   ;4COM,1/3BIAS
            LCALL LCDCOMMAND_SEND
            
				  	MOV LCDCOMMAND,#01H   ;SYSTEM ENABLE; 
            LCALL LCDCOMMAND_SEND
						
						MOV LCDCOMMAND,#03H   ;LCD ON
            LCALL LCDCOMMAND_SEND
            
 			 	    LCALL SHOW_LCD      ;全显
			      
						mov DelaytimesetIN  , #255
						mov DelaytimesetOUT , #255
						LCALL delayshorterthan255mul255osc
           
					  LCALL CLR_LCD      ;清屏
            RET
;-----------------------------------------------
;液晶全显函数(无参数)//可以考虑用连续模式!!!!
;----------------------------------------------
SHOW_LCD:  MOV     LCDADDR,#0
           MOV     R5,#15
   SHOW_WR:MOV     LCDDATA,#0FFH
           LCALL   LCDDATA_SEND
           INC     LCDADDR
           DJNZ    R5,SHOW_WR
           RET
;------------------------------------------------
;液晶清屏函数(无参数)中间占用R5//可以考虑用连续模式!!!!
;------------------------------------------------
CLR_LCD:   MOV    LCDADDR,#0
           MOV    R5,#15   
    CLR_WR:MOV    LCDDATA,#00H
           LCALL  LCDDATA_SEND
           INC    LCDADDR
           DJNZ   R5,CLR_WR
           RET



;--------------------------------------------------
;液晶底层位通信函数(参数 输入位数R2,位数据存在ACC中)  
;---------------------------------------------------
LCD_ADDRESSANDHEADBITcommunication:  
               PUSH ACC
               PUSH PSW
  ADDRESSANDHEADSENDB1:  RLC A
               MOV    LCDda,C
																		 							 
					     SETB   LCDwr
					    
							 CLR    LCDwr
							               
							 DJNZ   R2, ADDRESSANDHEADSENDB1
					     POP    PSW
					     POP    ACC ;保护ACC和PSW的原因,注意到PUSH和POP的经常应用,
					                ;暂存寄存器和内存值,该寄存器供其它程序使用,使用用完后再恢复
RET
;---------------------------------------------------
;液晶底层位通信函数(参数 输入位数R2,位数据存在ACC中)  
;---------------------------------------------------
LCD_DATABITcommunication:
               PUSH ACC
               PUSH PSW
   DATASENDB2: RRC A
               MOV    LCDda,C
					    ; LCALL  delay5us//这个子程序定短时间不稳定
																					 
						  //LCALL  delay5us
							 SETB   LCDwr
					    
						  //LCALL  delay5us
					     CLR    LCDwr
						              
							 DJNZ   R2,DATASENDB2
					     POP    PSW
					     POP    ACC ;保护ACC和PSW的原因,注意到PUSH和POP的经常应用,
					                ;暂存寄存器和内存值,该寄存器供其它程序使用,使用用完后再恢复


;-------------------------------------------------------------------------------
;二-十进制转换函数(入口参数R2 R3;出口参数R4 R5 R6)
;-------------------------------------------------------------------------------
B_to_D_convertion: 
    			 
  		 clr   A
       mov   R4,  A
			 mov   R5,  A
			 mov   R6,  A
       mov   R7,  #16

IBTL2: clr   C
       ;--------------
			 mov   A ,  R3
			 RLC   A
       mov   R3,  A
      ;---------------
      ;---------------
			 mov   A ,  R2
			 RLC   A
       mov   R2,  A
      ;--------------- R3R2左移一位
			;---------------
			 mov   A  ,  R4
			 ADDC  A ,   R4;注意指令ADDC实现了 R4 + R4 + CY = 2R4 + CY的运算,要搞清楚
       DA    A
			 mov   R4,  A
      ;---------------
      ;---------------
	     mov   A ,  R5
			 ADDC  A ,  R5
			 DA    A
       mov   R5,  A
      ;---------------
			;---------------
			 mov   A ,  R6
			 ADDC  A ,  R6
			 DA    A
       mov   R6,  A
      ;---------------
      DJNZ R7, IBTL2
RET
;*******************************************************************************
;以上是LCD 操作函数
;*******************************************************************************
;--------------------------------------
;MCP2515通信状态液晶显示子程序,
;--------------------------------------

;--------------------------------------------------------------------------------
;LCD实现显示程序 入口参数(LCDFORTHBUF  LCDTHIRDBUF  LCDSECONDBUF  LCDFIRSTBUF,保护寄存器ACC)
;--------------------------------------------------------------------------------
 
;------------------------------------------------
;延时子程序
;------------------------------------------------
;------------------------------------------------
;小于256个时钟周期的延时 入口参数 DelaytimesetIN
;------------------------------------------------
delayshorterthan256osc:   
 
 DELE1:   DJNZ DelaytimesetIN, DELE1     
 RET 

;-----------------------------------------------------------------
;小于256个时钟周期的延时  入口参数 DelaytimesetOUT DelaytimesetIN  
;-----------------------------------------------------------------
delayshorterthan255mul255osc: 				 
				 mov R2  ,DelaytimesetOUT 
DELE2:   mov R3  ,DelaytimesetIN 
DELE3:   DJNZ R3 ,DELE3
         DJNZ R2 ,DELE2
         ;djnz r4,delay1ms
RET 





END

⌨️ 快捷键说明

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