<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>

< type=text/>Skin_LastUpdate('20120503115924')</>* 최종수정일 :<>getDateFormat('20120503115924' , 'xxxx.xx.xx <xx:xx>')</> 2012.05.03 <11:59>