Autor Tema: conversion C a pbp  (Leído 1828 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado hexmotion

  • PIC10
  • *
  • Mensajes: 22
conversion C a pbp
« en: 30 de Diciembre de 2005, 16:18:00 »
Hol mis panas;
necesito ayuda con un codigo, se trata de convertir una rutina de C a pbp, la rutina calcula el CRC de un string la de C si funciona, pero mi conversion aun no
esta es la de C
codigo c
#define uint16_T unsigned int
uint16_t crc16(uint16_t crc,uint8_t  *ptr, int lenght)
{
        auto uint16_t i;
        while (lenght--)
                {

                   crc = crc^(uint16_t)*ptr++;

                       for(i=0;i<8;i++)
                       {
                        if(crc & 0x0001)
                           crc=(crc>>1)^0x8408;
                        else
                                crc>>=1;
                       }

                }
       return crc;
}
y este es pbp

for k=0 to lenght
       crc = crc ^ ptr_data[k] << 8
     FOR j = 0 TO 7
       IF (crc & $0001) THEN
       crc = (crc >> 1) ^ $8408
    ELSE
       crc = (crc >> 1)
     ENDIF
   
   NEXT j
  next k

  RETURN
Como podran ver segun yo son iguales, pero me dan resultados diferentes....
por ejemplo para el string hola la de C me da $2806 y pbp $6e6e



Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: conversion C a pbp
« Respuesta #1 en: 03 de Enero de 2006, 17:01:00 »
No se si esto es lo que buscas:


" ------------CRC_CCITT-------------------------------------

TEMP     VAR BYTE  " TEMP BYTE
J      VAR BYTE  " FOR NEXT LOOP
CRC      VAR WORD  " CRC WORD

DAT1  VAR BYTE  " BYTES TO CHECK CRC ON
DAT2  VAR BYTE
DAT3  VAR BYTE
DAT4  VAR BYTE
DAT5  VAR BYTE        " CRC HIGH BYTE FOR PACKET
DAT6  VAR BYTE        " CRC LOW BYTE FOR PACKET


CRCPOLY     CON $1021  " CRC-CCITT POLYNOMINAL

"-------------------------------------------------------------

START:

SERIN2 PORTB.0,16468,[DAT1,DAT2,DAT3,DAT4,DAT5,DAT6]    "RCV DATA PACKET

GOSUB CHECK_CRC                 " CHECK CRC ON RCV PACKET

IF CRC <> 0 Then START          " IF CRC BAD THEN START

"YOUR PROGRAM HERE

" SUBROUTINE FOR CHECKING CRC IN RCV BYTES

CHECK_CRC:
CRC = 0
TEMP = DAT1
GOSUB CALC_CRC
TEMP = DAT2
GOSUB CALC_CRC
TEMP = DAT3
GOSUB CALC_CRC
TEMP = DAT4
GOSUB CALC_CRC
TEMP = DAT5
GOSUB CALC_CRC
TEMP = DAT6
GOSUB CALC_CRC
RETURN

" SUBROUTINE FOR CALCULATION CRC IN VAR TEMP

CALC_CRC:
CRC = TEMP * 256 ^ CRC
FOR J = 0 to 7
IF CRC.15 = 0 THEN SHIFT
CRC = CRC * 2 ^ CRCPOLY
GOTO NXT
SHIFT: CRC = CRC * 2
NXT:    NEXT
RETURN
END



Saludos,
Ricky