C, MPLAB X (IDE와 IPE 모두)를 사용하고 PICKit 3을 사용하여 PIC 18F4550을 시작하려고합니다. 하나의 LED가 깜박이고 문제가 있지만 동시에 하나 이상의 LED를 깜박이면 작동하지 않습니다.PIC 18F4550을 사용하여 3 개의 LED가 깜박임
질문 끝에 전체 코드를 게시합니다. 그때까지, 나는 약간의 질문을 좀 더 분명하게하기 위해 의사 코드를 쓸 것이다.
내가 각, 당신은 분명히 당신은 모든 LED가 켜져 있고 끌 것으로 기대
loop{
output1 = 1;
output2 = 1;
output3 = 1;
output4 = 1;
delay();
output1 = 0;
output2 = 0;
output3 = 0;
output4 = 0;
delay();
}
뭔가를 입력하려는 칩의 출력 핀에 부착 된 4 개의 LED를 점멸 할 가정 동시에. 그러나, 나는 output4에 연결된 LED 만 깜박이고 나머지는 꺼져있는 것으로 나타났습니다. 그래서 나는
loop{
output1 = 1;
output2 = 1;
output4 = 1;
output3 = 1;
delay();
output1 = 0;
output2 = 0;
output4 = 0;
output3 = 0;
delay();
}
결과, 출력 3에 부착 된 LED 만 깜박 것 같은
로 출력 핀의 순서를 뒤집기 시도하고, 나머지는 해제 상태를 유지합니다.그래서 어떻게 든 예상대로 코드가 순차적으로 실행되지 않습니다. 누구든지 이에 대한 설명과 가능한 해결책을 제공해 주시겠습니까?
고맙습니다.
여기 이것은 LATCH 문제가 될 수있는 전체 코드를
#include <xc.h>
#include <p18f4450.h>
#pragma config FOSC = HS
#define outRed PORTBbits.RB0
#define outBlue PORTBbits.RB1
#define outYellow PORTBbits.RB2
#define outGreen PORTBbits.RB3
#define _XTAL_FREQ 10000000
void delay(unsigned int);
void main(void) {
TRISBbits.TRISB0 = 0;
TRISBbits.TRISB1 = 0;
TRISBbits.TRISB2 = 0;
TRISBbits.TRISB3 = 0;
while(1) {
outRed = 1;
outGreen = 1;
outBlue = 1;
outYellow = 1;
delay(1000);
outRed = 0;
outGreen = 0;
outBlue = 0;
outYellow = 0;
delay(1000);
}
}
void delay(unsigned int delayInput) {
unsigned int mul = delayInput/50;
unsigned int count = 0;
for (count = 0; count <= mul; count ++)
__delay_ms(50);
}
이것은 나를 위해 아주 잘되었습니다! 고마워요! 그러나이 문제의 이유가 있습니까? PIC의 아키텍처에서? 왜 이런 일이 일어나는거야? – dou2abou
PORTx는 디지털 입력 버퍼에서 읽는 반면 LATx는 출력 래치에 기록합니다. 어떤 경우에는 디지털 입력 버퍼에 LATx 레지스터로 출력하려고하는 전압이 표시되지 않습니다 (예 : 핀 중 하나가 아날로그 입력으로 설정된 경우 0으로 읽음). 비트 연산이 8 비트 읽기 => 수정 => 쓰기로 구현된다는 사실과 결합하면 PORTx 결과가 놀랄 수 있습니다. 추신 PIC18F4550의 핀 중 일부는 ADCON1 레지스터를 사용하여 아날로그 또는 디지털 입력으로 구성 할 수 있습니다. –