-=John=- (11.11.2008 19:02, просмотров: 384) ответил Vladimir Ljaschko на Не нужно изобретать велосипед - пишется на ура через макросы и [инлайновые] функции практически на любом приличном компиляторе.
Э.. Так и я могу. Это не интересно. Вот в 24-м ПИКе
//--------------------------------
// Установить бит порта
#define SetPin(Addr,Num) ( * Addr ) = ( * ( Addr + 1 ) ) | ( 0x0001U << Num )
// Сбросить бит порта
#define ClrPin(Addr,Num) ( * Addr ) = ( * ( Addr + 1 ) ) & ( ~ ( 0x0001U << Num ) )
// Инвертировать бит порта
#define TglPin(Addr,Num) ( * Addr ) = ( * ( Addr + 1 ) ) ^ ( 0x0001U << Num )
// Прочитать бит порта
#define TstPin(Addr,Num) ( ( ( * ( Addr ) ) & ( 0x0001U << Num ) ) != 0 )
// Настроить порт на вход
#define SetDirIn(Addr,Num) ( * ( Addr - 1 ) ) |= ( 0x0001U << Num )
// Настроить порт на выход
#define SetDirOut(Addr,Num) ( * ( Addr - 1 ) ) &= ( ~ ( 0x0001U << Num ) )
Дальше пишем функцию типа
//--------------------------------
// Выставка сигнала Clock в 1
unsigned char I2C_ClockOn ( void )
{
...
// Перенаправление линии Clock на вывод
SetDirOut ( I2CClockA, I2CClockB );
// Синхронизация (попытка с нашей стороны выставить 1)
SetPin ( I2CClockA, I2CClockB );
...
}
Достаточно дальше задать адрес Addr, например
I2CClockA = &PORTC;
I2CClockB = 4;
и дальше наслаждаться.
В другом месте программы
I2CClockA = &PORTА;
I2CClockB = 5;
и пользовать эту же функцию