单片机程序汇总

本文介绍了多个汇编语言程序设计的例子,涵盖了数据存储、查表、算术运算、循环控制、内存操作等基本操作。例如,程序通过查表方式计算整数平方,清零内存单元,实现二进制数转换为BCD码,以及根据条件进行流程跳转等。同时,还展示了如何控制外部设备如LED灯的状态以及数据传输。这些例子展示了汇编语言在低级别控制和高效计算中的应用。

1.分别从ROM1000H1020H单元开始按顺序存放09中每个整数的平方值和字符串“An apple!”

    ORG 1000H
DATA1:  DB 0,1,4,9,16,25,36,49,64,81
	ORG 1020H
DATA2:  DB "An apple!"
   END

2.将外部RAM 1000H单元的内容清零

    ORG 0000H
    LJMP START
START: MOV DPTR,#1000H
       MOV A,#0
       MOVX @DPTR,A
 END

3.在外部ROM3000H单元开始存放了一个字节型数组,该数组中的数据依次是09之间整数的平方,编程采用查表的方法求出5的平方

ORG  0000H
LJMP START
START:  MOV   DPTR,#3000H		;DPTR指向表头
        MOV   A,#5      		
        MOVC  A,@A+DPTR	;查表并将结果存于A中
        MOV   50H,A       		;存平方值
      NOP
ORG  3000H
DB  0,1,4,9,16,25,36,49,64,81

END
ORG    0000H
		MOV   DPTR,#TABLE	;DPTR指向表头
		MOV   A,#5      		
		MOVC  A,@A+DPTR
		MOV   50H,A       	
		NOP
TABLE: DB  0,1,4,9,16,25,36,49,64,81
		END

4.近程查表实现3中的功能

ORG  0000H
LJMP START
START:   MOV 	A, #5		;机器码为7405H	      
         MOVC	A,@A+PC	;机器码83H
TABLE:DB	 0,1,4,9,16,25,36,49,64,81	

	      END

5.利用ADDC指令编写计算9878H8934H的汇编语言源程序。

假设:被加数放在内部RAM: 31H、32H单元(低位在前),
     加数放在内部RAM: 33H、34H单元(低位在前),
     和存于 :35、36H  单元,
     进位位 :37H     单元。
ORG   0000H
LJMP START
START:	MOV	31H,#78H
	    MOV	32H,#98H	
		MOV	33H,#34H		
		MOV	34H,#89H		
		MOV	A,33H			
		ADD	A,31H			
		MOV	35H,A			
		MOV	A,34H				
		ADDC A,32H	;注意这里的用法
		MOV	36H,A	
		MOV	A,#0			
		ADDC A,#0			
		MOV	37H,A				
END	

6.分析下段指令执行后AB以及标志位CYOVP的值。

ORG	0
START:	MOV	A, #95
    MOV	B, #48
	MUL	AB
	NOP	
	END	
本段指令执行后(A)=0D0H,(B)=11H,(CY)=0,(OV)=1,(P)=1。


设(A)=17,(B)=4,执行指令:
			DIV	AB
结果为:(A)=4,(B)=1,CY=0,OV=0。 

7.编写一程序,实现将累加器A中的无符号十六进制数转换为3BCD码,并将BCD码的百位、十位和个位分别存放在内部RAM30H31H32H单元。

         ORG	0000H
START:	 MOV	A, #0BDH		; 送被分离的数
		 MOV	B, #100		; 除数送B
		 DIV	AB			; 相除,分离出百位
		 MOV	30H, A		; 保存百位
		 MOV	A, B			; 余数送A
		 MOV	B, #10			; 除数送B
		 DIV	AB			; 分离十位和各位
		 MOV	31H, A		; 保存商,即十位数
		 MOV	32H, B			; 保存余数,即个位数
		 END

8.如果使与P1口相连的发光二极管从LED0LED7依次点亮,每次只亮1个,编写汇编语言程序实现该功能

                         ORG   0000H
START:	 MOV  A,#0FEH		; 循环时的初始数据
 		 MOV  P1,A		; 点亮LED0
 		 RL	   A					
 		 MOV  P1,A		; (P1) = 0FCH 
 		 RL	   A				
 		 MOV  P1,A		; (P1) = 0FBH 
 		 RL	   A					
 		 MOV  P1,A		; (P1) = 0F7H 
 		 RL	   A					
 		 MOV  P1,A		; (P1) = 0EFH
 		 RL	   A					
 		 MOV  P1,A		; (P1) = 0CFH  
 		 RL	   A					
 		 MOV  P1,A		; (P1) = 0BFH
 		 RL	   A					
 		 MOV  P1,A		; (P1) = 7FH 
 		 END

9.LJMP编写汇编语言源程序使图2-1LEDLED0LED7依次单个点亮,且如此循环。

ORG   0000H
START:	 MOV  A,#0FEH		
         NEXT:  MOV  P1,A
 	     RL	   A
         LJMP  NEXT	 
END

10.将外部数据存储器RAM1000H开始的连续单元的数据,传送到内部RAM40H开始的连续单元,所传送的数据为零时,传送停止。

		    MOV	DPTR,#1000H	
       		MOV  	R0,  #40H  	
LOOP:	MOVX  A,@DPTR 		
       		JZ     	NEXT      		
       		MOV  	@R0,A     	
       		INC    	DPTR        	
       		INC   	R0           	
       		SJMP  	LOOP        	
NEXT:	END  

11.某温室内的温度要求控制在1530之间,采集的温度值T放在累加器A中。若采集到的温度T30,程序转向JW(降温处理程序);若T15,则程序转向SW(升温处理程序);若30℃≥T15,则程序转向FH(返回主程序)。


		CJNE	A,#30,LOOP1		
		AJMP	FH		              ;(A)	=30	
LOOP1:	JNC	    JW    	              ;(A)	>30
		CJNE   A,#15,LOOP2  	      ;(A)	<30
 		AJMP   FH                     ;(A)	=15
LOOP2:	JC     	SW     	              ;(A)	<15
                    AJMP  FH          ;(A)	>15
JW:   	____
SW:  		___
FH:  	 RET          

12.内部RAM 50H6FH单元的内容清零

		 ORG   0000H
START:	 MOV  R0, #50H
	     MOV  R1, #20H	        ; 给R1装载循环次数
		 MOV  A, #0
LOOP:	 MOV  @R0, A	        ; 清零
		 INC	   R0		    ; 修改指针
		 DJNZ  R1, LOOP      	; 循环控制
		 END

13.内部RAM 50H6FH单元的内容清零

        ORG  1000H
START1:MOV	R0, #20H		;循环次数
		MOV 	DPTR,#5000H 	;
		MOV	A, #00H		;(A)=0
LOOP1:	MOVX  @DPTR,A	;(DPTR)=0
		INC	  DPTR		;外部RAM单元加1
		DJNZ	  R0,LOOP1	;减1非0则转移
		END

14.将内部RAM20H单元的第6位(位地址为06H)的内容,传送到P1.0中。

MOV 	C,06H  
MOV	    C,20H.6 
MOV  	P1.0,C

 15.某系统具有三人表决器的功能,如图所示。当某人同意时,将开关闭合。当两人及三人同意时表示通过,此时与P1.7相连的LED被点亮。编程实现此功能。

 

ORG  0
START:  NOP
	    X	BIT	P1.0	
	    Y	BIT	P1.1
	    Z	BIT	P1.2
	    F	BIT	P1.7
	    MOV	C, X		   
        CPL	C
	    ANL	C, /Y
	    MOV	F, C
        MOV	C, X		    
        CPL	C
		CPL	C
		ANL	C, /Z
		ORL	C, F
		MOV	F, C
		MOV	C, /Y		             
        CPL	C
		ANL	C, /Z
		ORL	C, F
		MOV	F, C 
END

16.统计从内部RAM 30H开始的20数据中正数(包括0)和负数的个数,并将统计的正数和负数结果分别存放在内部RAM50H51H单元。

       ORG	0
START: 
     MOV  R0, #30H		; 设置地址指针
	 MOV	R1, #20		; 初始化循环次数
	 MOV	50H, #0		; 统计次数清0
	 MOV	51H, #0
REP:	 
     MOV	A, @R0		; 取数据
	 JB	ACC.7, NEG		; 判断最高位是否为1
	 INC	50H			; 正数次数加1
	 SJMP	QUIT
NEG:	 
     INC	51H			; 负数次数加1
QUIT:	 
     DJNZ  R1, REP	; 次数未到,则从REP处循环

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值