ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
138468 Топик полностью
-=John=- (11.11.2008 19:02, просмотров: 382) ответил 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; и пользовать эту же функцию