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

📄 乘法口决程序.asm

📁 延时自动显示乘法口决程序
💻 ASM
字号:
;**************************************************************
;             延时显示乘法口决程序          
;   每延时1S显示一句口决,中间间隔2S显示
;  Date :  2006.3.06     12MHZ晶振                                  
;  Create by :逸飞     E-mail:mcu-yf@163.com  
;版权所有  中国自动化资讯网(www.zidh.com) 逸飞(在您网上的用户名:xfyyf)                      
;**************************************************************
;**************************************************************
;            伪定义             
;**************************************************************
                  DISPBUF  EQU    30H;定义显示缓冲区首址,
;                       	从30H到35H都定义为显示缓冲区
       	          JI_GE    EQU   36H
	          JI_SHI   EQU   37H
	          DENGYU   EQU   38H
	          SHU2     EQU   39H
	          DIAN     EQU   3AH
	          SHU1     EQU   3BH
;**************************************************************
;            主 程 序              
;**************************************************************
                   ORG 0000H        ;程序执行开始地址
                   LJMP      START  ;跳到标号START执行
                   ORG 000BH        ;定时器T0中断程序入口
	           LJMP      INTT0  ;跳至INTTO执行
                   ORG   0040H
            START: 	           
		   MOV   R0,#30H      	;清30H-3BH共11个内存单元
                   MOV   R1,#0CH      	;
       CLEARDISP:  MOV   @R0,#00H      	;
                   INC   R0             ;
                   DJNZ  R1,CLEARDISP   ;
		   MOV   DIAN,#10
		   MOV   DENGYU,#11
                   MOV   SHU1,#1
                   MOV   SHU2,#1                  		   
		   MOV   A,SHU1
		   MOV   B,SHU2
		   MUL   AB
		   MOV   B,#10
		   DIV   AB
		   MOV   JI_SHI,A
		   MOV   JI_GE,B
                   MOV   30H,36H        ;送显示缓冲区
		   MOV   31H,37H   
                   MOV   32H,38H
		   MOV   33H,39H
		   MOV   34H,3AH   
                   MOV   35H,3BH 
                   MOV 	 TMOD,#11H      ;设T016位定时器
                   MOV   TL0,#0B0H   	;50MS定时初值(T0计时用)
                   MOV   TH0,#3CH   	;50MS定时初值                  
                   SETB  EA             ;总中断开放
                   SETB  ET0            ;允许T0中断
                   SETB  TR0            ;开启T0定时器
                   MOV   R4,#14H        ;1秒定时用初值(50MS×20)
	   START1: LCALL DISPLAY        ;调用显示子程序
                   SJMP  START1         ;P3.7口为1时跳回START1

;**************************************************************
;            延时1S显示下一句子程序             
;**************************************************************
;T0中断服务程序
            INTT0: PUSH  ACC           ;累加器入栈保护
                   PUSH  PSW           ;状态字入栈保护
                   CLR   ET0           ;关T0中断允许
                   CLR   TR0           ;关闭定时器T0
		   MOV   TL0,#0B0H   	;50MS定时初值(T0计时用)
                   MOV   TH0,#3CH   	;50MS定时初值
                   DJNZ  R4, OUTT0         ;20次中断未到中断退出
           ADDSS:  MOV	 R4,#14H           ;20次中断到(1秒)重赋初值
                   CALL  ADD_1
           OUTT0: 
                   POP 	 PSW               ;恢复状态字(出栈)
                   POP   ACC               ;恢复累加器
                   SETB  ET0               ;开放T0中断
                   SETB  TR0               ;开启定时器T0
                   RETI                    ;中断返回

;**************************************************************
;            加1生成下一句子程序             
;**************************************************************
ADD_1:
                   CLR  CY
                   MOV  A,#1
                   ADD  A,SHU1
		   MOV  SHU1,A
		   CJNE  A,SHU2,PD
		   AJMP  XD
PD:		   JNC   SHU1_OUT
XD:                MOV   A,SHU1
		   MOV   B,SHU2
		   MUL   AB
		   MOV   B,#10
		   DIV   AB
		   MOV   JI_SHI,A
		   MOV   JI_GE,B
                   MOV   30H,36H        ;送显示缓冲区
		   MOV   31H,37H   
                   MOV   32H,38H
		   MOV   33H,39H
		   MOV   34H,3AH   
                   MOV   35H,3BH
       		   AJMP  ADD_OUT
SHU1_OUT:          MOV   A,#1
                   ADD   A,SHU2
		   MOV   SHU2,A
                   MOV   SHU1,#0
		   CJNE  A,#10,ADD_OUT
		   MOV   SHU2,#0
		   MOV   SHU1,#0
ADD_OUT:
		   RET		   
;**************************************************************
;             显示程序                  
;**************************************************************
; 琍0口输出段码数据,P2口作扫描控制,每个LED数码管亮1MS时间再逐位循环。
          DISPLAY: MOV 		R1,#DISPBUF       ;指向显示数据首址
                   MOV 		R5,#0FEH      ;扫描控制字初值
             PLAY: MOV 		A,R5          ;扫描字放入A
                   MOV 		P2,A          ;从P2口输出
                   MOV 		A,@R1         ;取显示数据到A
                   MOV 		DPTR,#TAB     ;取段码表地址
                   MOVC		A,@A+DPTR     ;查显示数据对应段码
                   MOV 		P0,A          ;段码放入P1口
                   LCALL 	DELAY1MS        ;显示1MS
                   INC 		R1            ;指向下一地址
                   MOV 		A,R5            ;扫描控制字放入A
                   JNB 		ACC.5,ENDOUT    ;扫到第六位时结束
                   RL 		A               ;A中数据循环左移
                   MOV 		R5,A            ;放回R5内
                   AJMP 	PLAY            ;跳回PLAY循环
           ENDOUT: SETB 	P2.5            ;一次显示结束,P2口复位
                   MOV 		 P0,#0FFH       ;P0口复位
                   RET                      ;子程序返回
             TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,7FH,0B7H,0FFH
;共阳段码表          "0""1""2" "3""4""5""6""7" "8""9"".""=""不亮"
;
;**************************************************************
;             延时程序             
;**************************************************************
;
;1MS延时程序,LED显示程序用
             DELAY1MS: MOV 	R6,#2
             DL1:   MOV 	R7,#248
             DL2:   DJNZ 	R7,DL2
                    DJNZ 	R6,DL1
                    RET
                    END                     ;程序结束









                   

⌨️ 快捷键说明

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