레이블이 어셈인 게시물을 표시합니다. 모든 게시물 표시
레이블이 어셈인 게시물을 표시합니다. 모든 게시물 표시

2009년 10월 14일 수요일

[PIC] carry는 알겠는데 digit carry는 뭔데?

OPCODE FIELD DESCRIPTIONS 보다가 질문.

 

Field

Description

f

Register file address (0x00 to 0x7F)

W

Working register (accumulator)

b

Bit address within an 8-bit file register

k

Literal field, constant data or label

x

Don't care location (= 0 or 1).

The assembler will generate code with x = 0.

It is the recommended form of use for

compatibility with all Microchip software tools.

d

Destination select; d = 0: store result in W,

d = 1: store result in file register f.

Default is d = 1.

PC

Program Counter

/TO

Time-out bit

C

Carry bit

DC

Digit carry bit

Z

Zero bit

/PD

Power-down bit

 

 

캐리가 뭔지는 안다.

이진수 1 + 1하면 캐리 1이고 값은 0.

그거 표시하려고 carry bit가 있는 것이라고 생각된다.

 

그럼 digit carry bit는 왜 있는거지? 이건 뭐지?

 

====================================================================================

아래와 같이 답이 달렸다.

====================================================================================

 

고장난우주선 2009/05/31 16:12

저도 궁금해서 검색좀 해봤는데요.

Digit Carry는 10진수에서 한지리 올라갈때 발생하는 자릿수 올림수 인거 같습니다.

Device를 정확히 모르겠으나.
PIC16F946 Datasheet를 보면.

STATUS<1> DC: A carry-out from the 4th low-order bit of the result occurred
STATUS<0> C: A carry-out from the Most Significant bit of the result occurred

이렇게 나와 있습니다.

Carry는 MSB에서 발생한 올림수.
Digit Carry는 하위 4bit 에서 상위 bit로 올라가는 올림수.
라는 뜻 같아요.

아마도, BCD code와 관련이 있을거 같은데요.
확실히는 모르겠구요.

BCD code는 뭔지 아실테니깐 생략하고,
BCD에서 1001 + 0001 = 0001 0000 이렇게 되잖아요.

제 짐작으로는 하위 4bit의 값이 1001 보다 클때 Digit Carry가 발생하는거 같습니다.

  • BlogIcon 윤뽀 2009/05/31 19:54

    전 Device PIC16F883입니다 ㅎ
    고장난우주선님과 같은 PIC16F 계열이라 반갑네요 >ㅅ<//

    BCD코드!
    그렇군요 진짜 생각지도 못했는데 ;

    883에 대한 Datasheet도 제대로 보지 못하고 막 시작한 일이라 이게 뭐지 이게 뭐지 하면서 전 그냥 DC를 Find만 해 봤었거든요

    시간을 좀 가지고 들여다봐야하는데 히~

    고장난우주선님 덕분에 좋은 정보를 얻고 있습니다
    이렇게 티스토리까지 왕림하셔서 알려주시다니 ㅠㅠ

    더구나 오늘은 주말! 일요일!

    놀고있는 제가 살짝 부끄럽습니다 *-_-*

    남은 주말 잘 보내시고, 힘차게 다음주 시작해 보아요~

2009년 10월 12일 월요일

[PIC16F882/883/884/886/887] STATUS: STATUS REGISTER

회사에서 이번 프로젝트를 진행하는데 있어서 애를 많이 먹었다. 마이컴도, 컴파일러도 처음 접하는 것이었는데 갑자기 어셈까지 들이대니까...

 

정신줄 놓고싶은 생각이 정말 많이 들었다. 어찌어찌 지금까지 온것이 용하다. 스트레스 진짜 많이 받았는데.... ㅎㅎ

 

뭐 어쨋든, 아래 캡쳐는 PIC16F882/883/884/886/887의 Datasheet에서 Status register부분이다.

 

 

어셈을 보니 프로그램의 절반이 이 레지스터와 관련되어 있었다. 자꾸 Carry가 있는가 묻고, Zero냐 아니냐를 물어댔다.

 

if만 쓰다 BTFSS와 BTFSC를 보니 헤롱헤롱~ PIC은 원래 잘 안쓰는 마이컴인지 자료도 별로 없고 ;;; 아울~

 

이런것도 있구나 하고 안 것에 의의를 -_-...

2009년 10월 7일 수요일

equ란 무엇인가? 어떻게 쓰는가?

PIC을 다뤄본 적이 없는데 일은 해야하는 상황이라 많이 난감했다. 책도 없고 DataSheet는 너무 많기만 하고... 웹으로 얻을 수 있는 자료도 속 시원하게 이해되지 않았다.

 

그랬는데 네이버 카페 <Microchip PIC 사용자 커뮤니티> 라는 곳을 통해 많은 것을 얻을 수 있었다.

 

답답했던 equ에 대한 질문의 답을 들을 수 있었다.

 

아는 바를 설명해 보자면 아래와 같다.

 

equ란 c언어에서 말하는 define과 같은 뜻이다.

 

우선

 

a    equ    .100

라고 되어있다고 치자.

 

이것은 #define a 100라는 뜻이다. '.'이 의미하는게 십진수라 한다.

 

오호 쉽네?

 

그러다가 난관에 봉착했다.

 

b    equ   -.50

이건 뭘까. '.'앞에 '-'가 붙어있다.

 

그럼 #define b -50 이 되는건가?

 

아니다. 어셈에서 음수는 지원하지 않기 때문에 그것은 '보수'의 의미가 된다.

 

다시말해 #define b 256-50 이 되는 것이다.

 

놀라운 어셈의 세계 -_-;;;

 

더 궁금하다면 MPLAB IDE를 설치했던 폴더 내에 MPASM Suite\hlpMPASMAsm.chm이라는 파일을 보라고 친절히 알려주셨다...만 아직 확인은 못해보고 있다. 귀차니즘.

 

어찌되었든, 이렇게 알아가는 건 시간이 지나서도 잊어버리지 않을 것 같다.

PIC16F882/883/884/886/887

PIC16F883.pdf

PIC16F882/883/884/886/887

 

PIC 계열 DataSheet는 처음 봤다. 어셈 명령어들이 생소했는데 지금은 많이 익숙해졌다. 여전히 Bank는 알쏭달쏭...