Hi. Thanks once again for all your help!!! With all the info you gave me, I was able to compile some program to transfer 8 bytes using USART, to another PIC and perform PWM to them (not multiplexing yet)
I have not been able to try the code out yet, because I do not have two 16F877A right now. Anyway here are the TX and RX codes. Im sure they have quite a lot of errors, but a start is a start, isnt it??
(Please check also the regs at the beginning, I wasnt sure of some bits...
This is the TX code:
DEVICE 16F877A
ALL_DIGITAL = TRUE
XTAL = 20
DIM PWMDATA[8] AS BYTE 'VARIABLES FOR DATA TRANSMISSION
'LOAD PWMDATA FROM SOMEWHERE ELSE...
DIM INDEX AS BYTE 'INDEX FOR DATA RECEPTION FOR PWMDATA
DIM X AS BYTE
TXSTA = %00100110 'ASYNCHRONUS, HIGH SPEED, TRANSMISSION ENABLED.
RCSTA = %10010000 'USART ON, 8-BIT, NO ADRESS DETECTION, CONTINOUS RECEIVE
SPBRG = %00001010 'SET BAUDSPEED TO 113200 (HOW DO YOU CALCULATE THE ERROR?)
MAIN:
FOR INDEX = 0 TO 7
TXREG = PWMDATA[INDEX]
WHILE TXIF = 0 : WEND
NEXT INDEX
GOTO MAIN
/////////////////////////////////////////////////////////////////////////////
And this is the RC code:
DEVICE 16F877A
ALL_DIGITAL = TRUE
XTAL = 20
TRISD = $00
DIM PWMDATA[8] AS BYTE
DIM INDEX AS BYTE
DIM X AS BYTE
FOR X = 0 TO 7 'INITIATE PWMDATA
PWMDATA[X] 0 = 255
NEXT X
INDEX = 0
TXSTA = %00100110 'ASYNCHRONUS, HIGH SPEED, TRANSMISSION ENABLED.
RCSTA = %10010000 'USART ON, 8-BIT, NO ADRESS DETECTION, CONTINOUS RECEIVE
SPBRG = %00001010 'SET BAUDSPEED TO 113200 (HOW DO YOU CALCULATE THE ERROR?)
MAIN:
PORTD = $FF
FOR X = 0 TO 255
IF X = PWMDATA[0] THEN CLEAR PORTD.0
IF X = PWMDATA[1] THEN CLEAR PORTD.1
IF X = PWMDATA[2] THEN CLEAR PORTD.2
IF X = PWMDATA[3] THEN CLEAR PORTD.3
IF X = PWMDATA[4] THEN CLEAR PORTD.4
IF X = PWMDATA[5] THEN CLEAR PORTD.5
IF X = PWMDATA[6] THEN CLEAR PORTD.6
IF X = PWMDATA[7] THEN CLEAR PORTD.7
IF RCIF = 1 THEN GOSUB RECEIVE
NEXT X
GOTO MAIN
RECEIVE:
IF INDEX = 8 THEN INDEX = 0
PWMDATA[INDEX] = RCREG
INDEX = INDEX + 1
RETURN
Thanks for all your help!!!
Manuel
Bookmarks