Lv. 83 (전무) 70,159 납
26%
Exp. 69,331/70,560 | 26%
회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
414 Allegro & OrCAD HOTOrCAD Layout 에서1 엥겔로스 505 2013.02.07
413 ECAD 아무거나 HOT라이브러리관련문의1 pascal0 468 2013.02.04
412 PADS HOTpads 9.4 크랙설정법 에러뜨네요.ㅠ..2 소거기김밥 2706 2013.02.04
411 Allegro & OrCAD HOTOrCAD Test point1 엥겔로스 1783 2013.01.25
410 Allegro & OrCAD HOTOrcad가 설치후 며칠후면 실행이 되질 않습니다.3 곤곤 2859 2013.01.24
409 ECAD 아무거나 HOTpads 9.4 설치 방법 문의1 뻐카 3060 2013.01.22
408 Allegro & OrCAD HOT부품 라이브러리 새로 그릴때 핀 NAME을 숨길수 있는 방법이 없나요?1 곤곤 819 2013.01.14
407 Allegro & OrCAD 풋프린트 교체시 버그?1 괴수가면 389 2013.01.09
406 ECAD 아무거나 HOT부품 레퍼런스 초기화2 pck0406 556 2013.01.03
405 Allegro & OrCAD HOTorcad 16.5 버젼 사용중인데..한글매뉴얼있으신분 ㅠ1 한준혁 2667 2012.11.28
404 ECAD 아무거나 HOTEagle CAD 사용해보신분?2 wind 1070 2012.11.28
403 PADS HOT부품 배치에 관해 문의 아닌 문의 드립니다.3 불꽃처럼 441 2012.11.24
402 ECAD 아무거나 HOT전자캐드기능사 실기시험 보신분 있으신가요? (Pads)2 하하하하히 1076 2012.11.12
401 PADS HOTOpen Decal후 Rename Terminal 창 활성화 안돼 고생 중4 roijjaung 1428 2012.11.09
400 Allegro & OrCAD HOT버전16.5에서 netlist시 fomatters >> pads2k.dll 선택항목 부재1 뽀리 1139 2012.11.01
399 ECAD 아무거나 pads3.5 설치했는데요 pads 에러좀 봐주세요 ㅠ1 하하하하히 300 2012.10.28
398 ECAD 아무거나 HOT로드셀을 이용한 회로 설계에대해 궁금합니다.1 삼이ㅋ 973 2012.10.27
397 Allegro & OrCAD HOTorcad 16.5 license manager 설치가 안되네요 ..ㅠ1 C_o 2406 2012.10.26
396 PADS HOTpads 에서 ARC 설정 어떻게 하나요?2 스코프 1740 2012.10.24
395 Allegro & OrCAD HOT(그려져 있는)orcad 회로에 라이브러리 복사 하기와 회로 복사 하는 방법 아시는분 ?1 천년미르 903 2012.10.04
Prev 1 ... 7 8 9 10 11 12 13 14 15 16 ... 32 Next
  • 재미가 없다면 왜 그걸 하고 있는가?
    - 제리 그린필트
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.