회원가입 ID/PW 찾기
AA

#include<AT89x51.h>
#include<stdio.h>
#include"LCD.H"


int t_on, t_off, en_ent, lev_int;
char tim_cnt, level, m_onoff;

//외부 인터럽트 0서비스 루틴(모터 속도 증가)
void int0(void) interrupt 0 using 2

{
  EA =0;
  TR0 =0;
  TR1 = 0;
 
  if(level != 10){ //모터 속도 = 최고속도
                   //모터 속도 증가를 t_on시간 증가와 t_off시간 감소
                   //t_on = t_on + lev_int, t_off = t_off - lev_int
                   level++; // 모터 속도 레벨 1 증가
                   t_on + = lev_int;
                   t_off-=lev_int;
  }
 
  TR0 =1;
  TR1 =1;
  EA =1;
}

//타이머/카운터 0 인터럽트 서비스 루틴
//PWM 펄스 출력과 함께 1초 측정
void timer0(void) interrupt 1 using 2
{

    EA = 0;
    TR0 = 0;
    RT1 = 0;
   
    if(m_onoff == 0) { //현재 모터 상태, On 상태이면 Off 상태로
                       // 모터의 OFF 상태에서 ON tkdxofh
                       // (TH0, TL0) <-T_on;
                       tim_cnt++;   //모터의 OFF상태에서 ON상태로
                                    //바뀔때마다 +1한다.
                                    //즉, 이 값이 50이면 1초가 된다.
                               
                               
             TH0 = (char)((65536-t_on)>>8);
             TL0 = (char)((65536-t_on)&0x00FF);
            
            
             P1_0 = 1;    //모터 ON
                   m_onoff = 1 //모터를 ON상태로
                 }
              else {
                      //모터의 ON상태에서 OFF상태로
                      //(TH0,TL0)<-t_off;
                      TH0 = (char)((65536-t_off)>>8);
                      TL0 = (char)((65536-t_off)&0x00FF);
                     
                      P1_0 = 0; //모터 OFF
                      m_onoff = 0;
                   
                   
                      
         }
        
         TR0 = 1;
         TR1 = 1;
         EA = 1;
   ]
  
  
  
   //외부 인터럽트 1 서비스 루틴 (모터 속도 감소)
   //t_on = t_on - lev_int, t_off = t_off + lev_int
    void int1(void) interrupt 2 using 2
    {
   
        EA = 0;
        TR0 = 0;
        TR1 = 0;
       
       
        if(level != 0){
                    level--;
                    t_on -= lev_int;
                    t_off += lev_int;
                   
                     
        }
       
           
       
        TR0 = 1;
        TR1 = 1;
        EA = 1;
       
   }
  
  
  
   //타이머/카운터 1 인터럽트 서비스 루틴(모터 회전수 카운트)
   //모터 1 회전마다 1개의 펄스가 T1ekswkfmf xhdgo dlqfurehlamfh
   //펄스가 1개 입력될 때마다 회전수값을 +1한다.
   void timer1(void) interrupt 3 using 2
 {
 
    EA = 0;
    TR0 = 0;
    RT1 = 0;
   
   
    en_cnt++;
   
   
    TR0 = 1;
    RT1 = 1;
    EA = 1;
   
  }
 
 
  void  Display(int cnt)
 
  {
 
          char temp[10];
         
         
          sprintf(temp, "%d", cnt);
          LCD_String(temp);
   }
  
  
   void main(void)
  
   {
  
          LCD_Init();     //LCD 초기화
         
         
          //타이머/카운터0 -> 타이머모드1(16비트), PWM출력, 1초 측정
          //타이머/카운터1 -> 카운터모드2(오토), 모터의 회전수 카운트
          TMOD = 0x61;
         
          //20ms(50Hz)마다 1주기의 클럭 발생
          //20ms동안 Higt되는 시간(t_on)과 Low 되는 시간 (t_off)을
          //조절하여 모터 속도 제어
          //20ms마다 인터럽트를 걸기 위한 시정수
          //20ma / 1.085ua = 18433
          level = 0;    //모터 속도 레벨 0
                        //모터 ON시간 = OFF시간
          t_on = 9216;  // 18433/2
          t_off= t_on;
         
         
          //모터 속도 가감을 위한 타이머 증분치값 설정
          lev_int = 921;
         
         
          //t_on 시간을 위한 시정수 타이머 증분치값 설정
          //(TH0, TL0)<-65536 - t_ON
          TH0 = (char)((65536-t_on)>>8);
          TL0 = (char)((65536-t_on)&0x00FF);
         
         
         
          //모터의 회전수를 카운트하기 위한 설정
          //모터가 1회전할 때마다 인터럽트가 걸릴
          //필요가 있으므로 255값을 설정
          TH1 = 255;   //오토 리로드 값
          Tl1 = 255;   //초기값
         
         
          m_onoff = 1;
          tim_cnt = 0;
          en_cnt = 0;
         
          IT0 = 1;
          IT1 = 1;
         
          EX0 = 1;
          EX1 = 1;
          ET0 = 1;
          ET1 = 1;
         
         
          TR0 = 1;
          TR1 = 1;
          EA= 1;
          P1_0 = 1;
         
         
         
          while(1){
                    while(tim_cnt != 50);
                   
                    EA = 0;
                    TR0 = 0;
                    TR1 = 0;
                    tim_cnt = 0;
                   
                    Command(HOME);
                    Display(en_cnt);
                   
                   
                    en_cnt = 0;
                   
                   
                    TR0 = 1;
                    TR1 = 1;
                    EA = 1;
              }
             
             
             
  }
 
 
 
  void int0(void)  interrupt 0 using 2
 
  (        
             
               EA = 0;
               TR0 = 0;
              
              
               if(mot_mod == 0)(
              
                      p1_1 = 1;
                      p1_2 = 1;
                     
                     
                      mot_mod = 1;
                     
                 }
                
                 else if(mot_mod == 1){
                
                 P1_2 = 0;
                 P1_1 = 0;
                
                
                 mot_mod =2;
                
                
                 P1_2 = 1;
            }
            else {
           
                    P1_2 = 0;
                    mot_mod = 0;
                   
            }
       
              TR0 = 1;
              EA = 1;
       }
      
      
       void timer0(void) interrupt 1 using 2
       {  
            EA = 0;
            TR0 = 0;
           
           
            if(m_onoff == 0){
           
                              TH0 = (char)((65536-t_on)>>8);
                              TL0 = (char)((65536-t_on)&0x00FF);
                             
                             
                              P1_0 = 1;
                              m_onoff = 1;
                             
         }
        
         else{
        
          TH0 = (char)((65536-t_off)>>8);
          TL0 = (char)((65536-t_off)&0x00ff);
         
         
          P1_0 = 0;
          m_onoff = 0;
         
         }
        
         TR0 = 1;
         EA = 1;
        
       }
      
       void main(void)
       {
      
          P1_2 = 0;
          mot_mod = 0;
         
         
          TMOD = 0x01;
          t_on = 16590;
          t_off = 1843;
         
         
          TH0 = (char)((65536-t_on)>>8);
          TL0 = (char)((65536-t_on)&0x00FF);
         
         
          IT0 = 1;
          EX0 = 1;
          ET0 = 1;
         
         
          TR0 = 1;
          EA = 1;
         
          while(1);
         
    }
             

댓글 1
  • No Profile

    헤더 파일로 넘어가지 않는다는게 무슨뜻인지 이해가 안되네요... 보니깐 LCD로 출력하게 안된다는 건가요??? 프로젝트내 헤더파일 추가는 하신걸테고... 흠.. 저건만 봐서는 잘 모르겠네요..

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
1052 마이크로프로세서 HOT모터 제어 하나만 더물어볼게여 ㅠ2 sksksksksksk 612 2013.06.16
1051 마이크로프로세서 모터제어 질문합니다.1 그림톡 373 2013.06.16
1050 마이크로프로세서 HOT도어락 설계에 관해서 폴트 616 2013.06.15
1049 마이크로프로세서 HOTARM 초보용 보드 추천받습니다.1 말자하 720 2013.06.14
1048 마이크로프로세서 HOTavr이용하여 컴퓨터 마우스제어에 궁금합니다.~ clown 634 2013.06.13
1047 마이크로프로세서 HOTPADS부품 배치시 질문이요1 미미이르 411 2013.06.04
1046 마이크로프로세서 HOT8051 최대값 최소값 저장하는 명령어 조언좀..1 kyu 569 2013.05.28
1045 마이크로프로세서 HOT네트워크 보드 개발자를 찾습니다. 후지바이크 414 2013.05.13
1044 마이크로프로세서 시리얼인터럽트루틴에서 데이타처리하면서 에러발생에 대한 질문입니다.2 jaemi2010 399 2013.05.09
1043 마이크로프로세서 UBICOM IP2022를 사용하려 합니다. 블루핑 332 2013.05.06
1042 마이크로프로세서 HOT적외선 센서를 이용한 화장실 불 점등 어셈블리어 프로그램...1 오진새미 941 2013.04.20
1041 마이크로프로세서 place database part누르고 -> 라이브러리 추가시 오류1 웨라러브 307 2013.04.17
1040 마이크로프로세서 HOTPIC 관련 교육동영상이나 자료 있으면 부탁합니다. 전설의황제 470 2013.04.03
1039 마이크로프로세서 atmega1280부트로더 프로그램없나요?2 jaemi2010 396 2013.03.29
1038 Software & IDEs HOTOV9620 SXGA 모드 설정 좀 도와주세요1 로미옹 516 2013.03.25
1037 마이크로프로세서 HOTCAM350, 거버데이터 좌표추출 관련 문의드립니다. 꼭좀 도와주세요 .. sozipum 2067 2013.03.18
1036 마이크로프로세서 HOT사운드 동요를 만들어 봤어요~1 마프초짜입문 437 2012.11.26
1035 펌웨어 & 코딩언어 HOT비주얼베이직 연산 및 줄바꿈에 대한 질문입니다.1 원할머니보고쌈 686 2012.11.07
1034 마이크로프로세서 HOT8051을 이용하여 라인트레이서를 만들려고 합니다.1 김보람 558 2012.11.06
마이크로프로세서 HOT제가 짠 모터 구현 소스인데 어디가 문제인지 헤더파일로 넘어가질않아요1 아이유3단고음 425 2012.10.09
Prev 1 2 3 4 5 6 7 8 9 10 ... 58 Next
  • 상대를 공경하고 남에게 양보하는 정신을 백성에게 기르게 하면 서로 다투는 것은 없어지게 되고 세상은 저절로 다스려지게 된다.
    - 근사록
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.