Moderadores: 51, guest2003, Renie, gpenga
#define clk P10
#define dado P11
//#define shld P12
P1=0xff;//me lembro vagamente que tive que fazer isso pra não fica preso em 0. (no século passado)
unsigned char lebyte(void)
{
unsigned char i,d=0;
for (i=0;i<8;i++) //8 bits
{
clk=1;//aciona o shift reg
asm"nop";//asm"nop";//talvez + de 1. Um tempinho em 1
clk=0;
d|=P11; //captura o bit
d<<=1;//próximo - desloca em sw
}
return d;
}
tcpipchip escreveu:https://dl.dropboxusercontent.com/u/83554849/BALAS_MENU.pdf
Se quiseres tambem mando o fonte....mas fiz em ASSEMBLY....
Rem ***********************************************************************
Rem * Esta rotina le os 4021, RETORNA EM dado_sensor e dado_selecao
Rem * Parametros: nenhum
Rem * Retorna: dado_sensor, dado_selecao
Rem ***********************************************************************
Sub Rec_4021_sensor_selecao_produto()
Set Stb_4021_sensor_selecao_produto
nop
nop
nop
nop
nop
Reset Stb_4021_sensor_selecao_produto
nop
nop
nop
nop
nop
nop
For Loop_o = 1 To 8
MOV A , {Dado_SELECAO}
MoV C , Sda_4021_sensor_selecao_produto
RLC A
MOV {dado_SELECAO} , A
Reset Scl_4021
NOP
nop
nop
nop
nop
nop
Set Scl_4021
NOP
nop
nop
nop
nop
nop
Next
For Loop_o = 1 To 8
MOV A , {Dado_SENSOR}
MoV C , Sda_4021_sensor_selecao_produto
RLC A
MOV {Dado_SENSOR} , A
Reset Scl_4021
nop
nop
nop
nop
nop
nop
Set Scl_4021
NOP
nop
nop
nop
nop
nop
Next
Waitms 100
End Sub
unsigned char dado=0;
(for i=0;i<8;i++){
dado |= DIN?1:0;
dado<<=1;
CLK = 1;
CLK = 0;
}
= correto. mas note que ela é de uso interno da função que retorna o valor dela. Mas nada impede que voce a coloque por fora (e antes) da função pra ela ser global. aí sim a"pelo que eu vi a variavel "d" é que armazena os valores"
"variavel "d" é que armazena os valores"
= é"a variavel "i" conta até 8 permitindo q D só guarde 8 bits num é?"
= nop é é um microdelay dependente da freq do clock do mc. aliás, a única coisa útil do asm. o mc fica um ciclo de máquina sem fazer nada. nop=no operation. algo como sem função. no nosso caso, cada nop deixaria p.ex. 1uS em alto. seria + pra compatibilizar com dados do datashit do hw"o q significa esse asm"nop"
= maiomeno. switch case é pra voce comparar o valor da variável . p.ex."e no caso, o switch case mesmo serviria para eu poder ler o que estaria nesta variavel né?"
switch (lebyte()) //a função pode ser considerada uma variável global
{
case 1: faca_isso();break;
case 2: faca_aquilo();break;
case xxx: fap_fap();break; //break mesmo
}
ze escreveu:tais recursos independem do compilador. vc pode usá-los até mesmo com o sdcc. basta uma lida no protocolo e já era. o princípio é simples. seria algo como (a grosso modo) colocar bolinhas de gude pretas e brancas dentro de um tubo de ensaio lateralmente dando um tapinha nelas. Bolinha=bitdado, tapinha=clock
Não, não dei nenhum tapinha. Neste forum prefiro ... 51
abç
renan-papaco escreveu:usar esse recurso SPI no SDCC que tenho? nem rola... o compilador dará erro...
renan-papaco escreveu:...o problema é ter q reaprender a programar quase tudo do zero...pois estou acostumado a usar o compilador e a IDE q tenho.
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante