Сообщение от
MegaDeth
Animal панятно, если требуется изменить состояние на одном или нескольких выводов регистра, МК последовательно будет загружать n-разрядное число, а регистр в парарельный код переведет тогда...
вот кусок, который загружает в последовательный регистр содержимое регистра Data_Out, а затем выплевывает это на выходы. Большой плюс в том, что когда таких регистров будет штук двадцать, то пока на выходах горит одно состояние, в это время в регистры уже грузится другое, затем мгновенно состояние выходов меняется.
SCK - синхронизация послед. порта (по переднему фронту считывается состояние со входа SI)
SI - вход послед порта
RCK - синхронизация паралел порта (по переднему фронту данные считываются из послед регистра в паралельный)
G - разрешение выхода ( лог 1 - все выходы в третьем состоянии, лог 0 - на выходах данные из паралельного регистра)
SCLR - сброс (лог 0 - выходы в третьем состоянии, ничего не работает, передний фронт - во всех регистрах нули)
unsigned int16 Data_out;
unsigned int8 Count;
void main()
{
Initial();
output_low(Out_SCK);
output_low(Out_SI);
output_low(Out_RCK);
output_high(Out_G);
output_low(Out_SCLR);
delay_ms(1);
output_high(Out_SCLR);
count=0;
Data_Out=0b1010010001000010;
do {
if (bit_test(Data_Out,count))
{output_high(Out_SI);}
delay_ms(1);
output_high(Out_SCK);
delay_ms(1);
output_low(Out_SCK);
output_low(Out_SI);
count++;
} while (count<16);
output_high(Out_RCK);
delay_ms(1);
output_low(Out_RCK);
output_low(Out_G);
do {} while(1);
}