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

📄 水温水位控制.asm

📁 是我在电子竞赛期间写的一些单片机汇编程序
💻 ASM
字号:

LED_ADDR	EQU	2000H		;定义LED数码管的数据段地址
		                        ;定义计数单元
DBUFFER		DATA	31H
DATA_BUF	DATA	40H		;定义输出初始值
LEDCS		EQU	P1.6		;定义LED片选信号线
DATA_SL		DATA	37H

COUNTER		DATA	30H		;定义计数单元


	
	ORG	8000H			;伪指令,定义程序从8000H开始存放
	AJMP	MAIN

	ORG	800BH			;中断入口向量地址
	AJMP	LEDINT0
        org     801bh
        ljmp    counter0
	                                                                                                                                                         
	ORG	8100H			;伪指令,定义以下程序从8100H开始存放
MAIN:	MOV	SP,#60H			;给堆栈指针赋初值
	MOV	TMOD,#051H		;定时器0工作于方式1
	MOV	TH0,#0fcH		;重新给计数器赋初值
	MOV	TL0,#017H
        mov     th1,#00h
        mov     tl1,#00h  
	
	MOV	DBUFFER,#0FFH		;送输出初始数据
	                         	;赋初值07FH,点亮L8
	SETB	ET0			;允许定时器0溢出中断
	SETB	EA			;开放总中断
	SETB	TR0			;计时开始
        SETB	ET1			;允许定时器0溢出中断
	SETB	EA			;开放总中断
	SETB	TR1			;计时开始
	MOV	DPTR,#LED_ADDR		;LED发光二极管操作地址送DPTR
	CLR	LEDCS			;使能LED发光二极管
        MOV	DATA_BUF,#0H		
	MOV	DATA_BUF+1,#0H	
	MOV	DATA_BUF+2,#0H		
	MOV	DATA_BUF+3,#0H	
	MOV	DATA_BUF+4,#0H	
	MOV	DATA_BUF+5,#0H
        mov     COUNTER,#0
        mov     COUNTER+1,#0
        mov     COUNTER+2,#0
        mov     COUNTER+3,#0 	
        mov     COUNTER+4,#0
        mov     COUNTER+5,#0
          	  	
LOOP:	
         
       mov a,TL1
       
       mov b,#10
       div  ab
       mov  45h,a
      
       
       mov   a,b

       mov b,#10
       div ab
       mov  44h,a


       mov a,b

       mov b,#10
       div ab
      	

        
      ACALL	DISPLAY			;输出显示

	AJMP	LOOP


RRL:
        mov     40H,41H
        mov     41H,42H
        mov     42H,43H
        mov     43H,44H
        mov     44H,45H
        ret
DISPLAY:
	MOV	R7,#06H			;给R7赋初值,存放数码管的个数
	MOV	R0,#DATA_BUF		;把显示缓冲区首地址送R0
	MOV	DATA_SL,#0FEH
LOOP1:
	MOV	A,@R0			;取若显示的数据
	ACALL	TABLE			;查段码表,得出该数据对应的段码
        cjne    R7,#4,pp0
        add     a,#80H
pp0:    cjne    r7,#6,pp
        add     a,#80H
pp:	MOV	DPTR,#LED_ADDR		;LED数码管地址送DPTR

	MOVX	@DPTR,A
	MOV	A,DATA_SL		;位码送A
	MOV	P1,A			;输出位码
	ACALL	DELAY			;调延时子程序
	MOV	P1,#0FFH		;输出位码
	Rl	A			;取下一个数码管
	MOV	DATA_SL,A		;保存该位码值
	INC	R0			;取下一个数据显示
	DJNZ	R7,LOOP1			;6位数据显示完否?	
	RET

;**************
;延时子程序
;**************
DELAY:	
	MOV	R6,#5H
DELAY0:	MOV	R5,#40H
DELAY1:	DJNZ	R5,DELAY1
	DJNZ	R6,DELAY0
	RET

;查表子程序
TABLE:  INC     A	          ;基地址加一
        MOVC    A,       @A+PC    ;查段码表,取其相应的段码
        RET

DB      0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,80H,090H	;0-9的段码
DB	088H,083H,0c6H,0a1H,86H,8eH,0bfH,89H,8cH		;A-F、-、P的段码
	;




;***********************
;定时器0中断服务子程序
;***********************
LEDINT0:
	PUSH	PSW			 ;压栈保护现场
	PUSH	ACC
	CLR	TR0			;禁止定时器计数
	MOV	TH0,#0fcH		;重新给计数器赋初值
	MOV	TL0,#017H
	inc     35H
        mov   a,35H
        cjne    a,#0Ah,LEDRET
        mov     35H,#0
        inc     34H 
        mov   a,34H
        cjne    a,#0Ah,LEDRET
        mov     34H,#0
        inc     33H 
        mov   a,33H
        cjne    a,#0Ah,LEDRET
       mov     33H,#0
        inc     32H
        mov   a,32H
        cjne    a,#0Ah,LEDRET
        mov     32H,#0
        inc     31H
        mov   a,31H 
        cjne    a,#6,LEDRET
        mov     31H,#0
        inc     30H 
        mov   a,30H
        cjne    a,#10,LEDRET
       mov     30H,#0
         
LEDRET:	mov   a,34H
        cjne   a,#1,pp2
       
       
       clr  TR1
      
     
     
pp2: 
        SETB	TR0			;启动定时器
	POP	ACC			;出栈
	POP	PSW
	RETI				;中断返回
	;

COUNTER0:				;计数中断服务子程序
	PUSH	PSW			;保护现场
	PUSH	ACC
        mov     th1,#00h
        mov     tl1,#00h 
        
	
			;开始计数
clr      TF1
	POP	ACC			;出栈
	POP	PSW
	RETI				;中断返回
	;





end


        

⌨️ 快捷键说明

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