전기과 졸작중인데 진짜 C프로그래밍때문에 진도가안나감
C언어 기본지식도 없는상태라 진짜 몇주째 해매고있다
댓글로 이메일남겨주면 연락할께 크게는못해도 사례는할게 문상같은걸루
RFID 리더기이용하여 상품가격 텍스트로 출력하는거고 간단한거라 C언어공부좀하신분들이라면 쉽게 해석할수 있을꺼다
댓글로 이메일좀 남겨줘 ㅠㅠ 진짜도움청할곳이 여기밖에없다
void set_UART(void); //통신포트설정
void RFID_WRITE(void); // 정보 보내기
void RFID_READ(void); // 정보받기
while(1)
{
RFID_WRITE(); // 정보보내기
RFID_READ(); // 정보받기
if(SUM_4==0x46) // 0x46 정보가 오면 무한반복
{
OPEN(); // 맞으면 열림
delay_ms(2000);
CLOSE(); // 닫힘
}
SUM_4=0x00; //초기화
void set_DDR(void)
{
DDR?=0xFF;
}
void set_UART(void)
{
UCSR0A = 0x00;
UCSR0B = 0x18;
UCSR0C = 0x86;
UBRR0H = 103 >> 8; // 103 통신속도 9600.16M
UBRR0L = 103 & 255;
UCSR1A = 0x00;
UCSR1B = 0x18;
UCSR1C = 0x86;
UBRR1H = 103 >> 8;
UBRR1L = 103 & 255;
}
void RFID_WRITE(void)
{
while(!(UCSR1A & 0x20)); UDR1 = 0x05; // 1번에서 5번의 신호를 받음
while(!(UCSR1A & 0x20)); UDR1 = 0x26;
while(!(UCSR1A & 0x20)); UDR1 = 0x01;
while(!(UCSR1A & 0x20)); UDR1 = 0x00;
while(!(UCSR1A & 0x20)); UDR1 = 0xFF;
}
void RFID_READ(void)
{
while(!(UCSR1A & 0x80)); SUM_R = UDR1; //2번에 받음
if(SUM_R==0x0C)
{
while(!(UCSR1A & 0x80)); SUM_R = UDR1;
while(!(UCSR1A & 0x80)); SUM_R = UDR1;
while(!(UCSR1A & 0x80)); SUM_R = UDR1;
while(!(UCSR1A & 0x80)); SUM_4 = UDR1;
while(!(UCSR1A & 0x80)); SUM_R = UDR1;
while(!(UCSR1A & 0x80)); SUM_R = UDR1;
while(!(UCSR1A & 0x80)); SUM_R = UDR1;
while(!(UCSR1A & 0x80)); SUM_R = UDR1;
while(!(UCSR1A & 0x80)); SUM_R = UDR1;
while(!(UCSR1A & 0x80)); SUM_R = UDR1;
while(!(UCSR1A & 0x80)); SUM_R = UDR1;
}
if(SUM_R==0x05)
{
while(!(UCSR1A & 0x80)); SUM_R = UDR1; // 3번째
while(!(UCSR1A & 0x80)); SUM_R = UDR1;
while(!(UCSR1A & 0x80)); SUM_R = UDR1;
while(!(UCSR1A & 0x80)); SUM_R = UDR1;
}
}
안돼. 해석해줄 생각 없어. 돌아가.
void set_DDR(void) 함수는 DDR? 을 0xff 값으로 초기화 한것 void set_UART(void)도 마찬가지로 각각 초기화 한것 그리고 변수를 만든건지 dll로 가져온건지 모르겠지만 void RFID_WRITE(void)에서 UDR1 = 16진수값은 각각의 변수인지 뭔지가 값을 받을때마다 전기적으로 무슨 신호를 보내서 UDR1하나의 변수로 다양한 16진수 값들을 받아도 괜찮은 것 같네 그리고 while(!(UCSR1A & 0x80)); 은 ucsr1a란 변수가 0x80일때까지 루프를 돌아 0x80이 들어오면 while이 끝나고 sum_r = udr1 을 실행
그리고 저것만 올리면 제대로 해석이 안돼지 ...... 원하는게 무엇?
sum_r 이값이 뭘뜻하는거야?? 진짜 C언어에대해몰라서그래 그리고 가능하면 쫌물어볼께있어서그런데 이메일이라도알려줄수있나여???ㅠㅠ
여기는 임베디드조차 경험없는 사람이 대부분이고, MCU쪽은 더더욱 문외한이 많아. 위에도 DLL 찾고 있는거 봐라. 물론 배우면 금방 잘하겠지만, 기본적으로 여기도 번지수를 잘못 찾은거야. 차라리 네이버쪽 AVR 카페 같은데 가서 물어봐.
그리고 SUM_R 이 뭔지 알게 뭐야. 정의도 이것만 보곤 알수가 없는데. header 중에 정의해놓은거 있을거니까 그거 찾아서 확인해. 보나마나 입출력 포트겠지만. 0x80이니까 UCSR1A 쪽에 4번째 포트에 신호가 오면 그대로 UDR1값을 넘기는거니, 기본적으로 출력이긴 하겠네. 이건 디바스이 입출력 봐가면서 확인해야지, 소스만 가지고는 쉽게 이해못하지 뭐. 모르는 변수 있으면 헤더부터 찾아라.
잘 모르는건 맞긴 한데 함수들이 직접 만든건지 어디 dll에서 가져온건지 내가 어떻게 알아 그니까 모른다고 했지 그리고 sum_r이 뭔지 저거만 보고 어떻게 알아 직접 돌려봐야 알지
ㄴ 모른다고 뭐라고 그러는건 아님. 그런데 MCU에서는 DLL 쓸일은 전혀 없고, 임베디드급에서는 윈도우CE 말고는 DLL을 사용할 언어자체가 없음. 그걸 모르는게 무작정 나쁘다는게 아님. 하는 사람만 아는건데 모를수도 있지. 난 단지 저기서 DLL을 연상하는 사람이 답을 할 정도로 이곳은 저런거랑 인연없는 사람이 많다는 뜻일 뿐임.
사실 일반 소프트웨어 프로그래머가 임베디드쪽 배우면 더 잘할 가능성이 높음. 하드웨어라는거 자체에 대한 이해만 어느정도 있으면. 그런데 그걸 배우고 나서 지금 답변을 보면, 솔직히 부끄러워질거임. DLL 언급을 할 이유가 없거든. 애초에 전혀 끼어들 여지가 없거든. 마치 유치원생 덧셈 뺄셈 가르치는데 미적분 설명하려고 하는거랑 비슷함. 자기가 미적분 연구의 최고 권위자라고 한들, 유치원생들에게 그걸 가르치려 들었다면, 그건 자기가 얼마나 잘났건 따지고보면 부끄러워 할 일이잖아. 정확한 비유는 좀 아니지만, 대강 그정도의 관계라고 보면 됨.
MCU계열이나 임베디드OS 급 다루는 쪽은 기본적으로 '로직'이 가장 중요한 부분임. 프로그래밍적인 고급기술은 일정수준만 되면, 그다지 필요하지 않은데, 이를 알맞게 움직여야할 '로직'은 절대적으로 중요함. 임베디드OS 정도 되면 그렇게 단순하지만은 않지만, MCU쪽은 그 로직의 비중이 훨씬 커지고, 해당 MCU 칩에 대한 하드웨어적인 이해가 또 중요함.