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

📄 2052ad转换.asm

📁 汇编语言常用程序,包括运算,掉电保存,按键,液晶显示,串口传送
💻 ASM
字号:
;本程序与学习板的接线
;学习板侧----------12c2052AD侧
;P0.0-------接----- (2脚)P3.0
;P0.1-------接------(3脚))P3.1
;P0.2--------接-----(6脚)P3.2
;P0.3--------接------(7脚)P3.3
;P0.4--------接------(8脚)P3.4
;P0.5--------接------(9脚)P3.5
;P0.6--------接------(11脚)P3.7
;模以量输入引脚为12c2052AD倒数第4脚标号为P1.5的引脚 
;12c2052AD的20脚接电源   10脚接地
;试验时,可调电阻的接地端要接10K电阻.
                                
ISP_DATA EQU 0E2H
ISP_ADDRH EQU 0E3H
ISP_ADDRL EQU 0E4H
ISP_CMD EQU 0E5H
ISP_TRIG EQU 0E6H
ISP_CONTR EQU 0E7H
;定义ISP/IAP 命令
ISP_IAP_BYTE_READ EQU 1H
ISP_IAP_BYTE_PROGRAM EQU 2H
ISP_IAP_BYTE_SECTOR EQU 3H
;定义FLASH操作等待的时间常数
ENABLE_ISP EQU 84H
DATA_FLASH_START_ADDRESS EQU 1000H 
    ADC_CONTR EQU 0C5H
    ADC_DATA EQU 0C6H
    P1M0 EQU 91H
    P1M1 EQU 92H
    ADC_POWER_ON_SPEED_CHANNEL_5 EQU 11100101B
    SET_VOLTAGE EQU 60H
     ORG 0000H
MAIN: 
     MOV SP,#5FH     
     MOV 30H,#00H
     MOV 31H,#00H  
     MOV 32H,#00H
     MOV 33H,#00H       
     ORL P1M0,#00100000B;高置ad io口为开路
     ORL P1M1,#00100000B
     MOV ADC_CONTR,#ADC_POWER_ON_SPEED_CHANNEL_5;设置AD通道
     CALL DELAY
     MOV DPTR,#TAB   
li:    
      CALL AD_VOLTAGE
      CALL H16_D10
      CALL DISPLAY
      ajmp li

update:                           ;刷新显示子程序  
        	inc 30h
	     	mov a,30h
			cjne a,#10,exit				;还没加到十,退出
			mov 30h,#00h				;加到十了,个位清零
			inc 31h						;十位显示缓冲单元加一		
			mov a,31h                                               
			cjne a,#10,exit             ;还没加到十,退出            
			mov 31h,#00h                ;加到十了,十位清零          
			inc 32h						;百位显示缓冲单元加一		
			mov a,32h                                               
			cjne a,#10,exit             ;还没加到十,退出            
			mov 32h,#00h                ;加到十了,百位清零          
			inc 33h						;千位显示缓冲单元加一		
			mov a,33h                                                                           
			cjne a,#10,exit             ;还没加到十,退出            
			mov 33h,#00h                ;加到十了,千位清零   
exit:
			ret

AD_Voltage:      ;40H;41H,保存所测电压的高低位    
      ACALL GET_AD_RESULT
      MOV A,ADC_DATA
      MOV B,#100
      MUL AB
      MOV 40H,A
      MOV 41H,B
      MOV 44H,#51
      MOV 45H,#00H
      CALL DIV16
      MOV A,42H
      CJNE A,#25,NEXT_B
      AJMP INC_DIV
NEXT_B:
      JC NEXT22
INC_DIV:
      INC 40H
NEXT22:
      RET
H16_D10:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ;输入:被除数放在40H,41H,除数放在内44H,45H,商放在40H,41H,余数放在42H,43H,
        MOV 44H,#100
        MOV 45H,#0
        CALL DIV16
        MOV 31H,40H
        MOV A,42H
        MOV B,#10
        DIV AB
        MOV 30H,A
        ;MOV 30H,B 
        RET
GET_AD_RESULT:     
     MOV ADC_DATA,#0
     ORL ADC_CONTR,#00001000B;开ADC
     CALL DELAY
WAIT_AD_FINISHED:
     MOV A,#00010000B
     ANL A,ADC_CONTR
     JZ WAIT_AD_FINISHED
     ANL ADC_CONTR,#11100111B
     RET
 DELAY:
      MOV R7,#25
D:    MOV R6,#5
      DJNZ R6,$
      DJNZ R7,D
      RET
display:mov p2,#0ffh				;将P2口置高电平                         
	mov r7,#250					;软件计数器赋值                         	
dd1:                                                                            
	mov a,30h                   ;将显示缓冲区30H中的值送入ACC           
	movc a,@a+dptr              ;查表取要显示的数并把查表的结果送入ACC 
   MOV C,ACC.6
   ORL A,#11000000B 
	mov p3,a                    ;将要显示的数送入P0口  
   MOV P3.7,C                 
	clr p1.0                 ;开个位显示单元                         
	lcall delay100us            ;延时100US                              
	setb p1.0                   ;关个位显示单                           
                                        	                                    
	mov a,31h                   ;将显示缓冲区别31H中的值送入A           
	movc a,@a+dptr              ;查表取要显示的数并把查表的结果送入ACC 
   MOV C,ACC.6
   ORL A,#11000000B 
	mov p3,a                    ;将要显示的数送入P0口  
   MOV P3.7,C                 
	clr p1.1                   ;开十位显示单元                         
	lcall delay100us            ;延时100US                              
	setb p1.1                  ;关十位显示单元                         
                                        	                                    
	mov a,32h                   ;将显示缓冲区32H中的值送入ACC           
	movc a,@a+dptr              ;查表取要显示的数并把查表的结果送入ACC
   MOV C,ACC.6 
   ORL A,#11000000B 
	mov p3,a                    ;将要显示的数送入P0口  
   MOV P3.7,C                 
	clr p1.2                  ;开百位显示单元                         
	lcall delay100us            ;延时100US                              
	setb p1.2                  ;关百位显示单元                         
                                        	                                    
	mov a,33h                   ;将显示缓冲区33H中的值送入ACC           
	movc a,@a+dptr              ;查表取要显示的数并把查表的结果送入ACC 
   MOV C,ACC.6
   ORL A,#11000000B 
	mov p3,a                    ;将要显示的数送入P0口  
   MOV P3.7,C                 
	clr p1.3                  ;开千位显示单元                         
	lcall delay100us            ;延时100US                              
	setb p1.3                  ;关千位显示单元                         
	djnz r7,dd1                 ;R7不等于0返回至DD1处                   
	ret                         ;R7等于0子程序返回                      


delay100us:
	mov r5,#50
	djnz	r5,$
	ret
          ;十六进制除法运算
         ;输入:被除数放在40H,41H,除数放在内44H,45H,商放在40H,41H,余数放在42H,43H,
DIV16:
     MOV R0,#40H
     MOV A,@R0
     JNZ LOP0
     INC R0
     MOV A,@R0
     JNZ LOP0
     CLR A
     MOV 42H,A
     MOV 43H,A
     RET
LOP0:MOV R0,#44H
     MOV A,@R0
     JNZ LOP1
     INC R0
     MOV A,@R0
     JNZ LOP1
     RET
LOP1:CLR A
     MOV 42H,A
     MOV 43H,A
     MOV R2,#10H
LOP2:CLR C
     MOV R3,#04H
     MOV R0,#40H
LOP3:MOV A,@R0
     RLC A
     MOV @R0,A
     INC R0
     DJNZ R3,LOP3
     MOV R0,#42H
     MOV R1,#44H
     MOV A,@R0
     CLR C
     SUBB A,@R1
     MOV 48H,A
     INC R0
     INC R1
     MOV A,@R0
     SUBB A,@R1
     MOV 49H,A
     JC LOP4
     MOV R0,#42H
     MOV R1,#48H
     MOV A,@R1
     MOV @R0,A
     INC R0
     INC R1
     MOV A,@R1
     MOV @R0,A
     MOV A,40H
     INC A
     MOV 40H,A
LOP4:DJNZ R2,LOP2
     RET

DELAY5MS:
      MOV R6,#250
DL1:     
      MOV R5,#10
      DJNZ R5,$
      DJNZ R6,DL1
      RET
delay_10ms: 
     MOV R6,#70
D3:   MOV R7,#25
     DJNZ R7,$
     DJNZ R6,D3
     RET
DELAY_1S:
     MOV 53H,#100
DELAY_1S_LOOP:
     CALL DELAY_10MS
     DJNZ 53H,DELAY_1S_LOOP
     RET
  
                                                                                                                                                                                                   
tab:	db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h,86h,8eh

     END

⌨️ 快捷键说明

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