마이크로 컨트롤러를 프로그래밍했다면, 주어진 레지스터의 선택 비트를 조작하거나 모든 것에 바이트를 쓰는 것에 익숙 할 것입니다. 예를 들어 C를 사용하는 PIC에서 모든 비트를 설정하기 위해 PORTA에 전체 바이트를 쓸 수도 있고 PORTAbits.RA #에 주소를 지정하여 단일 비트를 설정할 수도 있습니다. 나는이 구조체/공용체가 정의 된 방식을 모방하려고 노력 중이므로 프로그램에서 변수를 사용하여 동일한 작업을 수행 할 수있다. 특히, 때 마이크로 컨트롤러는 내가 이전보다 우아이러한 레지스터와 같은 구조체의 모든 필드를 처리하는 방법은 무엇입니까?
REGISTER = 0;
분명히
REGISTERbits.BIT0 = 0;
REGISTERbits.BIT1 = 0;
...
//or
REGISTERbits = (0,0,0,0,0,0,0,0);
등
대처럼 자신이 뭔가 정의 레지스터를 재설정 할 수있게하려면 켜집니다 줄 간격을 많이 절약 할 수 있습니다. 각각의 모든 레지스터 ...
#ifndef __18F2550_H
#define __18F2550_H
....
extern volatile near unsigned char LATA;
extern volatile near struct {
unsigned LATA0:1;
unsigned LATA1:1;
unsigned LATA2:1;
unsigned LATA3:1;
unsigned LATA4:1;
unsigned LATA5:1;
unsigned LATA6:1;
} LATAbits;
을 여러 바이트 레지스터는 Registerbits에 대한 구조체의 조합을 사용 : 마이크로 컨트롤러의 헤더 파일은 다음과 같이 그것을 않습니다. 내 초기화/선언은 메인 소스 파일이 아닌 헤더에 있기 때문에, 나는 통근 오프 근처 광산 하락했습니다
volatile unsigned char InReg;
volatile struct{
unsigned NSENS:1; //One magnetic sensor per direction
unsigned SSENS:1;
unsigned ESENS:1;
unsigned WSENS:1;
unsigned YBTN:1; //One crosswalk button input per axis
unsigned XBTN:1; //(4 buttons tied together each)
unsigned :2;
} InRegbits;
을 ...하지만 컴파일에 InReg 및 InRegbits는 두 개의 분리 된 위치로 정의된다 inRegbits를 변경하려면 InReg에 쓸 수 없습니다. 이것을 변경하여 어떻게 작동합니까? 특별한 마이크로 컨트롤러 레지스터이기 때문에 내가 복사하려고하는 것은 작동합니까? 어떤 도움
당신은 당신 자신의 질문에 대답했다고 생각합니다 : 노조 – Scavokovich