comandos em HEX

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

comandos em HEX

Mensagempor cdaonil » 26 Out 2009 07:38

SRs. Estou com dificuldades pra enviar comandos em HEX para Rs232, basicamente nao quero usar mais em Assembly , uso CCS.
em asm seria assim:
DT 0X04, 0X09, 0XFD, 0X44, 0X0D, 0XE3 0xCheck Sum .
|_tamanho do comando

No Css ja usei o Putc , fputc , puts etc.. estao dando erro de Stream e nao sei o que significa nem como resolver
A principio estou usando 9600 baud para visualizar no Siow (hiperterminal), mais no final será em 14400. (manchester).

Srs poderiam me dá uma luz , pois sao varios comandos a serem enviados com CS no final.
Mais uma Vez Obrigado.
cdaonil
Bit
 
Mensagens: 8
Registrado em: 15 Set 2009 14:25

Mensagempor ze » 26 Out 2009 10:43

Parabens por tua decisão básica, mas não posso dizer o mesmo sobre o ccs e suas funções malucas. Bom, num “compilador” C veja a sugestão de como faria (não sem antes setar o hw do uc):
Código: Selecionar todos
...
unsigned char const dado={0X04, 0X09, 0XFD, 0X44, 0X0D, 0XE3}; //tirei o chsum da tabela pois ele vai ser calculado na função
...
unsigned char chs=0;
for (i=0;i<6;i++) { //tamanho do comando. se o chsum tiver junto, some 1 --- uc 8 bits gosta + de 8.
chs+=dado[i];
TXREG=dado[i]; //depende do uc   
while(!TRMT); //depende do uc
}
TXREG=chs; //envia chsum   
while(!TRMT); //depende do uc
...


Auto explicativo para um mediano programador e mediano conhecedor do circuito do uc e o tamanho do cód a ser gravado ficaria o mesmo do que feito masoquistamente em asm.
Talvez seja melhor colocar o chsum como constante no fim da série mesmo.
Pra ver em hexa no pc eu usava um tal de docklight
abç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor vtrx » 26 Out 2009 11:32

cdaonil,a sua escolha ja ta te dando trabalho com uma simples função,prepare-se porque não vai conseguir programar em C com a eficiência do ASM,terá que achar uma 'alternativa' em compiladores ou uma função semelhante.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2240
Registrado em: 20 Abr 2008 21:01

Mensagempor cdaonil » 26 Out 2009 12:07

:!:
Obrigado pela informação, mais agora me deparei com 2 erros , nao sei se por causa do compilador ccs , usando 16f628a.

#include <16F628A.h>
#fuses HS, NOWDT, NOLVP, NOBROWNOUT, NOPROTECT, PUT
#use delay(clock=40000000)
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1, stream=PC)


//Transmissão
#BYTE TXREG = 0X19
#BIT TRTM = PORTB.2

void main()

{
unsigned char const dado=(0X04, 0X09, 0XFD, 0X44, 0X0D, 0XE3); //coloquei parenteses
unsigned char chs=0;
char i;
for (i=0;i<6;i++) //tamanho do comando. se o chsum tiver junto, some 1 --- uc 8 bits gosta + de 8.
chs+=dado[i]; // --------> nao aceita chaves
TXREG=dado; // ----------->configurei ok
while(!TRMT); // -------------> quando configuro da erro na 1ª função main.

TXREG=chs; //envia chsum
while(!TRMT); //depende do uc
}
}


Nao sei se usando o mickroC funcionaria.. mais já que estou no CCs o geito e fazer funcionar nele mesmo.
cdaonil
Bit
 
Mensagens: 8
Registrado em: 15 Set 2009 14:25

Mensagempor ze » 26 Out 2009 15:27

tá faltando “{“

isso num tem muito a ver:
//Transmissão
#BYTE TXREG = 0X19 ---> não sei. É assim que o ccs define os regs internos? (não responda não quero saber). 0x19 parece não ser o end do txreg
#BIT TRTM = PORTB.2 ---> TRTM não é bit de porta! O que + se aproximaria é TXSTA.1

uma nano aula sobre os registros deste uC:
TRMT é o bit 1 de TXSTA (status) que indica buffer vazio. Ou seja o dado já saiu. Infelizmente não sei (e não quero saber) como seu precioso ccs trata tais registros (deve ser uma função cavalar só pra ler um bit!) Sugiro passar os olhos pelo datashit do pic e no help desta droga do compilador. Abra os 2 e pressione alt-tab. Tente entender como o circuito interno do pic funciona. Depois disto tente programar os registros sem usar os horrores tipo #uses, #fuses & #fucks. Open your mind!!
abç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor cdaonil » 26 Out 2009 17:58

Obrigado Lellis, estou entrando neste mundo do C, ja no asm estou aposentando. Fiquei facinado com as possibilidades de hoje, bluetooth, Gps, Http , usb etc ..em microcontroladores que parti pra essa empreitada, aqui no Rio nao temos cusos de Mikroc só de CCS , porem mesmo assim comprei um curso webaula de SP baseado no Mikroc.. mais video aula já viu né.. E fiz um curso presencial do CCS...Devagar vou parendendo a usar as novas rotinas e esquecer o passado btfsc rp0...
Mais uma vez obrigado.
cdaonil
Bit
 
Mensagens: 8
Registrado em: 15 Set 2009 14:25

Mensagempor aureo.oliveira » 26 Out 2009 20:26

Tente assim:

char dado[6] = {0X04, 0X09, 0XFD, 0X44, 0X0D, 0XE3};
char chs=0;
char i;
for (i=0;i<6;i++)
{
chs+=dado[i];
putc(dado[i]);
}
putc(chs);
//putc(0x0D);

ps: Para receber com gets tem que terminar com 0x0D.
HEHEHEHE!!!!!!
aureo.oliveira
Bit
 
Mensagens: 27
Registrado em: 11 Out 2006 19:28
Localização: Goiânia-Goiás

Mensagempor cdaonil » 27 Out 2009 19:42

:) Agradeço a todos pela ajuda! Esta ultima Rotina funcionou perfeitamente. Vlw.
cdaonil
Bit
 
Mensagens: 8
Registrado em: 15 Set 2009 14:25


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x