Незнам дали би имал повеке време да ти напишам код според твојте потреби ама еве ти еден пример кој може ке ти помогне
program PortExpander
dim
SPExpanderCS as sbit at RA2_bit
SPExpanderRST as sbit at RA3_bit
SPExpanderCS_Direction as sbit at TRISA2_bit
SPExpanderRST_Direction as sbit at TRISA3_bit
dim i as char
#define Output_PORT0
main:
ANSEL = 0
ANSELH = 0
C1ON_bit = 0
C2ON_bit = 0
TRISB = 0
i = 0
SPI1_Init()
Expander_Init(0)
Expander_Set_DirectionPortA(0, 0x00)
Expander_Set_DirectionPortB(0,0xFF)
Expander_Set_PullUpsPortB(0,0xFF)
while TRUE
Expander_Write_PortA(0, i)
inc(i)
PORTB = Expander_Read_PortB(0)
Delay_ms(100)
wend
endif
SPI1_Init()
Expander_Init(0)
Expander_Set_DirectionPortB(0, 0x00)
Expander_Set_DirectionPortA(0,0xFF)
Expander_Set_PullUpsPortA(0,0xFF)
while TRUE
Expander_Write_PortB(0, i)
inc(i)
PORTB = Expander_Read_PortA(0)
Delay_ms(100)
wend
endif
end
А ако сакаш можеш и да поврзеш два микроконтролера кој едниот ке ти е како PORT Expander и мегу себе ке ги поврзеш преку сериска синхрона или сериска асинхрона комуникација која ја знаеш повеке ако ти тереба само излези и ако користиш сериска ансихрона комуникација ке комуницираат преку еден пин ако ти требаат и влезови тогаш ке ти ребаат два пина RX TX.
Ако користиш сесирска синхрона комуникација за I2C ке ти требаат 2 пина Data in/out еден пин и clock втор пин, за SPI комуникација ке ти требаат еден Data in втор Data out трет Clock и ако имаш повеке паралелно споени контролери за секој ке ти треба еден пин за селектирање CS(Chip select) или SS(Slave select)