회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
908 마이크로프로세서 모터제어 질문합니다.1 그림톡 367 2013.06.16
907 마이크로프로세서 HOT도어락 설계에 관해서 폴트 612 2013.06.15
906 마이크로프로세서 HOTARM 초보용 보드 추천받습니다.1 말자하 716 2013.06.14
905 마이크로프로세서 HOTavr이용하여 컴퓨터 마우스제어에 궁금합니다.~ clown 628 2013.06.13
904 마이크로프로세서 PADS부품 배치시 질문이요1 미미이르 390 2013.06.04
903 마이크로프로세서 HOT8051 최대값 최소값 저장하는 명령어 조언좀..1 kyu 565 2013.05.28
902 마이크로프로세서 HOT네트워크 보드 개발자를 찾습니다. 후지바이크 410 2013.05.13
901 마이크로프로세서 시리얼인터럽트루틴에서 데이타처리하면서 에러발생에 대한 질문입니다.2 jaemi2010 398 2013.05.09
900 마이크로프로세서 UBICOM IP2022를 사용하려 합니다. 블루핑 317 2013.05.06
899 마이크로프로세서 HOT적외선 센서를 이용한 화장실 불 점등 어셈블리어 프로그램...1 오진새미 934 2013.04.20
898 마이크로프로세서 place database part누르고 -> 라이브러리 추가시 오류1 웨라러브 300 2013.04.17
897 마이크로프로세서 HOTPIC 관련 교육동영상이나 자료 있으면 부탁합니다. 전설의황제 468 2013.04.03
896 마이크로프로세서 atmega1280부트로더 프로그램없나요?2 jaemi2010 389 2013.03.29
895 마이크로프로세서 HOTCAM350, 거버데이터 좌표추출 관련 문의드립니다. 꼭좀 도와주세요 .. sozipum 2063 2013.03.18
894 마이크로프로세서 HOT사운드 동요를 만들어 봤어요~1 마프초짜입문 430 2012.11.26
893 마이크로프로세서 HOT8051을 이용하여 라인트레이서를 만들려고 합니다.1 김보람 545 2012.11.06
마이크로프로세서 HOT제가 짠 모터 구현 소스인데 어디가 문제인지 헤더파일로 넘어가질않아요1 아이유3단고음 417 2012.10.09
891 마이크로프로세서 HOT8051 dc모터제어 헤더파일점 부탁드립니다. 아이유3단고음 524 2012.10.09
890 마이크로프로세서 8051 처음 다뤄보는 학생입니다.1 요니 362 2012.10.08
889 마이크로프로세서 HOTAT90CAN128을 이용한 CAN 통신 질문 불량한마컴 950 2012.09.26
Prev 1 2 3 4 5 6 7 8 9 10 ... 50 Next
  • 인간은 오로지 자신의 무지에 대한 대략적인 깊이를 추정하기 시작할 때부터 현명해진다.
    - 메노티
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.