PIC16F883 어떤 어셈 파일을 보고 있는데

위에대가 냅다

;TESTFLAG1 bit define 
C1GEARF  EQU .0
C2GEARF  EQU .1
BUZZ1ST  EQU .2
BUZZ2ND  EQU .3


이렇게 선언해 놓은것을 봤습니다.

EQU가 c로 바꾸면 #define이라기에 #define C1GEARF 까지 자신있게 적었는데
그 다음이 참 난감하더군요. '.0'
0 앞에있는 . 쩜은 도대체 뭘까요?

0,0이라는건지, 0이라는건지 0번 비트라는건지 ..........

이 문제의 쩜은 계속해서 절 괴롭힙니다.

소스 밑을 좀 보고 있으면

MOVLW .250 이라는것이 또 등장합니다. 250이면 250이지 .250은 뭘까. 0.250?
MOVLW (.2600/.32) 이런 황당한 것도 있습니다. 이건 또 웬 나누기가 들어가서 ......

어셈은 절 자꾸 당혹스럽게 만듭니다 .. 이거 c로 어떻게 컨버젼해요 ㅠㅠ 단순한것도 헤매고 있는데;

이거 어떻게 해야할까요......
블로그 이미지

윤뽀

일상, 생활정보, 육아, 리뷰, 잡담이 가득한 개인 블로그. 윤뽀와 함께 놀아요. (방긋)

Tag , , ,

댓글을 달아 주세요

  • 소심한우주인 2009.05.29 16:52 신고  댓글주소  수정/삭제  댓글쓰기

    제가 아는 분야가 아니니 페스~^^

  • 2009.05.30 17:31  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  • 고장난우주선 2009.05.31 16:18  댓글주소  수정/삭제  댓글쓰기

    EQU의 0번 비트라는 뜻입니다.
    EQU가 8bit라면, 0~7까지의 비트를 가지겠지요.

    Flag bit define 라고 써있는게 보이시죠?
    우선 Flag가 뭔지, 왜쓰는지 아셔야 합니다.

    저는 CCS-C를 사용했기 때문에 다른 컴파일러는 모르겠지만,
    컴파일러 도움말이 잘 돼있다면, 모든게 아주 잘 설명되어 있을겁니다.

    int8 지금_내_상태;
    #bit 배고파 = 지금_내_상태.7
    #bit 춥고나 = 지금_내_상태.6
    #bit 외로워 = 지금_내_상태.5
    #bit 화가나 = 지금_내_상태.4

    CCS-C는 이런식으로 비트를 선언 합니다.

    지금_내_상태 = 0;
    화가나 = 1;
    // 이러면, "지금_내_상태" 는 "8"이 되겠죠.


    만약 #define를 쓰고싶다면, 이렇게 합니다.

    int8 지금_나의_상태;
    #define 배고파 지금_나의_상태, 7
    #define 춥고나 지금_나의_상태, 6
    #define 외로워 지금_나의_상태, 5
    #define 화가나 지금_나의_상태, 4

    여기선 콤마(,)를 사용했는데요.
    CCS-C에 아래와 같은 내장함수가 있기 때문입니다.
    bit_set(지금_나의_상태, 4); // 이러면 화가 난거죠.
    bit_set(화가나); // 이것도 같은 거죠.

    이걸 직접 만들어 쓸 수도 있는데요.
    #define bit_set(X,bit) (X |= (1<<bit)) // 이런식입니다.
    "#define"문을 형식을 꼭 맞춰 주어야 합니다.
    bit_set(화가나); 이렇게 쓰면 콤마가 없다고 뭐라 할겁니다.

    #define flag_set(X) bit_set(X)
    flag_set(화가나);
    이렇게 한다리 더 거치면 가능합니다.

    좀 복잡하죠. 저도 힘들에 알아냈어요. ㅋㅋ

    • 윤뽀 2009.05.31 19:48 신고  댓글주소  수정/삭제

      고장난우주선님 친절한 설명 감사드립니다 ^^
      힘들게 알아내신 소중한 노하우를 !!!!!!

      저는 HI-TECH C 컴파일러를 사용해서
      asm->c로 바꾸고 있어요 ㅎㅎ

      근데
      ==================================
      지금_내_상태 = 0;
      화가나 = 1;
      ==================================
      여기에서
      "지금_내_상태" 가 왜 "8"이 되는 지 이해가 잘 안됩니다 ^^;

      화가나 비트는 4번비트고
      그럼 0001 0000 이란 뜻 아닌가요?

  • 고장난우주선 2009.06.01 09:38  댓글주소  수정/삭제  댓글쓰기

    맞네요. 16이군요.
    저는 늘 이런 실수때문에 버그찾느라 고생을 하죠.

    • 윤뽀 2009.06.01 13:15 신고  댓글주소  수정/삭제

      헤헤 =ㅅ=
      저도 늘 하나 잘못써서 안되는걸 하루종일 찾고 있답니다 ;

      그런데 bit set 말고
      MOVLW .250
      MOVLW (.2600/.32)과 같은 것은 어떤 뜻인지 여쭤봐도 될까요? ;;

  • 수우º 2009.06.02 08:51 신고  댓글주소  수정/삭제  댓글쓰기

    아항?:: 저런 신기해 보이는 녀석은 몰까요~ 도망.. ㅋㅋ

  • 라디안 2010.06.10 21:13  댓글주소  수정/삭제  댓글쓰기

    쩜에의미는 십진수라는뜻입니다.
    16진수로나타낼때는 0xf2 이런식이고요
    2진수로나타낼때는 b'11111110 '이런식으로쓰입니다