회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
145 Allegro & OrCAD HOTorcad 16.5 버젼 사용중인데..한글매뉴얼있으신분 ㅠ1 한준혁 2667 2012.11.28
144 Allegro & OrCAD HOT버전16.5에서 netlist시 fomatters >> pads2k.dll 선택항목 부재1 뽀리 1139 2012.11.01
143 Allegro & OrCAD HOTorcad 16.5 license manager 설치가 안되네요 ..ㅠ1 C_o 2406 2012.10.26
142 Allegro & OrCAD HOT(그려져 있는)orcad 회로에 라이브러리 복사 하기와 회로 복사 하는 방법 아시는분 ?1 천년미르 903 2012.10.04
141 Allegro & OrCAD HOTmentor -> OrCAD PCB Editor TSP 554 2012.09.24
140 Allegro & OrCAD HOTORCAD초보인데요ㅠㅠ 고수분들 ORCAD좀 질문할게요ㅠ1 하하하하히 2569 2012.09.02
139 Allegro & OrCAD HOTcadence allegro 크랙 파일 찾습니다.. 쉬리 806 2012.08.28
138 Allegro & OrCAD PCB editor는 빈페이지 같은거 없나요?1 아둘란 272 2012.08.17
137 Allegro & OrCAD HOTOrCAD 10.x version layout 관련 질문입니다..2 열혈공학도 601 2012.08.14
136 Allegro & OrCAD HOTOrCAD 9.3 찾고있습니다~~!!4 가을비 465 2012.06.21
135 Allegro & OrCAD HOTOrCAD 16.3 버전 크랙버전좀 보내주세요. 부탁드립니다.1 물어봐 4240 2012.05.15
134 Allegro & OrCAD HOTorcad16.3 소자 베타값 및 파라미터 값 설정에 대한 질문 당근이초소 689 2012.03.26
133 Allegro & OrCAD HOTOrcad 16.0 SHooTERS 설치법 질문2 메탈광 3323 2012.01.04
132 Allegro & OrCAD HOT부품핀에 패턴 연결에 대해 문의드립니다.1 start 951 2011.12.06
131 Allegro & OrCAD HOTpart를 수정하여 사용할수있는 방법?1 정상까지 가보자! 882 2011.11.20
130 Allegro & OrCAD HOTCapture CIS의 "Place database parts" 실행 시 나타나는 오류?? 시드라인 1887 2011.11.05
129 Allegro & OrCAD HOT윈7을 사용해서 10.5에서..1 카나데 1165 2011.10.29
128 Allegro & OrCAD HOTOR_CAD 레이아웃 치수보조선2 천상에서 2015 2011.09.17
127 Allegro & OrCAD HOTusb 3.0단자를 orcad로 그려 보려고합니다. 제이콥 1757 2011.09.06
126 Allegro & OrCAD HOTwindows7 으로 오늘 교체하고 orcad16.2 설차 방법 문의11 빼빼로 5817 2011.09.06
Prev 1 2 3 4 5 6 7 8 9 10 ... 12 Next
  • 해놓은 약속은 미지불의 부채이다.
    - R.W.서비스
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.