51 단편기 어셈블리 언어 실험 및 코드

단편기 어셈블리 언어 실험 및 코드


다음 내용은 본인의 실험 수업에서 직접 작성하고 51단편기 운행을 통해 실현된 실험 코드입니다. 오류가 있거나 개선된 점이 있으면 지적해 주십시오.

실험1: 개발 환경의 응용


(1) 데이터 기억 장치의 40H-4FH의 내용을 00H-0FH로 복제하고 40H-4FH의 내용을 전체적으로 외부 데이터 기억 장치의 1050H-105FH로 복제한다.(2) P1은 8개의 다이오드를 연결하여 다이오드를 하나하나 순환시켜 밝게 한다
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

실험 2: 외부 인터럽트


(1) 단일 펄스 신호로 중단을 신청하고 중단 서비스 절차에서 출력 신호를 뒤집는다(P1.0으로 1, 2극관을 연결하여 관찰할 수 있다)
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의 방식으로 1 타이머, P1.0절 발광 다이오드, 다이오드를 초당 5회 반짝인다
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) 타이머 1의 방식으로 2계수를 하고 T1은 단일 펄스를 연결하며 P1구접 다이오드로 계수를 표시한다.
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: 직렬 통신


전송 속도 2400bit/s.PC는 단편기에 8바이트의 데이터를 보내고, 단편기는 데이터를 받은 후 2바이트 55H와 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 코드를 두 개의 7단 디스플레이 코드로 바꾸는 서브루틴과 지연 서브루틴을 작성해야 한다)
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,06H,5BH,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

랩 6: D/A 및 A/D


(1) 실험상자에 있는 전위기로 아날로그량 입력을 제공하고 아날로그량을 2진수로 변환하여 변환된 결과를 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

실험7:전자시계


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

좋은 웹페이지 즐겨찾기