M
member_tdh
Guest
Zdravím všetkých členov!
V mojom projekte, chcem poslal dát medzi 2 AVR cez RS232.I pomocou CRC algoritmus pre opravené údaje, ale môj program beží zle.Som nerozuměl detail o CRC metóda zatiaľ.I po mojom kód dostal a prevodovka, pomôžte mi niekto pls ...!?
Ďakujeme všetkým priateľom!
/ / Toto
je Transmit Data Rutinné:
/************************************************* ****
Čip typu: ATmega8515
Program typu: Aplikácie
Hodinová frekvencia: 8.000000 MHz
Memory Model: Malé
SRAM Vonkajšie rozmery: 0
Data Stack veľkosť: 128
************************************************** *** /
#
Include <mega8515.h>
#
Include <delay.h>
#
Include <stdlib.h>
/ /
Standard Input /
Output funkcie
#
Include <stdio.h>
#
Define BYTE unsigned char
#
Define WORD unsigned int
void Init ();
BYTE DiemGui, ViTriLed;
WORD ms;
bit bTransToPc = 0;
preruąeniu [TIM1_OVF] void timer1_ovf_isr (void)
(
TCNT1H = 0xFF; / / prerušiť 1ms
TCNT1L = 0x83;
if ( msek == 1000)
(
ms = 0;
if ( DiemGui> 10) DiemGui = 5;
if ( ViTriLed> 6) ViTriLed = 1;
bTransToPc = 1;
/ / Putchar ( 'B');
/ / Putchar (DiemGui);
/ / Putchar (ViTriLed);
)
)void Init ()
(
PORTA = 0xFF;
DDRAM = 0xFF;
PORTB = 0xFF;
DDRB = 0xFF;
PORTC = 0xFF;
DDRC = 0xFF;
PORTD = 0xFF;
DDRD = 0xFF;
PORTE = 0xFF;
DDRE = 0xFF;
/ / Timer / Counter 1 inicializace
/ / Hodiny zdroj: Systém Hodiny
/ / Hodiny hodnota: 125.000 kHz
/ / Mód: Normálny top = FFFFh
/ / OC1A výstup: Discon.
/ / OC1B výstup: Discon.
/ / Hluk Canceler:
Off/ / Vstup na zachytávání Padajúce Edge
/ / Timer 1 Pretečenie Přeruąovací: On
/ / Vstupné Zachytiť Přeruąovací:
Off/ / A Porovnať zápasu Přeruąovací:
Off/ / B Porovnať zápasu Přeruąovací:
OffTCCR1A = 0x00;
TCCR1B = 0x03;
TCNT1H = 0x00;
TCNT1L = 0x00;
ICR1H = 0x00;
ICR1L = 0x00;
OCR1AH = 0x00;
OCR1AL = 0x00;
OCR1BH = 0x00;
OCR1BL = 0x00;
/ / Timer
/ Counter (s) Přeruąovací
inicializácie
TIMSK = 0x80;
/ / USART inicializace
/ / Parametre komunikácie: 8 Data, 1 Stop, No Parity
/ / USART prijímač: On
/ / USART Transmitter: On
/ / USART Režim: Asynchrónny
/ / USART Baud kurzu: 9600
UCSRA = 0x00;
UCSRB = 0x18;
UCSRC = 0x86;
UBRRH = 0x00;
UBRRL = 0x33;
/ / Global umožní narušili
# Asm ( "sei")
)
/ / Určite vaše globálne premenné tu
void main (void)
(
BYTE b1, b2, b3, b4, kontrolné;
Init ();
ViTriLed = 1;
DiemGui = 5;while (1)
(
b1 = (DiemGui% 10) 0 X30;
b2 = (DiemGui/10) 0 X30;
b3 = (ViTriLed% 10) 0 X30;
b4 = (ViTriLed/10) 0 X30;
checksum = b1 ^ b2 ^ b3 ^ b4;
putchar ( 'B');
putchar (b1);
putchar (b2);
putchar (b3);
putchar (b4);
putchar (kontrolné);
);
)/ / Toto
je Received Data Rutinné:
BYTE pufra [10];
void main ()
(
BYTE i, crc8;
Init ();
/ / Dostal 5-Bytes
for (i = 0; i <5; i ) crc8 = crc8_calc (buffer, 5);
while (1)
()
)BYTE crc8_calc (BYTE * byt, WORD veľkosť)
(
/ * Vypočítajte CRC-8 hodnotu; používa CCITT-8 polynómu,
vyjadrené ako x ^ 8 x ^ 5 x ^ 4 1 * /
BYTE crc = (BYTE) 0xff;
WORD index;
BYTE b;
pre (index = 0; index <size; index )
(
crc ^ byt = [index];
u (b = 0, b <8, b)
(
if (crc & 0x80)
crc = (crc <<1) ^ 0x31;
iné
crc = (crc <<1);
)
)
návrat crc;
)
Pls niekto vysvetliť, ako je CRC8 práce ...?
Vďaka všetkým!
V mojom projekte, chcem poslal dát medzi 2 AVR cez RS232.I pomocou CRC algoritmus pre opravené údaje, ale môj program beží zle.Som nerozuměl detail o CRC metóda zatiaľ.I po mojom kód dostal a prevodovka, pomôžte mi niekto pls ...!?
Ďakujeme všetkým priateľom!
/ / Toto
je Transmit Data Rutinné:
/************************************************* ****
Čip typu: ATmega8515
Program typu: Aplikácie
Hodinová frekvencia: 8.000000 MHz
Memory Model: Malé
SRAM Vonkajšie rozmery: 0
Data Stack veľkosť: 128
************************************************** *** /
#
Include <mega8515.h>
#
Include <delay.h>
#
Include <stdlib.h>
/ /
Standard Input /
Output funkcie
#
Include <stdio.h>
#
Define BYTE unsigned char
#
Define WORD unsigned int
void Init ();
BYTE DiemGui, ViTriLed;
WORD ms;
bit bTransToPc = 0;
preruąeniu [TIM1_OVF] void timer1_ovf_isr (void)
(
TCNT1H = 0xFF; / / prerušiť 1ms
TCNT1L = 0x83;
if ( msek == 1000)
(
ms = 0;
if ( DiemGui> 10) DiemGui = 5;
if ( ViTriLed> 6) ViTriLed = 1;
bTransToPc = 1;
/ / Putchar ( 'B');
/ / Putchar (DiemGui);
/ / Putchar (ViTriLed);
)
)void Init ()
(
PORTA = 0xFF;
DDRAM = 0xFF;
PORTB = 0xFF;
DDRB = 0xFF;
PORTC = 0xFF;
DDRC = 0xFF;
PORTD = 0xFF;
DDRD = 0xFF;
PORTE = 0xFF;
DDRE = 0xFF;
/ / Timer / Counter 1 inicializace
/ / Hodiny zdroj: Systém Hodiny
/ / Hodiny hodnota: 125.000 kHz
/ / Mód: Normálny top = FFFFh
/ / OC1A výstup: Discon.
/ / OC1B výstup: Discon.
/ / Hluk Canceler:
Off/ / Vstup na zachytávání Padajúce Edge
/ / Timer 1 Pretečenie Přeruąovací: On
/ / Vstupné Zachytiť Přeruąovací:
Off/ / A Porovnať zápasu Přeruąovací:
Off/ / B Porovnať zápasu Přeruąovací:
OffTCCR1A = 0x00;
TCCR1B = 0x03;
TCNT1H = 0x00;
TCNT1L = 0x00;
ICR1H = 0x00;
ICR1L = 0x00;
OCR1AH = 0x00;
OCR1AL = 0x00;
OCR1BH = 0x00;
OCR1BL = 0x00;
/ / Timer
TIMSK = 0x80;
/ / USART inicializace
/ / Parametre komunikácie: 8 Data, 1 Stop, No Parity
/ / USART prijímač: On
/ / USART Transmitter: On
/ / USART Režim: Asynchrónny
/ / USART Baud kurzu: 9600
UCSRA = 0x00;
UCSRB = 0x18;
UCSRC = 0x86;
UBRRH = 0x00;
UBRRL = 0x33;
/ / Global umožní narušili
# Asm ( "sei")
)
/ / Určite vaše globálne premenné tu
void main (void)
(
BYTE b1, b2, b3, b4, kontrolné;
Init ();
ViTriLed = 1;
DiemGui = 5;while (1)
(
b1 = (DiemGui% 10) 0 X30;
b2 = (DiemGui/10) 0 X30;
b3 = (ViTriLed% 10) 0 X30;
b4 = (ViTriLed/10) 0 X30;
checksum = b1 ^ b2 ^ b3 ^ b4;
putchar ( 'B');
putchar (b1);
putchar (b2);
putchar (b3);
putchar (b4);
putchar (kontrolné);
);
)/ / Toto
je Received Data Rutinné:
BYTE pufra [10];
void main ()
(
BYTE i, crc8;
Init ();
/ / Dostal 5-Bytes
for (i = 0; i <5; i ) crc8 = crc8_calc (buffer, 5);
while (1)
()
)BYTE crc8_calc (BYTE * byt, WORD veľkosť)
(
/ * Vypočítajte CRC-8 hodnotu; používa CCITT-8 polynómu,
vyjadrené ako x ^ 8 x ^ 5 x ^ 4 1 * /
BYTE crc = (BYTE) 0xff;
WORD index;
BYTE b;
pre (index = 0; index <size; index )
(
crc ^ byt = [index];
u (b = 0, b <8, b)
(
if (crc & 0x80)
crc = (crc <<1) ^ 0x31;
iné
crc = (crc <<1);
)
)
návrat crc;
)
Pls niekto vysvetliť, ako je CRC8 práce ...?
Vďaka všetkým!