2014-12-05 4 views
0

PIC 마이크로 컨트롤러에는 간단한 명령어 세트 형식이 있습니다. 각 명령어는 정확히 14 비트 길이이며 서로 다른 비트 길이의 다양한 숫자로 구성됩니다.숫자를 비트 세트로 묶습니다 (파이썬, 비트 연산)

나는이 모든 입력을 받아 들여 해당 명령을 나타내는 숫자를 만들 수있는 함수를 작성하려고합니다.

def fileRegOp(opcode, d, f): 
    out = opcode << 13 
    out = out | d << 7 
    out = out | f 
    return out 

print "FIN:", bin(fileRegOp(1,True,15)) 

그것은 출력 FIN

:

Instruction set format

이것은 내가 작업을 얻기 위해 노력 해왔다 무엇인가를 제외하고 좋아 보인다 0b10000010001111

비트가 잘못되었습니다. 루프를 포함 SO에 0b00000111111000

내가 본 솔루션은 주위의 비트를 플립,하지만 난 더 나은 방법이있을거야 :

FIN : 나는 그것을 읽고한다고 생각합니다.

이 기능을 작성하는 가장 우아한 방법은 무엇입니까? 명령어 세트에

더 많은 세부 사항 : Datasheet 페이지 121,122

답변

5

당신의 변화가 잘못을 참조하십시오.

옳지 않은 최상위 비트의 인덱스로 이동하고 있습니다. 각 필드의 맨 아래 (가장 오른쪽) 비트의 인덱스로 이동해야합니다.

그래서 그것이 있어야 :

def fileRegOp(opcode, d, f): 
    return (opcode << 8) | (d << 7) | f 

이주는, 왼쪽 패딩 0을 추가 할 수있는 몇 가지 편집과 : 물론

>>> bin(fileRegOp(1,True,15)) 
'0b00000110001111' 

, 또한 제한-확인 sensical 수 있습니다 인수.