회원가입 ID/PW 찾기
AA

 제가 구현하려는 것은 RS232C를 통하여 값을 받아서 PWM포트 3개이용 각각 값을 써주려고 하는것입니다.

그런데 값들이 제멋대로 들어가네요... if  문 써서 A입력시 몇쓰면 PWM몇에 동작 이렇게 하려는데요...

예를들어 G누르면 else값으로 되서 값을 넣을 시간도 없이 나와버립니다.  

만일 asm("cli")를 누르면 들어가는 값이 랜덤으로 가지고 언제 값을 써야될지 모르게 되서 asm("cli")를 썼더니

그나마 낫아 지긴 했습니다.

3개 따로 따로 값을 넣어주는 방법이 없을

까요 제방법이 틀린걸가요 고수님들의 답변 부탁합니다.

program은  codevision 이용했습니다. 
 
//----------------------------------------------------
// mega128 pwm+rs232 test
// xtal: 16MHZ
//----------------------------------------------------
#include <mega128.h>
#include <delay.h>
#include <stdio.h>
//---------------------------------------------------
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define FRAMING_ERROR (1<<4)
#define PARITY_ERROR  (1<<2)
#define DATA_OVERRUN  (1<<3)
WORD k;


//----------------------------------------------------
bit  flg;
char stat, data;


interrupt [USART0_RXC] void usart0_rxc(void)
{
  stat=UCSR0A; data=UDR0;
  if((stat & (FRAMING_ERROR|PARITY_ERROR|DATA_OVERRUN))==0) flg=1;
}

void ledsel_blue()


    #asm("sei")
    if(flg)
    OCR1BL=data;
    delay_ms(1000);
    #asm("cli")  
}

void ledsel_green()

{
    #asm("sei")
    if(flg)
    OCR1AL=data;
    delay_ms(1000);
    #asm("cli")
}
void main(void)
{
    UCSR0A =0x0;
    UCSR0B = 0b10011000;
    UCSR0C = 0b10000110;
    UBRR0H = 0;
    UBRR0L = 103;
    DDRB=0b11100000; //7:OC1C, 6:OC1B, 5:OC1A
    DDRD=0b00001010; //3:txd, 2:rxd
    TCCR1A=0b10101001; TCCR1B=0b1011;
    printf(" 256 RGB -RS232C- TEST");
    printf("\n\n\r");
   
    while(1)
    {
     k = getchar();     // 입력된 내용을 c에 저장함.    
    // putchar(k);  // 방금 친 내용을 모니터에 출력함.

     if(k == 'G')
     {
      ledsel_green();
      printf("\n\rGreen Value Input.\n\r");
                       
     }
     if(k =='B')
     {
     ledsel_blue();
     printf("\n\rBlue Value Input.\n\r");
                 
     }
     if(k =='R')
     {

      printf("\n\rRed Value Input.\n\r");
      OCR1CL= data;        
     }
    else
      printf("\nYou were selected wrong value .!!  Re select Please.\n\r");
    }
}

댓글 3
  • 보통 이러한 프로그램은 프로토콜로 만듭니다.

    아니면 G 가 눌린 후 3개의 입력을 더 받는다던가요.


      
        byte cBuf [ 3 ] ;

        while(1)
        {
         k = getchar();     // 입력된 내용을 c에 저장함.    
        // putchar(k);  // 방금 친 내용을 모니터에 출력함.

         if(k == 'G')
         {
     for ( i=0 ; i<3 ; i++ )
     {
      cBuf [ i ] = getchar();
     }

     printf ( " %c %c %c " , cBuf [0] , cBUf [1] , cBuf[2] ) ;

     // 위의 cBuf 의 값을 가공해서 아래의 함수로 넣어야 함.

     // --------------


            ledsel_green();
           
            printf("\n\rGreen Value Input.\n\r");
                           
         }
    }


    void ledsel_green()

    {
        OCR1AL=data;
    }


    머 이런 식이랄까요?

    아니면 프로토콜로 처리해서 stx 받은다음 etx 받을때까지 버퍼에 시리얼 인터럽트 함수에서 저장해 놓고

    메인에서 처리 하는 방법을 가장 많이 사용합니다.


  • No Profile
    글쓴이 히야신스83 10.02.09 09:03 댓글 좋아요 0 싫어요 0
    영혼님 감사합니다. 오늘 당장 해봐야겠네요
  • No Profile
    글쓴이 히야신스83 10.02.09 15:40 댓글 좋아요 0 싫어요 0
    영혼님 정말 감사합니다. 오늘 해 본 결과 3개의 입력 받아서 출력됨을 확인 할 수 있었습니다.

    정말 감사합니다.

    영혼님 덕분에 살았네요...~!!! 영혼님 쌩유베리감사.

    프로토콜 방식은 제가 책도 없고 관련 자료도 없고해서 나중에 해봐야할 것 같습니다.

    아무튼 감사합니다.

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

search
번호 분류 제목 글쓴이 조회 수 날짜
46 펌웨어 & 코딩언어 HOTblackfin 칩 부트코드 작성해보신분?1 퀴아쿠 863 2010.02.19
45 펌웨어 & 코딩언어 HOT어셈블리를 공부해야할까요?>8 GrayShark 1227 2010.02.17
44 펌웨어 & 코딩언어 HOTC언어책 추천 해주세요 ㅋㅋ9 따라하다 1624 2010.02.06
43 펌웨어 & 코딩언어 HOTc언어질문인데요5 tiger2 995 2009.12.17
42 펌웨어 & 코딩언어 HOT프로그래밍 공부는 어느순서로 공부해야하나요??6 기꾸닝 1470 2009.12.02
41 펌웨어 & 코딩언어 HOT[초짜] 세그먼트를 이용해 카운터 하는 소스를 짜려고 하는데 ..5 기꾸닝 1472 2009.12.02
40 펌웨어 & 코딩언어 HOTc언어 ㅠㅠ3 kjs85179 1441 2009.11.05
39 펌웨어 & 코딩언어 HOT라운드 로빈 방식의 스케쥴러에서... karismapong 1980 2009.10.20
38 펌웨어 & 코딩언어 HOT도와주세요!!4 심봉사 1299 2009.09.21
37 펌웨어 & 코딩언어 HOTC 언어 궁금한거 있습니다~3 로이안 1139 2009.09.04
36 펌웨어 & 코딩언어 HOT마이컴 초짜의 넋두리~12 소스리 1255 2009.08.20
35 펌웨어 & 코딩언어 HOT8051 신호등 C언어론 한건데요 딜레리....2 근자 1650 2009.05.26
34 펌웨어 & 코딩언어 HOT어셈 관련해서 질문입니다..^^;2 화언 1274 2009.04.22
33 펌웨어 & 코딩언어 HOT이거좀 도와주세요2 지노 931 2008.10.12
32 펌웨어 & 코딩언어 HOT8051 4거리 신호등에서의 소스에서요1 마모루 1158 2008.09.08
31 펌웨어 & 코딩언어 HOTjava ....5 あさひ 921 2008.08.19
30 펌웨어 & 코딩언어 HOTacc.h 오류문제입니다.ㅠ1 미스터조ㅋ 864 2008.06.21
29 펌웨어 & 코딩언어 HOTC언어와 C++의 차이점이 무엇인가요??6 날아가는잡쉐 1618 2008.04.29
28 펌웨어 & 코딩언어 HOTPCM의 구조를 알고 싶습니다.2 Kasanova77 2323 2008.03.29
27 펌웨어 & 코딩언어 HOT혹시 이 프로그램..8 빛나는 영혼 1234 2008.03.13
  • 사람은 불의한 일을 하지 않을 수 있은 연후에야 의로운 일을 할 수 있는 것이다.
    - 맹자
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.