회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
616 전기전자 아무거나 HOT포토커플러에 대해서 문의드려요3 꼬기 1254 2013.01.23
615 Analog & Mixed-Signal 설계 HOTCCD의 무선 전송(지그비) 로미옹 1041 2013.01.07
614 Analog & Mixed-Signal 설계 HOTOPAMP와 TR통해서 전류증폭관련 질문입니다. 조신율 2691 2012.11.29
613 드론/로봇/라인트레이서 HOTMB LineMouse 전원 쪽 질문있습니다~1 윤건 1276 2012.11.20
612 Analog & Mixed-Signal 설계 HOT로또 추첨기 회로1 광돌이 1305 2012.11.07
611 Sensor 설계 HOTIC 칩 추천 및 질문이요~.~1 꼬기 944 2012.10.30
610 전기전자 아무거나 HOT꼭좀요 성의껏1 세사조 1126 2012.10.21
609 Analog & Mixed-Signal 설계 HOT리셋관련된 이상동작2 칼라무지게 804 2012.10.11
608 Analog & Mixed-Signal 설계 HOTBJT와 MOSFET의 쓰임새1 알파친노 1679 2012.10.11
607 Analog & Mixed-Signal 설계 HOT제너 다이오드의 쓰임새1 알파친노 1196 2012.10.11
606 Sensor 설계 HOT배터리 모니터링 IC칩 찾아요2 다리미 1405 2012.10.04
605 드론/로봇/라인트레이서 HOT라인트레이서 소스 질문이요!1 졸작.. 1378 2012.09.24
604 Sensor 설계 HOT콘덴서 를 찾습니다. 얀이 872 2012.09.22
603 전기전자 아무거나 HOTIMP525 대체품을 찾습니다.1 windjick 1041 2012.09.18
602 전기전자 아무거나 HOT조도센서에 대해서2 파란박스 1005 2012.09.13
601 전기전자 아무거나 HOT개발자1 세사조 823 2012.09.05
600 드론/로봇/라인트레이서 HOT센서부 소스코드 입니다. 잘안되네요... JHJ 4546 2012.09.02
599 전기전자 아무거나 HOTPADS 9.3.XXX 버젼과 PADS2005 버젼이 비슷한건가요?2 하하하하히 862 2012.08.06
598 전기전자 아무거나 HOT회로4 세사조 865 2012.08.03
597 전기전자 아무거나 HOT공통 게이트 증폭기 회로를 공부하던중 수학때문에요...;;1 행복한인생 775 2012.06.30
Prev 1 ... 4 5 6 7 8 9 10 11 12 13 ... 39 Next
  • 여러가지 위험스러운 유혹들은 겉으로만 화려하고 다채로운 우리에게 찾아든다.
    - 헨리
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.