
Enviado:
01 Fev 2008 07:33
por xultz
Um texto assim resumido e a confissão que o conhecimento é quase nulo, só me resta sugerir ler o livro de C para PIC do Fábio Pereira, e boa sorte...
Porém, se quiser alguma ajuda um pouco mais adequada, descreva com riqueza de detalhes todos os aspectos do projeto.
Este é o programa que já temos...

Enviado:
01 Fev 2008 09:23
por Karel
Temos 2 pics 16f876 onde uma tem a funçao de multiplexer de 16 fios para 1 onde o desmultiplexer de 1 para 16.
A transmissao é feita por rs232
o código do mux é o seguinte:
;**********************************************************************
; TITLE : Multiplexer data ENCODER
;**********************************************************************
; Filename : MUX_EN10.ASM
; Date Started : 17/12/07
; Last edit : 30/1/08
; File Version : 1.0
;
; Author : BRUNO MARQUES
;**********************************************************************
;
; Files required:
; p16F876.inc
;
;**********************************************************************
; Notes:
; ASSUMING 1MHz XTAL CLOCK WHICH GIVES 4us PER INSTRUCTION
;
;**********************************************************************
list p=16F876 ; list directive to define processor
#include <p16F876.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _XT_OSC
;***** VARIABLE DEFINITIONS
LOOP1 EQU 0CH ; LOOP VARIABLES
LOOP05 EQU 0DH
LOOP100 EQU 0EH
;**********************************************************************
ORG 0x000 ; processor reset vector - start of code
;******************************* INITIALISATION STUFF
CLRF PORTB ; reset portb
BSF STATUS, RP0 ; select bank 1
MOVLW B'00010000' ; PINS RB0-7=INPUT & RB3=OUTPUT
MOVWF TRISB
BCF OPTION_REG,NOT_RBPU ; ENABLE PULL-UP'S ON PORTB PINS
BCF STATUS, RP0 ; SELECT BANK 0
CLRF PORTC ; reset portc
BSF STATUS, RP0 ; select bank 1
MOVLW B'00001111' ; PINS RB0-7=INPUT
MOVWF TRISC
BCF OPTION_REG,NOT_RBPU ; ENABLE PULL-UP'S ON PORTC PINS
BCF STATUS, RP0 ; SELECT BANK 0
;*******************************
START:
CLRWDT ; RESET WATCHDOG TIMER
BCF PORTB, 3 ; SET SERIAL DATA O/P LOW
CALL DELAY100 ; DELAY 100ms
BSF PORTB, 3 ; SET SERIAL DATA O/P HIGH (START BIT)
CALL DELAY05 ; DELAY 0.5ms
;******************************** SEND BIT 0
BTFSC PORTB, 0 ; CHECK BIT 0 I/P, AND SKIP IF CLEAR
GOTO SET0
BCF PORTB, 3 ; BIT 0 MUST BE LOW, SO SET O/P LOW
GOTO SKIP0
SET0: BSF PORTB, 3 ; BIT 0 MUST BE HIGH, SO SET O/P HIGH
SKIP0: CALL DELAY1 ; DELAY FOR 1ms
;******************************** SEND BIT 1
BTFSC PORTB, 1 ; CHECK BIT 1 I/P, AND SKIP IF CLEAR
GOTO SET1
BCF PORTB, 3 ; BIT 1 MUST BE LOW, SO SET O/P LOW
GOTO SKIP1
SET1: BSF PORTB, 3 ; BIT 1 MUST BE HIGH, SO SET O/P HIGH
SKIP1: CALL DELAY1 ; DELAY FOR 1ms
;******************************** SEND BIT 2
BTFSC PORTB, 2 ; CHECK BIT 2 I/P, AND SKIP IF CLEAR
GOTO SET2
BCF PORTB, 3 ; BIT 2 MUST BE LOW, SO SET O/P LOW
GOTO SKIP2
SET2: BSF PORTB, 4 ; BIT 2 MUST BE HIGH, SO SET O/P HIGH
SKIP2: CALL DELAY1 ; DELAY FOR 1ms
;******************************** SEND BIT 3
BTFSC PORTB, 4 ; CHECK BIT 3 I/P, AND SKIP IF CLEAR
GOTO SET3
BCF PORTB, 3 ; BIT 3 MUST BE LOW, SO SET O/P LOW
GOTO SKIP3
SET3: BSF PORTB, 3 ; BIT 3 MUST BE HIGH, SO SET O/P HIGH
SKIP3: CALL DELAY1 ; DLEAY FOR 1ms
;******************************** SEND BIT 4
BTFSC PORTB, 5 ; CHECK BIT 4 I/P, AND SKIP IF CLEAR
GOTO SET4
BCF PORTB, 3 ; BIT 4 MUST BE LOW, SO SET O/P LOW
GOTO SKIP4
SET4: BSF PORTB, 3 ; BIT 4 MUST BE HIGH, SO SET O/P HIGH
SKIP4: CALL DELAY1 ; DELAY FOR 1ms
;******************************** SEND BIT 5
BTFSC PORTB, 5 ; CHECK BIT 5 I/P, AND SKIP IF CLEAR
GOTO SET5
BCF PORTB, 3 ; BIT 5 MUST BE LOW, SO SET O/P LOW
GOTO SKIP5
SET5: BSF PORTB, 3 ; BIT 5 MUST BE HIGH, SO SET O/P HIGH
SKIP5: CALL DELAY1 ; DELAY FOR 1ms
;******************************** SEND BIT 6
BTFSC PORTB, 7 ; CHECK BIT 6 I/P, AND SKIP IF CLEAR
GOTO SET6
BCF PORTB, 3 ; BIT 6 MUST BE LOW, SO SET O/P LOW
GOTO SKIP6
SET6: BSF PORTB, 3 ; BIT 6 MUST BE HIGH, SO SET O/P HIGH
SKIP6: CALL DELAY1 ; DELAY FOR 1ms
;******************************** SEND BIT 7
BTFSC PORTC, 0 ; CHECK BIT 7 I/P, AND SKIP IF CLEAR
GOTO SET7
BCF PORTB, 3 ; BIT 7 MUST BE LOW, SO SET O/P LOW
GOTO SKIP7
SET7: BSF PORTB, 3 ; BIT 7 MUST BE HIGH, SO SET O/P HIGH
SKIP7: CALL DELAY1 ; DLEAY FOR 1ms
;******************************** SEND BIT 8
BTFSC PORTC, 1 ; CHECK BIT 8 I/P, AND SKIP IF CLEAR
GOTO SET8
BCF PORTB, 3 ; BIT 8 MUST BE LOW, SO SET O/P LOW
GOTO SKIP8
SET8: BSF PORTB, 3 ; BIT 8 MUST BE HIGH, SO SET O/P HIGH
SKIP8: CALL DELAY1 ; DELAY FOR 1ms
;******************************** SEND BIT 9
BTFSC PORTC, 2 ; CHECK BIT 9 I/P, AND SKIP IF CLEAR
GOTO SET9
BCF PORTB, 3 ; BIT 9 MUST BE LOW, SO SET O/P LOW
GOTO SKIP9
SET9: BSF PORTB, 3 ; BIT 9 MUST BE HIGH, SO SET O/P HIGH
SKIP9: CALL DELAY1 ; DELAY FOR 1ms
;******************************** SEND BIT 10
BTFSC PORTC, 3 ; CHECK BIT 10 I/P, AND SKIP IF CLEAR
GOTO SET10
BCF PORTB, 3 ; BIT 10 MUST BE LOW, SO SET O/P LOW
GOTO SKIP10
SET10: BSF PORTB, 4 ; BIT 10 MUST BE HIGH, SO SET O/P HIGH
SKIP10: CALL DELAY1 ; DELAY FOR 1ms
;******************************** SEND BIT 11
BTFSC PORTC, 4 ; CHECK BIT 11 I/P, AND SKIP IF CLEAR
GOTO SET11
BCF PORTB, 3 ; BIT 11 MUST BE LOW, SO SET O/P LOW
GOTO SKIP11
SET11: BSF PORTB, 3 ; BIT 11 MUST BE HIGH, SO SET O/P HIGH
SKIP11: CALL DELAY1 ; DLEAY FOR 1ms
;******************************** SEND BIT 12
BTFSC PORTC, 5 ; CHECK BIT 12 I/P, AND SKIP IF CLEAR
GOTO SET12
BCF PORTB, 3 ; BIT 12 MUST BE LOW, SO SET O/P LOW
GOTO SKIP12
SET12: BSF PORTB, 3 ; BIT 12 MUST BE HIGH, SO SET O/P HIGH
SKIP12: CALL DELAY1 ; DELAY FOR 1ms
;******************************** SEND BIT 13
BTFSC PORTC, 6 ; CHECK BIT 13 I/P, AND SKIP IF CLEAR
GOTO SET13
BCF PORTB, 3 ; BIT 13 MUST BE LOW, SO SET O/P LOW
GOTO SKIP13
SET13: BSF PORTB, 3 ; BIT 13 MUST BE HIGH, SO SET O/P HIGH
SKIP13: CALL DELAY1 ; DELAY FOR 1ms
;******************************** SEND BIT 14
BTFSC PORTC, 7 ; CHECK BIT 14 I/P, AND SKIP IF CLEAR
GOTO SET14
BCF PORTB, 3 ; BIT 14 MUST BE LOW, SO SET O/P LOW
GOTO SKIP14
SET14: BSF PORTB, 3 ; BIT 14 MUST BE HIGH, SO SET O/P HIGH
SKIP14: CALL DELAY1 ; DLEAY FOR 1ms
GOTO START ; CONTINUE LOOPING FOR EVER
;******************************** 1ms DELAY SUBROUTINE
DELAY1:
MOVLW 0x52 ; LOOP COUNT VALUE
MOVWF LOOP1 ; SET LOOP VARIABLE
L1: DECFSZ LOOP1,1 ; DEC LOOP COUNTER AND SKIP NEXT STATEMENT IF LOOP COUNTER=0
GOTO L1 ; CONTINUE LOOPING UNTIL ZERO
RETURN
;******************************** 0.5ms DELAY SUBROUTINE
DELAY05:
MOVLW 0x28 ; LOOP COUNT VALUE
MOVWF LOOP05 ; SET LOOP VARIABLE
L05: DECFSZ LOOP05,1 ; DEC LOOP COUNTER AND SKIP NEXT STATEMENT IF LOOP COUNTER=0
GOTO L05 ; CONTINUE LOOPING UNTIL ZERO
RETURN
;******************************** 100ms DELAY SUBROUTINE
DELAY100:
MOVLW 0x64 ; LOOP COUNT VALUE (100)
MOVWF LOOP100 ; SET LOOP VARIABLE
L100: DECFSZ LOOP100,1 ; DEC LOOP COUNTER AND SKIP NEXT STATEMENT IF LOOP COUNTER=0
GOTO CALL1 ; CONTINUE LOOPING UNTIL ZERO
GOTO ENDLOOP ; FINISHED LOOPING
CALL1: CALL DELAY1 ; DELAY FOR 1ms
GOTO L100
ENDLOOP:
RETURN
END ; END OF PROGRAM
o código do demux:
;**********************************************************************
; TITLE : Multiplexer data DECODER
;**********************************************************************
; Filename : MUX_DE10.ASM
; Date Started : 21/12/07
; Last edit : 31/1/08
; File Version : 1.0
;
; Author : Bruno Marques
;**********************************************************************
;
; Files required:
; p16F876.inc
;
;**********************************************************************
; Notes:
; ASSUMING 1MHz XTAL CLOCK WHICH GIVES 4us PER INSTRUCTION
;
;**********************************************************************
list p=16F876 ; list directive to define processor
#include <p16F876.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _XT_OSC
;***** VARIABLE DEFINITIONS
LOOP1 EQU 110H ; LOOP VARIABLE FOR 1ms ROUTINE
COUNT1 EQU 111H ; DELAY VARIABLE
COUNT2 EQU 112H ; DELAY VARIABLE
OUTP EQU 113H ; TEMP OUTPUT VARIABLE FOR DATA LATCHING
OUTP1 EQU 114H ; TEMP OUTPUT VARIABLE FOR DATA LATCHING
;**********************************************************************
ORG 0x000 ; processor reset vector - start of code
;******************************* INITIALISATION STUFF
CLRF PORTB ; reset portb
BCF STATUS, RP0 ; select bank 0
MOVLW B'01111111' ; PINS RB4=INPUT & ALL OTHERS=OUTPUT
MOVWF TRISB ; UPDATE TRISB REGISTER TO DEFINE I/O PINS
BSF STATUS, RP0 ; SELECT BANK 1
CLRF PORTC ; reset portc
BSF STATUS, RP0 ; select bank 1
MOVLW B'11111111' ; PINS RB4=INPUT & ALL OTHERS=OUTPUT
MOVWF TRISC ; UPDATE TRISB REGISTER TO DEFINE I/O PINS
BSF STATUS, RP0 ; SELECT BANK 1
;*******************************
START:
CLRWDT ; RESET WATCHDOG TIMER
CLRF COUNT1 ; CLEAR LOWER COUNT VARIABLE
CLRF COUNT2 ; CLEAR UPPER COUNT VARIABLE
CLOOP:
INCFSZ COUNT1,1 ; INC LOW COUNTER AND SKIP NEXT STATEMENT IF ZERO
GOTO SKIP1
INCF COUNT2,1 ; INCREMENT THE HIGH COUNT VARIABLE
SKIP1:
BTFSS PORTB,0 ; IF DATA INPUT IF HIGH THEN SKIP NEXT STATEMENT
GOTO CLOOP ; LOOP WHILE DATA INPUT IS LOW
MOVLW 0F0H
ANDWF COUNT2,0 ; MASK OUT LOWER 4 BITS OF HIGH COUNTER (TO SET Z FLAG)
; THIS CHECKS TO SEE IF AT LEAST 16ms HAVE PASSED
BTFSC STATUS,Z ; SKIP NEXT STATEMENT OF ZERO FLAG IF NOT SET
GOTO CLOOP ; CONTINUE TIMING AND CHECKING PORT IF NOT AT LEAST 16ms
CLRF OUTP ; CLEAR TEMP OUTPUT LATCH VARIABLE
CALL DELAY1 ; DELAY FOR 1ms TO WAIT FOR THE MIDDLE OF BIT0
BTFSC PORTB,0 ; CHECK IF DATA INPUT IS HIGH
BSF OUTP,0 ; SET BIT0
CALL DELAY1 ; DELAY FOR 1ms TO WAIT FOR THE MIDDLE OF BIT1
BTFSC PORTB,0 ; CHECK IF DATA INPUT IS HIGH
BSF OUTP,1 ; SET BIT0
CALL DELAY1 ; DELAY FOR 1ms TO WAIT FOR THE MIDDLE OF BIT2
BTFSC PORTB,0 ; CHECK IF DATA INPUT IS HIGH
BSF OUTP,2 ; SET BIT0
CALL DELAY1 ; DELAY FOR 1ms TO WAIT FOR THE MIDDLE OF BIT3
BTFSC PORTB,0 ; CHECK IF DATA INPUT IS HIGH
BSF OUTP,3 ; SET BIT0
CALL DELAY1 ; DELAY FOR 1ms TO WAIT FOR THE MIDDLE OF BIT0
BTFSC PORTB,0 ; CHECK IF DATA INPUT IS HIGH
BSF OUTP,4 ; SET BIT0
CALL DELAY1 ; DELAY FOR 1ms TO WAIT FOR THE MIDDLE OF BIT1
BTFSC PORTB,0 ; CHECK IF DATA INPUT IS HIGH
BSF OUTP,5 ; SET BIT0
CALL DELAY1 ; DELAY FOR 1ms TO WAIT FOR THE MIDDLE OF BIT2
BTFSC PORTB,0 ; CHECK IF DATA INPUT IS HIGH
BSF OUTP,6 ; SET BIT0
CALL DELAY1 ; DELAY FOR 1ms TO WAIT FOR THE MIDDLE OF BIT0
BTFSC PORTB,0 ; CHECK IF DATA INPUT IS HIGH
BSF OUTP,7 ; SET BIT0
MOVF OUTP,0 ; MOVE LATCH VARIABLE INTO W
MOVWF PORTB ; LATCH BIT0-BIT7 ONTO PORT PINS
CLRF OUTP1 ; CLEAR TEMP OUTPUT LATCH VARIABLE
CALL DELAY1 ; DELAY FOR 1ms TO WAIT FOR THE MIDDLE OF BIT1
BTFSC PORTC,0 ; CHECK IF DATA INPUT IS HIGH
BSF OUTP,0 ; SET BIT0
CALL DELAY1 ; DELAY FOR 1ms TO WAIT FOR THE MIDDLE OF BIT2
BTFSC PORTC,0 ; CHECK IF DATA INPUT IS HIGH
BSF OUTP,1 ; SET BIT0
CALL DELAY1 ; DELAY FOR 1ms TO WAIT FOR THE MIDDLE OF BIT3
BTFSC PORTC,0 ; CHECK IF DATA INPUT IS HIGH
BSF OUTP,2 ; SET BIT0
CALL DELAY1 ; DELAY FOR 1ms TO WAIT FOR THE MIDDLE OF BIT3
BTFSC PORTC,0 ; CHECK IF DATA INPUT IS HIGH
BSF OUTP,3 ; SET BIT0
CALL DELAY1 ; DELAY FOR 1ms TO WAIT FOR THE MIDDLE OF BIT1
BTFSC PORTC,0 ; CHECK IF DATA INPUT IS HIGH
BSF OUTP,4 ; SET BIT0
CALL DELAY1 ; DELAY FOR 1ms TO WAIT FOR THE MIDDLE OF BIT2
BTFSC PORTC,0 ; CHECK IF DATA INPUT IS HIGH
BSF OUTP,5 ; SET BIT0
CALL DELAY1 ; DELAY FOR 1ms TO WAIT FOR THE MIDDLE OF BIT3
BTFSC PORTC,0 ; CHECK IF DATA INPUT IS HIGH
BSF OUTP,6 ; SET BIT0
CALL DELAY1 ; DELAY FOR 1ms TO WAIT FOR THE MIDDLE OF BIT3
BTFSC PORTC,0 ; CHECK IF DATA INPUT IS HIGH
BSF OUTP,7 ; SET BIT0
MOVF OUTP1,0 ; MOVE LATCH VARIABLE INTO W
MOVWF PORTC ; LATCH BIT0-BIT7 ONTO PORT PINS
GOTO START ; CONTINUE LOOPING FOREVER
;******************************** 1ms DELAY SUBROUTINE
DELAY1:
MOVLW 0x52 ; LOOP COUNT VALUE
MOVWF LOOP1 ; SET LOOP VARIABLE
L1: DECFSZ LOOP1,1 ; DEC LOOP COUNTER AND SKIP NEXT STATEMENT IF LOOP COUNTER=0
GOTO L1 ; CONTINUE LOOPING UNTIL ZERO
RETURN
END ; END OF PROGRAM
Gostaroa que me dessem uma ajudinha para por isto a funcionar
Re: Este é o programa que já temos...

Enviado:
01 Fev 2008 09:33
por andre_luis
Realmente....as pessoas tem que querer ser ajudadas para receberem ajuda. Aqui as pessoas conseguem bons resultados nessa troca mútua de experiencias.
Voce postou o programa inteiro sem sequer dizer o problema que está acontecendo.
Boa sorte pra voce, pois acho que vai precisar. Porque de ajuda mesmo, acho que nao está precisando.
+++

Enviado:
01 Fev 2008 11:01
por ze
o mesmo caminho do fabim, mas em C.
sulução simplista (pra 8 bits (1 porta) , tô com preguiça de pensar em mais):
1 fio (desconsiderando o gnd, é lógico) ligando TX (RC6) do uC sensor ao RX (RC7) do uC de led´s.
lado dos sensores: um 876 transmitindo constatemente o valor do PORTB:
for(;;) {TXREG=PORTB;while(!TXIF);}//portb como entrada é lógico.
lado dos leds: outro 876 recebendo constantemente e colocando no PORTB:
for(;;) {while(!RCIF); PORTB=RXREG;}//portb como saída é lógico.
gastando + 1 pouco de fosfato, é possível transmitir o sinal pela alimentação. (Mas pelo jeito, estás longe disso ainda!!!)
pelo menos foi o que o meu lado humano entendeu. Eu quero te ajudar...mas você tem que me ajudar a te ajudar...!!

Enviado:
01 Fev 2008 15:30
por ze
e aí xande, se estava pensando que era pela rede ac, esquece. é pela dc mesmo.(pela rede ac não deixa de ser interessante, hein...)
Para uma explicação melhor teria que desenhar. infelizmente não tenho papel e lápis no momento. mas essencialmente (e teoricamente) (e simplisticamente) para a recepção, a alimentação da caixa preta teria que ser p.ex. um sinal de 8 (nivel 0) e 9V (nivel 1). a alimentação do uC propriamente dito seria extraída daí por um 78L05 p.ex. O sinal seria extraído dos níveis 8V e 9V através de um comparador simples. De preferência a caixa preta deve ser de baixo consumo.(vai que quer ligar várias em paralelo?)
Para o transmissor, basta somar o sinal quadrado 1V à alimentação 8V p.ex.
Na prática a teoria é outra. Velocidade, distância, interferências, consistência dos dados, etc deverão ser considerados.
Este é 1 método simplista. Claro há outros + profissionais.
Se achar interessante, abra um tópico, assim alguns especialistas poderão lhe indicar métodos + eficientes, como p.ex. algum sinal modulado em MHz e captado com circuito filtro cerâmico. Mas aí é outra história...(tomei bomba nesta matéria rs).
Desculpe se escrevi muito rápido... afinal é sexta super pré carnavalesca!!! e já está me dando tremedeira!!!! tô precisando tomar uma!!!
fui...............................!

Enviado:
12 Fev 2008 06:46
por Bruno Marques
Boas, achei interessante fazer o programa para monotorizar os sensores, já fiz o programa mas nao está a funcionar. E nao sei porque
Os pic é o 16F876 utilizando o usart ara fazer uma transmissao de 8 bis, modo assincrono com um baud rate de 9615
A pic do lado dos sensores tem o portb defenido como entrada e sai no tx rc6
Os sensores funcionam da seguinte maneira ou é 5V ou 0V
A pic do lado dos leds tem o portb como saidas e o rc7 como entrada.
O programa dos sensores é o seguinte:
; Files required:
; p16F876.inc
;
;**********************************************************************
list p=16F876
#include <p16F876.inc>
;********************************************************************
ORG 0x000 ;reset á pic
;***************************************;SAiDA
CLRF PORTC
BSF STATUS, RP0
MOVLW B'10111111'
MOVWF TRISc ,tx output
;***************************************;ENTRADAS
CLRF PORTB
BSF STATUS, RP0
MOVLW B'11111111'
MOVWF TRISB
;***************************************;BAUD RATE
BSF STATUS, RP0 ;bank 1
MOVLW D'25' ;baud rate =9615
MOVWF SPBRG ;
BSF STATUS, RP0
BSF TXSTA,BRGH
;***************************************;define modo de transmssao
CLRF TXSTA
movlw B'00100100'
movwf TXSTA
;***************************************;wait tx
BCF STATUS, RP0
WAITTX: btfss PIR1,TXIF
GOTO WAITTX
;***************************************;ENVIAR
BSF STATUS, RP0
movf TRISB,w
BCF STATUS, RP0
movwf TXREG
END
O programa do lado dos leds:
; Files required:
; p16F876.inc
;
;**********************************************************************
list p=16F876
#include <p16F876.inc>
;********************************************************************
ORG 0x000
;***************************************;ENTRADAS
CLRF PORTC ;
BSF STATUS, RP0
MOVLW B'10000000'
MOVWF TRISC
;***************************************;SAIDAS
CLRF PORTB
MOVLW B'00000000'
MOVWF TRISB
;***************************************;BAUD RATE
BSF STATUS, RP0
MOVLW D'25'
MOVLW SPBRG
BSF STATUS, RP0
BSF RCSTA,BRGH
;****************************************;MODO DE RECEPÇÃO
CLRF RCSTA
movlw B'10110000'
movwf RCSTA
;****************************************;wait rx
BCF STATUS, RP0
WAITRX: btfss PIR1,RCIF
GOTO WAITRX
;****************************************;ENVIAR
BSF STATUS, RP0
movf TRISB,w
BCF STATUS, RP0
movwf RCREG
END

Enviado:
12 Fev 2008 12:50
por ze
caro gajo amigo, o seguinte código poderá estar a funcionar. Testei-o na simulação. Entristece-me o facto de que é imenso provável que não te será útil, pois está em C. Mas, se quiseres, compartilho-te os ficheiros .hex gerados para que possas brincar um pouco.
Ah, e desculpa-me se não me fiz entender direito, pois não estou a achar um tradutor de pt-br para pt-pt (o Altavista não o tem! pá) . Não sou muito bom com idiomas estrangeiros.
- Código: Selecionar todos
#include <pic.h>
// ************************ configuração ***********************
// proteção do código,4Mhz,powerup,lowvoltagedis,debdis,flaswritedis,wathdogdis,brownouresetdis
//__CONFIG(PROTECT & XT & PWRTEN & LVPDIS & DEBUGDIS & WRTDIS & WDTEN & BOREN); //876
__CONFIG(UNPROTECT & XT & PWRTEN & LVPDIS & DEBUGDIS & WDTDIS & BOREN); //876a
//***************************************************
static void interrupt
timer_int(void)
{
}
//*********************************************************
void main(void)
{
OPTION=0b00100001; //com pullup, clock ligado em RA4, prescaler/
T1CON=0b00000111; //timer on, prescale 1:1, não sincroniza, clock externo, timer1 on
ADCON1=0b00000110; //AN=digital
TRISA=0b00001001; //RA3, RA1=entrada comparador
//TRISB=0xff; //lado dos sensores
TRISB=0x00; //lado dos leds
CMCON=0b00000001;
T1CON=0B00010101; // prescaler /2 timer1 on
TMR1IF=0; //zera flag timer1
TRISC=0b10011111;//RC7,RC6=txrx,RC5=buzzer,RC4,RC3=e2p,RC2=vnr,RC1=por,RC0=comtec1
//------------- interface serial-------
SPBRG=155; //9600,n,8 @ 24MHz
TXEN=1; //hab. transmissão
//BRGH=0; //sel. baud rate baixa 2400bps
BRGH=1; //sel. baud rate alta 9600bps
SYNC=0; //assinc.
SPEN=1; //hab. pinos como int. serial
CREN=1; //recepção contínua
RCIF=0; //flag de recepção
RCIE=1; //hab int serial
//--------------------------------------
for(;;)
{
// TXREG=PORTB; //lado dos
// while(TXIF); // sensores
while(!RCIF); //lado dos
PORTB=RCREG; //leds
}
}
Descomente/comente para compilar em seus respectivos uC´s.
(Cara, tô teno tempo ultimamente...rsrsrs. Favor não se acostumar...)

Enviado:
12 Fev 2008 22:33
por Bruno Marques
Boas
Caro amigo Lellis muito obrigado pelo código, tenho uma duvida no seguinte código:
OPTION=0b00100001; //com pullup, clock ligado em RA4, prescaler/
T1CON=0b00000111; //timer on, prescale 1:1, não sincroniza, clock externo, timer1 on
ADCON1=0b00000110; //AN=digital
TRISA=0b00001001; //RA3, RA1=entrada comparador
Podias-me dizer qual é o teu programa para compilares de c para hexadeimal?
Já agora se necessitar de enviar mais 7 bits? Ou seja 15 bits ao todo como faria?
Muito Obrigado pela ajuda.
Atensiosamente
Bruno Marques

Enviado:
13 Fev 2008 07:51
por ze
Caro Bruno Marques, já notei que tu chegaste a pôucu de fora. Julgo (e espero) que não sejas "zerado".
Para compilares de C para hex há varios programas. Eu uso o hitech-c. (que infelizmente é pago U$1000) Tu podes baixá-lo para avaliação temporária em
www.htsoft.com. Mas é o melhor do universo. Trabalha junto com o Mplab Microchip.
O Mplab também tem seu próprio compilador cuja características iniciais deverás estudar.(Mplab já ouviste falar, pois?)
Há também o mikroC que é + barato e o barato: grátis até 2K de programa. Encontrado em
http://www.mikroe.com/en/compilers/mikroc/pic/
Os nomes: OPTION,T1CON,ADCON1,TRISA são registros da PIC, que sinceramente não desejo que tu não os conheças !!! (e linguagem C)
Quanto a transmitir + de 8 bit´s, já está abusando neah? Além do +, minha memória está tão fraca que só lembrei que dia é hoje porque esqueci que dia é hoje. Aí lembrei-me que como só esqueço nas quartas feiras, então hoje é....quarta! Ou seja quase sexta!!
Falando (escrevendo) sério: tente primeiro entender e monitorizar seus 8 bits. Para 15 é um pulinho.(existe uma ridícula minima extremamente baixa e infinetesimal probabilidade pequena minúscula de quem sabe provavelmente eu pensar em tentar algum dia fazer algo assim)
enviei-lhe os .hex
abrç