전자기술

8051 기초 프로그램 (실제 회로 구성에 의한)

티가세 2008. 3. 19. 20:24

8051 기초 프로그램 (실제 회로 구성에 의한)

    x-yelw.gif 안내말씀
    아래의 회로와 프로그램은 별도의 실험장치 없이 브레드보드나 만능 기판에 설치/실행 할 수 있도록 한 것입니다. (1) 회로 구성도에 나와 있는데로 부품을 구입하시어 회로를 구성한 후에 (2) 프로그램을 작성하시고 번역하여 (3) 89C51(EEPROM TYPE) 이나 87C51(EPROM TYPE)에 WRITE합니다.
    프로그램을 WRITE하실 때에는 별도 판매되는
    ROM WRITER나 실험장치에 있는 WRITER를 이용합니다. (4) IC 소켓이나 TEXTOOL을 이용하면 편리합니다. 문의 사항은 메일 주세요!

 

1. 8255를 이용한 FND 제어

    (1) 회로 구성도

    (2) 원시 프로그램

SS0

EQU

00111111B

; FND 문자 데이터

SS1

EQU

00000110B

 

SS2

EQU

01011011B

 

SS3

EQU

01001111B

 

SS4

EQU

01100110B

 

SS5

EQU

01101101B

 

SS6

EQU

01111101B

 

SS7

EQU

00100111B

 

SS8

EQU

01111111B

 

SS9

EQU

01100111B

 

 

ORG

0000H

 

 

MOV

SP,#40H

 

 

MOV

A,#80H

; 8255 모드 설정

 

MOV

P2,A

; 8255 컨트롤 레지스터 선택

 

SETB

P0.0

; A0 = 1

 

SETB

P0.1

; A1 = 1

 

SETB

P1.1

; RD = 1

 

CLR

P1.0

; WR = 0

 

SETB

P1.0

; WR = 1 (*)

LOOP1:

MOV

DPTR,#FONT

; 상위 FND 초기화

 

MOV

R4,DPL

 

 

MOV

R5,DPH

 

 

MOV

R6,#0

 

 

CLR

A

 

 

MOVC

A,@A+DPTR

 

 

MOV

P2,A

 

 

CALL

PPI_A_O

 

LOOP2:

MOV

R0,#10

; 반복 횟수 지정

 

MOV

PTR,#FONT

 

LOOP3:

LR

A

 

 

MOVC

A,@A+DPTR

; 하위 숫자 출력

 

MOV

P2,A

 

 

CALL

PPI_C_O

 

 

INC

DPTR

; 글자 주소 증가

 

CALL

DELAY

; 시간 지연

 

DJNZ

R0,LOOP3

; 하위 숫자가 10번을 마쳤는가 비교

 

PUSH

DPL

; 상위 숫자로 자리 올림

 

PUSH

DPH

 

 

INC

R4

 

 

INC

R6

 

 

MOV

DPL,R4

 

 

MOV

DPH,R5

 

 

CLR

A

 

 

MOVC

A,@A+DPTR

 

 

MOV

P2,A

; 상위 숫자 출력

 

CALL

PPI_A_O

 

 

POP

DPH

 

 

POP

DPL

 

 

CJNE

R6,#0AH,LOOP2

; 상위 숫자가 9를 넘었나 비교

 

JMP

LOOP1

; 넘었을 경우 다시(00) 시작

DELAY:

MOV

R1,#00

; 시간 지연

DL1:

MOV

R2,#00

 

DL2:

NOP

 

 

 

DJNZ

R2,DL2

 

 

DJNZ

R1,DL1

 

 

RET

 

 

PPI_A_O:

 

 

; 8255 포트 A로 출력 선택

 

CLR

P0.0

; A0 = 0

 

CLR

P0.1

; A1 = 0

 

SETB

P1.1

; RD = 1

 

CLR

P1.0

; WR = 0

 

SETB

P1.0

; WR = 1 (*)

 

RET

 

 

PPI_C_O:

 

 

; 8255 포트 C로 출력 선택

 

CLR

P0.0

; A0 = 0

 

SETB

P0.1

; A1 = 1

 

SETB

P1.1

; RD = 1

 

CLR

P1.0

; WR = 0

 

SETB

P1.0

; WR = 1 (*)

 

RET

 

 

FONT

DB

SS0,SS1,SS2,SS3,SS4

; 숫자 데이터를 메모리에 할당 (정의)

 

DB

SS5,SS6,SS7,SS8,SS9

 

 

END

 

 

 

 

 

 

 

2. 내장 포트를 이용한 FND 제어

    (1) 회로 구성도

    (2) 원시 프로그램

SS0

EQU

00111111B

; FND 문자 데이터

SS1

EQU

00000110B

 

SS2

EQU

01011011B

 

SS3

EQU

01001111B

 

SS4

EQU

01100110B

 

SS5

EQU

01101101B

 

SS6

EQU

01111101B

 

SS7

EQU

00100111B

 

SS8

EQU

01111111B

 

SS9

EQU

01100111B

 

 

ORG

0000H

 

 

MOV

SP,#40H

 

LOOP1:

MOV

DPTR,#FONT

; FND2 변수 초기화

 

MOV

R3,#0

 

 

MOV

FND2L,DPL

 

 

MOV

FND2H,DPH

 

LOOP2:

MOV

R0,#10

; FND1 변수 초기화/반복 횟수 설정

 

MOV

DPTR,#FONT

 

 

MOV

FND1L,DPL

 

 

MOV

FND1H,DPH

 

LOOP3:

CALL

FND_OUT

 

 

INC

FND1L

; FND1 숫자 증가

 

DJNZ

RO,LOOP3

; FND2 숫자 증가

 

INC

FND2L

 

 

INC

R3

 

 

CJNE

R3,#0AH,LOOP2

; FND2가 10번을 했는가 비교

 

JMP

LOOP1

 

DELAY:

MOV

R1,#00

; 시간 지연

DL1:

NOP

 

 

 

DJNZ

R1,DL1

 

 

RET

 

; 하위 숫자 출력

FND_OUT:

MOV

R4,#50H

; FND 출력

FND_LOOP:

MOV

DPL,FND1L

 

 

MOV

DPH,FND1H

; 글자 주소 증가

 

SETB

P0.1

; 시간 지연

 

CLR

P0.0

; 하위 숫자가 10번을 마쳤는가 비교

 

CLR

A

; 상위 숫자로 자리 올림

 

MOVC

A,@A+DPTR

 

 

CPL

A

 

 

MOV

P2,A

 

 

CALL

DEALY

 

 

MOV

DPL,FND2L

; FND2 출력

 

MOV

DPH,FND2H

 

 

SETB

P0.0

 

 

CLR

P0.1

 

 

CLR

A

 

 

MOVC

A,@A+DPTR

 

 

CPL

A

 

 

MOV

P2,A

 

 

CALL

DELAY

 

 

DJNZ

R4,FND_LOOP

 

 

RET

 

 

FONT

DB

SS0,SS1,SS2,SS3,SS4

; 숫자 데이터를 메모리에 할당 (정의)

 

DB

SS5,SS6,SS7,SS8,SS9

 

FND2L

DB

00H

 

FND2H

DB

00H

 

FND1L

DB

00H

 

FND1H

DB

00H

 

 

END

 

 

 

 

 

 

 

3. 16*16 DOT MATRIX를 이용한 문자 출력

    (1) 회로 구성도

    (2) 원시 프로그램

 

ORG

0000H

 

 

MOV

SP,#60H

 

 

JMP

START

 

FND_DAT:

 

 

; 폰트 데이터 

 

DB

00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 

 

DB

08H, 1CH, 36H, 63H, 7FH, 7FH, 63H, 63H ; A

 

DB

7EH, 63H, 63H, 7EH, 7EH, 63H, 63H, 7EH ; B

 

DB

3EH, 7FH, 63H, 60H, 60H, 63H, 7FH, 3EH ; C

 

DB

7CH, 7EH, 63H, 63H, 63H, 63H, 7EH, 7CH ; D

 

DB

7FH, 7FH, 60H, 7CH, 7CH, 60H, 7FH, 7FH ; E

 

DB

7FH, 7FH, 60H, 7CH, 7CH, 60H, 60H, 60H ; F

 

DB

3EH, 7FH, 63H, 60H, 67H, 63H, 7FH, 3BH ; G

 

DB

DB 63H, 63H, 63H, 7FH, 7FH, 63H, 63H, 63H ; H

 

DB

7FH, 7FH, 1CH, 1CH, 1CH, 1CH, 7FH, 7FH ; I

 

DB

7FH, 7FH, 0CH, 0CH, 0CH, 6CH, 7CH, 38H ; J

 

DB

62H, 66H, 6CH, 78H, 78H, 6CH, 66H, 62H ; K

 

DB

60H, 60H, 60H, 60H, 60H, 60H, 7FH, 7FH ; L

 

DB

63H, 77H, 77H, 7FH, 6BH, 6BH, 63H, 63H ; M

 

DB

63H, 73H, 73H, 6BH, 6BH, 67H, 67H, 63H ; N

 

DB

1CH, 3EH, 63H, 63H, 63H, 63H, 3EH, 1CH ; O

 

DB

7CH, 7FH, 63H, 63H, 7FH, 7CH, 60H, 60H ; P

 

DB

DB 1CH, 3EH, 63H, 63H, 6BH, 67H, 3EH, 1DH ; Q

 

DB

7CH, 7FH, 63H, 7FH, 7CH, 78H, 6CH, 66H ; R

 

DB

3CH, 66H, 42H, 30H, 0CH, 42H, 66H, 3CH ; S

 

DB

7FH, 7FH, 1CH, 1CH, 1CH, 1CH, 1CH, 1CH ; T

 

DB

77H, 77H, 36H, 36H, 36H, 36H, 3EH, 1CH ; U

 

DB

63H, 63H, 36H, 36H, 1CH, 1CH, 08H, 08H ; V

 

DB

63H, 63H, 6BH, 6BH, 7FH, 77H, 77H, 63H ; W

 

DB

41H, 63H, 36H, 1CH, 1CH, 36H, 63H, 41H ; X

 

DB

63H, 63H, 36H, 1CH, 1CH, 1CH, 1CH, 1CH ; Y

 

DB

7FH, 7FH, 03H, 0CH, 18H, 60H, 7FH, 7FH ; Z

 

DB

00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H

 

 

 

 

PPI_CON:

 

 

; 8255 컨트롤 레지스터 설정

 

MOV

P2,A

 

 

SETB

P1.0

 

 

SETB

P1.1

 

 

SETB

P1.2

 

 

CLR

P1.3

 

 

SETB

P1.3

 

 

RET

 

 

PPI_B_O:

 

 

; 8255 포트 B로 출력

 

MOV

P2,A

 

 

CLR

P1.0

 

 

SETB

P1.1

 

 

SETB

P1.2

 

 

CLR

P1.3

 

 

SETB

P1.3

 

 

RET

 

 

PPI_C_O:

 

 

; 8255 포트 C로 출력

 

MOV

P2,A

 

 

SETB

P1.0

 

 

CLR

P1.1

 

 

SETB

P1.2

 

 

CLR

P1.3

 

 

SETB

P1.3

 

 

RET

 

 

DELAY:

 

 

; 지연 루틴

 

MOV

R6,#40H

 

DL1:

NOP

 

 

 

DJNZ

R6,DL1

 

 

RET

'전자기술' 카테고리의 다른 글

전광판 업체 리스트  (0) 2008.04.15
8051 기초 프로그램 (실제 회로 구성에 의한)  (0) 2008.03.19
USB란 무엇인가?  (0) 2008.02.14
USB란 무엇인가?  (0) 2008.02.14
엘이디 특성  (0) 2008.01.05