<CODE>ORG 0H ;0H부터 리셋 벡터
MOV P2,#00000000B ;P2에 00000000B을 전송 ;모터 정지
CALL LCDINIT ;LCDINIT문으로 점프 ;LCD 의 초기화
MOV DPTR,#FORMAT1 ;DPTR에 FORMAT1전송 ;LCD 메세지
CALL LINE1 ;LINE1문으로 점프
MOV DPTR,#FORMAT2 ;DPTR에 FORMAT2전송 ;LCD 메세지
CALL LINE2 ;LINE2문으로 점프 ;모니터 프로그램으로
READY: JB P3.7,$ ;P3.7이 1이면 현주소 P3.7로 점프(조건 점프명령)
CLR P3.6 ;빨강 LED 점등
CALL DLY2
CLR P3.5 ;녹색 LED 점등
START: MOV P2,#00000000B ;모터 스톱
JB P0.2,LEFT ;P0.2이 1이면 LEFT로 점프 ;태양이 왼쪽
JB P0.3,RIGHT ;P0.3이 1이면 RIGHT로 점프 ;태양이 오른쪽
JB P0.0,UP ;P0.0이 1이면 UP로 점프 ;태양이 위쪽
JB P0.1,DOWN ;P0.1이 1이면 DOWN로 점프 ;태양이 아래쪽
MOV DPTR,#MSG5 ;DPTR에 MSG5전송 ;Tracking메세지
CALL LINE2 ;LINE2문으로 점프
UP: JB P0.1,START ;P0.1이 1이면 start로 점프
MOV P2,#00001100B ;P2에 00001100B을 전송
CALL DLY2 ;DLY2문으로 점프
MOV P2,#00000110B ;P2에 00000110B을 전송
CALL DLY2 ;DLY2문으로 점프
MOV P2,#00000011B ;P2에 00000011B을 전송
CALL DLY2
MOV P2,#00001001B ;P2에 00001001B을 전송
CALL DLY2
MOV DPTR,#MSG1 ;DPTR에 MSG1전송
CALL LINE2 ;LINE2문으로 점프
JMP START ;START문으로 점프
DOWN: MOV P2,#00000001B ;P2에 00000001B을 전송
CALL DLY2
MOV P2,#00000010B ;P2에 00000010B을 전송
CALL DLY2
MOV P2,#00000100B ;P2에 00000100B을 전송
CALL DLY2
MOV P2,#00001000B ;P2에 00001000B을 전송
CALL DLY2
MOV DPTR,#MSG2 ;DPTR에 MSG2전송
CALL LINE2 ;LINE2문으로 점프
JMP START ;START문으로 점프
LEFT: JB P0.3,START ;P0.3이 1이면 start로 점프
MOV P2,#10000000B ;P2에 10000000B을 전송
CALL DLY2
MOV P2,#01000000B ;P2에 01000000B을 전송
CALL DLY2
MOV P2,#00100000B ;P2에 00100001B을 전송
CALL DLY2
MOV P2,#00010000B ;P2에 00010000B을 전송
CALL DLY2
MOV DPTR,#MSG3 ;DPTR에 MSG3전송
CALL LINE2 ;LINE2문로 점프
JMP START ;START문로 점프
RIGHT: MOV P2,#00010000B ;P2에 00010000B을 전송
CALL DLY2
MOV P2,#00100000B ;P2에 00100000B을 전송
CALL DLY2
MOV P2,#01000000B ;P2에 01000000B을 전송
CALL DLY2
MOV P2,#10000000B ;P2에 10000000B을 전송
CALL DLY2
MOV DPTR,#MSG4 ;DPTR에 MSG4전송
CALL LINE2 ;LINE2문으로 점프
JMP START ;START문으로 점프
DLY2: MOV 40H,#0AH ;40H에 16진 상수 0AH(10)을 전송
GG: MOV 41H,#0FFH ;41H에 16진 상수 FFH 를 전송
DJNZ 41H,$ ;41H을 1씩 감소시키면서 0이 될 때까지 반복
DJNZ 40H,GG ;40H을 1감소시키고 0이 아니면 GG문으로 점프 1이면 다음을 실행
RET ;서브루틴 종료
LCDINIT: CLR P3.1 ;P3.1의 값을 0으로 저장
CALL DLY ;DLY문으로 점프
MOV DPTR,#SETUP ;DPTR에 SETUP전송
LCDLOOP: CLR A ;어큐뮬레이터 A에 0의 값을 저장한다.
MOVC A,@A+DPTR ;DPTR로 지정된주소지의 데이터(DB로 명명)값에 A값을 더하여그값을 A에 저장.
INC A ;어큐뮬레이터 A의 내용을 1증가시킨다.
JZ LCDEND ;A=0이면 LCDEND의 위치로 점프
SETB P3.0 ;P3.0의 값을 1로한다.
CALL DLY ;DLY문으로 점프
DEC A ;A의 내용을 1 감소시킨다.
MOV P1,A ;A의 내용을 P1에 전송한다.
INC DPTR ;DPTR의 값을 1 증가시킨다.
CALL DLY ;DLY문으로 점프
CLR P3.0 ;P3.0에 0의 값을 저장한다.
CALL DLY ;DLY문으로 점프
JMP LCDLOOP ;LCDLOOP문으로 점프
LCDEND: RET ;서브루틴 종료
LINE2: CLR P3.1 ;P3.1에 0의 값을 저장한다.
SETB P3.0 ;P3.0의 값을 1로한다.
MOV P1,#0C0H ;P1에 16진 상수 C0H 를 전송
CALL DLY ;DLY문으로 점프
CLR P3.0 ;P3.0에 0의 값을 저장한다.
LINE1: SETB P3.1 ;P3.1의 값을 1로한다.
CALL DLY ;DLY문으로 점프
CALL LCDLOOP ;LCDLOOP문으로 점프
RET
DLY: DJNZ 3FH,$ ;3FH을 1씩 감소시키면서 0이 될 때까지 반복
RET ;서브루틴 종료
; LCD에 표시하기위한 데이터 베이스
ASCII: DB '0123456789ABCDEF',0FFH
SETUP: DB 038H,0CH,02H,01H,0FFH
FORMAT1: DB ' SNUT SOLAR ',0FFH
FORMAT2: DB ' TRACKING SYSTEM',0FFH
MSG1: DB ' [ UP ] ',0FFH
MSG2: DB ' [ DOWN ] ',0FFH
MSG3: DB ' [ LEFT ] ',0FFH
MSG4: DB ' [ RIGHT ] ',0FFH
MSG5: DB ' TRACKING.... ',0FFH
END
말도안되는 이런질문을 올려도 되는지 모르겠네요ㅠㅠ
cds를 이용하여 모터를 제어할 생각입니다.(추적식태양광시스템)
소스를 구해서 8051에 라이팅까지 마쳤는데 구동이 안되네요...
배전은 꼼꼼히 마쳤다 생각되어 프로그램쪽에 문제가 있을까 해서 이렇게 질문드립니다.
어떠한 조언이라도 감사드리겠습니다. 살려주세요 ㅠㅠ
</CODE>
MOV P2,#00000000B ;P2에 00000000B을 전송 ;모터 정지
CALL LCDINIT ;LCDINIT문으로 점프 ;LCD 의 초기화
MOV DPTR,#FORMAT1 ;DPTR에 FORMAT1전송 ;LCD 메세지
CALL LINE1 ;LINE1문으로 점프
MOV DPTR,#FORMAT2 ;DPTR에 FORMAT2전송 ;LCD 메세지
CALL LINE2 ;LINE2문으로 점프 ;모니터 프로그램으로
READY: JB P3.7,$ ;P3.7이 1이면 현주소 P3.7로 점프(조건 점프명령)
CLR P3.6 ;빨강 LED 점등
CALL DLY2
CLR P3.5 ;녹색 LED 점등
START: MOV P2,#00000000B ;모터 스톱
JB P0.2,LEFT ;P0.2이 1이면 LEFT로 점프 ;태양이 왼쪽
JB P0.3,RIGHT ;P0.3이 1이면 RIGHT로 점프 ;태양이 오른쪽
JB P0.0,UP ;P0.0이 1이면 UP로 점프 ;태양이 위쪽
JB P0.1,DOWN ;P0.1이 1이면 DOWN로 점프 ;태양이 아래쪽
MOV DPTR,#MSG5 ;DPTR에 MSG5전송 ;Tracking메세지
CALL LINE2 ;LINE2문으로 점프
UP: JB P0.1,START ;P0.1이 1이면 start로 점프
MOV P2,#00001100B ;P2에 00001100B을 전송
CALL DLY2 ;DLY2문으로 점프
MOV P2,#00000110B ;P2에 00000110B을 전송
CALL DLY2 ;DLY2문으로 점프
MOV P2,#00000011B ;P2에 00000011B을 전송
CALL DLY2
MOV P2,#00001001B ;P2에 00001001B을 전송
CALL DLY2
MOV DPTR,#MSG1 ;DPTR에 MSG1전송
CALL LINE2 ;LINE2문으로 점프
JMP START ;START문으로 점프
DOWN: MOV P2,#00000001B ;P2에 00000001B을 전송
CALL DLY2
MOV P2,#00000010B ;P2에 00000010B을 전송
CALL DLY2
MOV P2,#00000100B ;P2에 00000100B을 전송
CALL DLY2
MOV P2,#00001000B ;P2에 00001000B을 전송
CALL DLY2
MOV DPTR,#MSG2 ;DPTR에 MSG2전송
CALL LINE2 ;LINE2문으로 점프
JMP START ;START문으로 점프
LEFT: JB P0.3,START ;P0.3이 1이면 start로 점프
MOV P2,#10000000B ;P2에 10000000B을 전송
CALL DLY2
MOV P2,#01000000B ;P2에 01000000B을 전송
CALL DLY2
MOV P2,#00100000B ;P2에 00100001B을 전송
CALL DLY2
MOV P2,#00010000B ;P2에 00010000B을 전송
CALL DLY2
MOV DPTR,#MSG3 ;DPTR에 MSG3전송
CALL LINE2 ;LINE2문로 점프
JMP START ;START문로 점프
RIGHT: MOV P2,#00010000B ;P2에 00010000B을 전송
CALL DLY2
MOV P2,#00100000B ;P2에 00100000B을 전송
CALL DLY2
MOV P2,#01000000B ;P2에 01000000B을 전송
CALL DLY2
MOV P2,#10000000B ;P2에 10000000B을 전송
CALL DLY2
MOV DPTR,#MSG4 ;DPTR에 MSG4전송
CALL LINE2 ;LINE2문으로 점프
JMP START ;START문으로 점프
DLY2: MOV 40H,#0AH ;40H에 16진 상수 0AH(10)을 전송
GG: MOV 41H,#0FFH ;41H에 16진 상수 FFH 를 전송
DJNZ 41H,$ ;41H을 1씩 감소시키면서 0이 될 때까지 반복
DJNZ 40H,GG ;40H을 1감소시키고 0이 아니면 GG문으로 점프 1이면 다음을 실행
RET ;서브루틴 종료
LCDINIT: CLR P3.1 ;P3.1의 값을 0으로 저장
CALL DLY ;DLY문으로 점프
MOV DPTR,#SETUP ;DPTR에 SETUP전송
LCDLOOP: CLR A ;어큐뮬레이터 A에 0의 값을 저장한다.
MOVC A,@A+DPTR ;DPTR로 지정된주소지의 데이터(DB로 명명)값에 A값을 더하여그값을 A에 저장.
INC A ;어큐뮬레이터 A의 내용을 1증가시킨다.
JZ LCDEND ;A=0이면 LCDEND의 위치로 점프
SETB P3.0 ;P3.0의 값을 1로한다.
CALL DLY ;DLY문으로 점프
DEC A ;A의 내용을 1 감소시킨다.
MOV P1,A ;A의 내용을 P1에 전송한다.
INC DPTR ;DPTR의 값을 1 증가시킨다.
CALL DLY ;DLY문으로 점프
CLR P3.0 ;P3.0에 0의 값을 저장한다.
CALL DLY ;DLY문으로 점프
JMP LCDLOOP ;LCDLOOP문으로 점프
LCDEND: RET ;서브루틴 종료
LINE2: CLR P3.1 ;P3.1에 0의 값을 저장한다.
SETB P3.0 ;P3.0의 값을 1로한다.
MOV P1,#0C0H ;P1에 16진 상수 C0H 를 전송
CALL DLY ;DLY문으로 점프
CLR P3.0 ;P3.0에 0의 값을 저장한다.
LINE1: SETB P3.1 ;P3.1의 값을 1로한다.
CALL DLY ;DLY문으로 점프
CALL LCDLOOP ;LCDLOOP문으로 점프
RET
DLY: DJNZ 3FH,$ ;3FH을 1씩 감소시키면서 0이 될 때까지 반복
RET ;서브루틴 종료
; LCD에 표시하기위한 데이터 베이스
ASCII: DB '0123456789ABCDEF',0FFH
SETUP: DB 038H,0CH,02H,01H,0FFH
FORMAT1: DB ' SNUT SOLAR ',0FFH
FORMAT2: DB ' TRACKING SYSTEM',0FFH
MSG1: DB ' [ UP ] ',0FFH
MSG2: DB ' [ DOWN ] ',0FFH
MSG3: DB ' [ LEFT ] ',0FFH
MSG4: DB ' [ RIGHT ] ',0FFH
MSG5: DB ' TRACKING.... ',0FFH
END
말도안되는 이런질문을 올려도 되는지 모르겠네요ㅠㅠ
cds를 이용하여 모터를 제어할 생각입니다.(추적식태양광시스템)
소스를 구해서 8051에 라이팅까지 마쳤는데 구동이 안되네요...
배전은 꼼꼼히 마쳤다 생각되어 프로그램쪽에 문제가 있을까 해서 이렇게 질문드립니다.
어떠한 조언이라도 감사드리겠습니다. 살려주세요 ㅠㅠ
</CODE>
댓글 0