Firmsys RFID Demo Kit와 atmaga128로 통신 연습중인데요
Tag에 기록된 hax값을 계속 더해서 총합을 LCD에 출력하는 시킬려구 하는데요
Tag 인식이랑은 잘 하는데 문제는 Tag 인식을 안시켰는데도 부저가 울리면서 쓰레기 값이 수신되네요...
그리고 total값이 32767 이상되면 -32767로 출력이 되는데요
데이터 타입을 바꾸어도 계속 같은 결과가 나옵니다 ㅠ.ㅠ
이 두가지 문제를 어떻게 해결해야 할지... 가르침 부탁드립니다.
#include <mega128.h>
#include <stdio.h>
#include <string.h>
#include <delay.h>
#include <math.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
flash char SendData[5] = {0x05, 0x02, 0x20, 0x00, 0xff}; // Read single block
unsigned char rfid_rx[7];
void Rs232_init(void)
{
DDRE = 0xFE;
UCSR0A = 0x00;
UCSR0B = 0x18;
UCSR0C = 0x06;
UBRR0H = 0;
UBRR0L = 8;
}
void Putch(char data)
{
while(!(UCSR0A & 0x20));
UDR0 = data;
}
void USART_SendData(void) //명령어 코드를 보내는 함수
{
int i;
for(i=0; i<5; i++)
Putch(SendData[i]);
}
char Getch(void)
{
while(!(UCSR0A & 0x80));
return UDR0;
}
void LCD_port()
{
PORTA=0xff;
DDRA=0xFF;
PORTB=0x00;
DDRB=0xFF;
PORTD=0x00;
DDRD=0xff;
ACSR=0x80;
}
void main(void)
{
int i, j;
unsigned int value, won, total;
unsigned char line1[10], line2[10];
Rs232_init();
LCD_port();
lcd_init(16); // LCD module initialization
while (1)
{
USART_SendData();
// Read single block 입력
for(i=0;i<7;i++)
{
rfid_rx[i]=Getch();
if(rfid_rx[i]==0xff)
break;
}
if(rfid_rx[0] == 7) // Tag Read
{
for(i=2, j=6; i<6; i++, j-=2)
{
value = rfid_rx[i]*pow(16,j); // Read single block을 10진화
won += value;
}
total += won;
sprintf(line1, "%d", won);
}
else if(rfid_rx[0] == 5 || rfid_rx[0] == 0xff )
{
won = 0;
sprintf(line1, "%d", won);
}
value = 0;
sprintf(line2, "%d", total);
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts(line1);
lcd_gotoxy(0,1);
lcd_putsf("Total : ");
lcd_gotoxy(8,1);
lcd_puts(line2);
delay_ms(300);
}
}
{
rfid_rx[i]=Getch();
if(rfid_rx[i]==0xff)
break;
}
여기서 0xff가 들어오면 데이터 받기 끝인가요?
if(rfid_rx[0] == 7) // Tag Read
{
for(i=2, j=6; i<6; i++, j-=2)
{
value = rfid_rx[i]*pow(16,j); // Read single block을 10진화
won += value;
}
total += won;
sprintf(line1, "%d", won);
}
else if(rfid_rx[0] == 5 || rfid_rx[0] == 0xff )
{
won = 0;
sprintf(line1, "%d", won);
}else{
// 쓰레기값 일때 처리
}
이 구문에서 else{}를 추가해서 쓰레기 값을 처리하면 될듯하네요.