资讯详情

51单片机汇编语言实验及代码

单片机汇编语言实验及代码

以下内容为实验班亲自编写并通过51台单片机运行实现的实验代码。如有错误或改进,请批评和纠正。

实验1:开发环境的应用

(1)数据存储器40H-4FH将内容复制成00H-0FH,并将40H-4FH将内容复制到外部数据存储器的1050H-105FH. (2)P一口接八根二极管,使二极管逐个循环点亮

ORG 0000H AJMP START ORG 0100H START:       MOV A,#00H    MOV R0,#40H LOOP:       MOV @R0,A    INC A    INC R0    CJNE A,#10H,LOOP SECOND:       MOV DPTR,#1050H    MOV R1,#40H COPY:       MOV A,@R1    MOVX @DPTR,A    INC DPTR    INC R1    CJNE R1,#50H,COPY    SJMP $    END 

实验二:外部中断

(1)用单脉冲信号申请中断,在中断服务程序中翻转输出信号(可通过P1.0接一二极管观察)

ORG 0000H LJMP START ORG 0003H LJMP INT ORG 0100H START:       SETB EX0    SETB PX0    SETB IT0    SETB EA    SJMP $ INT:    CPL P1.0    RETI    END 

(2)用单脉冲信号申请中断,要求对中断进行累加计数,并将计数结果显示在二极管上

ORG 0000H LJMP START ORG 0003H LJMP INT ORG 0100H START:       MOV A,#00H    MOV P1,A    SETB EX0    SETB PX0    SETB IT0    SETB EA    SJMP $ INT:      MOV P1,A    INC A    RETI    END 

实验3:定时器实验

(1)用定时器1定时,P1.0节发光二极管每秒闪烁五次

ORG 0000H LJMP MAIN ORG 001BH LJMP INT ORG 0100H MAIN:      MOV TMOD,#10H   MOV TH1,#3CH   MOV TL1,#0B0H   MOV R2,#2   SETB EA   SETB ET1   SETB TR1   SJMP $ INT:      DJNZ R2,NEXT   CPL P1.0   MOV R2,#2 NEXT:      MOV TH1,#3CH   MOV TL1,#0B0H   SETB TR1   RETI   END 

(2)用定时器12计数,T1引脚接单脉冲,使用P一口接二极管显示计数。

ORG 0000H LJMP MAIN ORG 001BH LJMP LOOP ORG 0100H MAIN:      MOV TMOD,#60H   MOV TH1,#00H   MOV TL1,#00H   SETB EA   SETB ET1   SETB TF1   SETB TR1   SJMP $ LOOP:      MOV P1,TL1   LJMP LOOP   RETI   END 

实验4:串行通信

波特率2400 bit/s。PC向单片机发送8个字节的数据,接收数据后发送55个字节H和AAH给PC 机器(使用查询)。

ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV SCON,#50H MOV PCON,#00H MOV TMOD,#20H SETB TR1 MOV TL1,#0F3H MOV TH1,#0F3H LOOP:     MOV R0,#30H  MOV R1,#08H WAIT1:     JBC RI,RECEIVE  SJMP WAIT1 RECEIVE:     MOV A,SBUF  MOV @R0,A  INC R0  DJNZ R1,WAIT1  MOV A,#55H  MOV SBUF,A WAIT21:     JBC TI,SEND  SJMP WAIT21 SEND:     MOV A,#0AAH  MOV SBUF,A WAIT22:     JNB TI,WAIT22  CLR TI  SJMP LOOP  END 

实验5:数字管显示和键盘扫描

(1)将30H-32H存储在中间的6位十进制数显示在6个数字管上(需要在内存单元中编写压缩BCD将代码转换为两个七段显示码的子程序和延迟子程序)

ORG 0000H LJMP MAIN ORG 0030H  MAIN:    MOV 30H,#12H    MOV 31H,#34H    MOV 32H,#56H    MOV R0,#30H    MOV R1,#20H     BCD:    MOV A,@R0    SWAP A    ANL A,#0FH    ACALL CTAB    MOV R2,A    MOV A,@R0    ANL A,#0FH    ACALL CTAB    MOV R3,A        MOV DPTR,#8002H    MOV A,R1    MOVX @DPTR,A    MOV DPTR,#8004H    MOV A,R2    MOVX @DPTR,A    MOV A,R1    RR A    MOV R1,A    LCALL DLEY        MOV DPTR,#8002H    MOV A,R1    MOVX @DPTR,A    MOV DPTR,#8004H    MOV A,R3    MOVX @DPTR,A    MOV A,R1    RR A    MOV R1,A    LCALL DLEY    INC R0    CJNE R0,#33H,BCD    LJMP MAIN     CTAB:    PUSH DPH    PUSH DPL    MOV DPTR,#TAB    MOVC A,@A DPTR    POP DPL    POP DPH    RET     TAB:    DB 3FH,06H5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
DLEY:
   MOV R7,#02H
 DL:MOV R6,#0FFH
 DL1:DJNZ R6,DL1
      DJNZ R7,DL
	  RET  
	  END

(2)扫描矩阵键盘,将对应键盘值送LED显示

     ORG 0000H
       LJMP START
       ORG 1000H
START:
	   ACALL   KEY1
	   AJMP    START
KEY1:  ACALL   KEY14
	   JNZ     KEY3
KEY2:  ACALL   KEY16 
	   AJMP    KEY1 
KEY3:  ACALL   KEY16
	   ACALL   DELAY 
	   ACALL   KEY14
	   JNZ     KEY4
	   ACALL   KEY16
	   AJMP    KEY1

KEY4:  MOV     R2, #0FEH 
	   MOV     R4, #00H

KEY5:  MOV     DPTR,#8002H 
	   MOV     A, R2 
	   MOVX    @DPTR, A 
	   MOV     DPTR,#8001H
	   MOVX    A,@DPTR 
	   JB      ACC.0,KEY6 
	   MOV     A, #00H 
	   AJMP    KEY9

KEY6:  JB      ACC.1,KEY7 
	   MOV     A, #06H
	   AJMP    KEY9 

KEY7:  JB      ACC.2,KEY8
	   MOV     A, #0CH
	   AJMP    KEY9
	    
KEY8:  JB      ACC.3, KEY12 
	   MOV     A, #12H 
KEY9:  ADD     A, R4 
KEY10: MOV     R5,A
KEY11: ACALL   KEY14  
	   JNZ     KEY11 
	   MOV     A,R5
	   ACALL   KEY15
	   RET 

KEY12: INC     R4  
	   MOV     A, R2  
	   JNB     ACC.5,KEY13  
	   RL      A  
	   MOV     R2, A  
	   AJMP    KEY5 
	
KEY13: AJMP    KEY1 
KEY14: MOV     DPTR,#8002H 
	   MOV     A,#00H 
	   MOVX    @DPTR,A 
	   MOV     DPTR,#8001H
	   MOVX    A,@DPTR 
	   CPL     A 
	   ANL     A, #0FH 
	   RET

KEY15: MOV     DPTR,#TABLE
	   MOVC    A,@A+DPTR
	   MOV     R3,A

KEY16: MOV     DPTR,#8002H
       MOV     A,#01H
	   MOVX    @DPTR,A
       MOV     DPTR,#8004H
	   MOV     A,R3
	   MOVX    @DPTR,A
	   ACALL   DELAY
	   RET

DELAY: MOV     R7,#12
LOOP:  MOV     R6,#250
	   DJNZ    R6,$
	   DJNZ    R7,LOOP
	   RET
TABLE:

	   DB      7EH,7EH,5EH,79H,71H,3FH,7EH,7EH,39H,4FH,5BH,06H,7EH,7EH,7CH,7DH,6DH,66H	,7EH,7EH,77H,6FH,7FH,07H

       END

实验六:D/A和A/D

(1)利用实验箱上的电位器提供模拟量输入,将模拟量转换成二进制数字量,将转换的结果用P1口输出到二极管显示;

ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
    MOV DPTR,#8000H
	MOV A,#00H
	MOVX @DPTR,A
	MOV R2,#100
	DJNZ R2,$
	MOVX A,@DPTR
	MOV P1,A
	LJMP MAIN

	END

(2)用DAC0832将一个数值转换为模拟电压,该模拟电压接ADC0809的一个模拟输入进行模/数转换,转换结果通过P1口送到二极管显示。

ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
    MOV A,#90H
	MOV DPTR,#9000H
	MOVX @DPTR,A
	MOV DPTR,#8000H
	MOVX @DPTR,A
	MOV R2,#64H
	DJNZ R2,$
	MOVX A,@DPTR
	MOV P1,A
	SJMP $
	END

实验七:电子钟

实现一个24小时制的电子钟程序,在6个数码管上显示时分秒(用定时器0中断更新计时,以压缩BCD码形式保存在内部RAM的30H、31H和32H单元);可以通过串行口调时!

ORG  0000H
AJMP MAIN
ORG  000BH
LJMP CLOCK
ORG  0023H
LJMP INPUT
ORG  0100H

MAIN:
    MOV  TMOD,#21H
    CLR  A
	MOV  30H,A
	MOV  31H,A
	MOV  32H,A

	MOV  TH0,#3CH
	MOV  TL0,#0B0H
	MOV  50H,#14H ;50 * 20
	MOV  TH1,#0F3H
	MOV  TL1,#0F3H ;波特率

	MOV  SCON,#50H 
	SETB PS
	MOV  IE,#92H 
	SETB TR1
	SETB TR0
	
SLED:
    MOV  R0,#30H
	MOV  R1,#20H
	LJMP LED
	
CLOCK:

	MOV  TH0,#3CH
	MOV  TL0,#0B0H
	DJNZ 50H,RETURN
	MOV  50H,#14H
	
	MOV  A,#01H
	ADD  A,32H
	DA   A
	MOV  32H,A
	CJNE A,#60H,RETURN
	MOV  32H,#00H
	
	MOV  A,#01H
	ADD  A,31H
	DA   A
	MOV  31H,A
	CJNE A,#60H,RETURN
	MOV  31H,#00H
	
	MOV  A,#01H
	ADD  A,30H
	DA   A
	MOV  30H,A
	CJNE A,#24H,RETURN
	MOV  30H,#00H
	
RETURN:

	RETI	
	
LED:
    MOV  A,@R0
	SWAP A
	ANL  A,#0FH
	ACALL CTAB
	MOV  R2,A
	
	MOV  A,@R0
	ANL  A,#0FH
	LCALL CTAB
	MOV  R3,A
	
	MOV  DPTR,#8002H
	MOV  A,R1
	MOVX @DPTR,A
	MOV  DPTR,#8004H
	MOV  A,R2
	MOVX @DPTR,A
	MOV  A,R1
	RR   A
	MOV  R1,A
	LCALL DLY
	
	MOV  DPTR,#8002H
	MOV  A,R1
	MOVX @DPTR,A
	MOV  DPTR,#8004H
	MOV  A,R3
	MOVX @DPTR,A
	MOV  A,R1
	RR   A
	MOV  R1,A
	LCALL DLY
	
	INC  R0
	CJNE R0,#33H,LED
	LJMP SLED
	
CTAB:
    PUSH DPH
	PUSH DPL
	MOV  DPTR,#TAB
	MOVC A,@A+DPTR
	POP  DPL
	POP  DPH
	RET
	
INPUT:

	CLR  RI
	CLR  EA
	MOV  30H,SBUF
	JNB  RI,$
	CLR  RI
	MOV  31H,SBUF
	JNB  RI,$
	CLR  RI
	MOV  32H,SBUF
	SETB EA
	RETI

TAB:
    DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
	
DLY:
    MOV  R7,#02H
 DL:
    MOV  R6,#0FFH
DL1:
    DJNZ R6,DL1
	DJNZ R7,DL
	RET
	
	END

标签: 积成电路二三极管单片机存储器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台