Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* функция записи данных в память ds1302 */
- void ds1302_write_data (unsigned char L, unsigned char X) // в параметрах адрес ячейки, записываемое значение
- {
- CE_log1; // разрешить обмен данными
- IO_out; // перейти на передачу
- _delay_us(1); // ждем начала передачи
- char step;
- for ( step = 0; step < 8; step ++ ) // цикл до 8 бит
- {
- if( L & (1<<step)) // если бит (сдвинутый step) не равен 0, то
- {
- IO_log1; // линия IO лог.1
- }
- else
- {
- IO_log0; // линия IO лог.0
- }
- _delay_us(1); // пауза между синхроимпульсами 1 микросекунда
- SCLK_log1; // синхроимпульс SCLK
- _delay_us(1); // длина синхроимпульса 1 микросекунда
- SCLK_log0; // убрать синхроимпульс SCLK
- }
- for ( step = 0; step < 8; step ++ ) // цикл до 8 бит
- {
- if( X & (1<<step)) // если бит (сдвинутый step) не равен 0, то
- {
- IO_log1; // линия IO лог.1
- }
- else
- {
- IO_log0; // линия IO лог.0
- }
- _delay_us(1); // пауза между синхроимпульсами 1 микросекунда
- SCLK_log1; // синхроимпульс SCLK
- _delay_us(1); // длина синхроимпульса 1 микросекунда
- SCLK_log0; // убрать синхроимпульс SCLK
- }
- SCLK_log0;
- _delay_us(1);
- CE_log0; // закончить передачу
- }
- /* функция чтения данных из памяти ds1302 */
- unsigned char ds1302_read_data (unsigned char L) // в параметрах адрес ячейки, откуда читается значение
- {
- unsigned char out = 0;
- char step;
- CE_log1; // разрешить обмен данными
- IO_out; // перейти на передачу
- _delay_us(1); // ждем начала передачи
- for ( step = 0; step < 8; step ++ ) // цикл до 8 бит
- {
- if( L & (1<<step)) // если бит (сдвинутый step) не равен 0, то
- {
- IO_log1; // линия IO лог.1
- }
- else
- {
- IO_log0; // линия IO лог.0
- }
- _delay_us(1); // пауза между синхроимпульсами 1 микросекунда
- SCLK_log1; // синхроимпульс SCLK
- if (step < 7)
- {
- _delay_us(1); // длина синхроимпульса 1 микросекунда
- SCLK_log0; // убрать синхроимпульс SCLK
- }
- }
- IO_log0;
- IO_in; // перейти на прием
- for ( step = 0; step < 8; step ++ ) // цикл до 8 бит
- {
- _delay_us(2); // длина синхроимпульса 1 микросекунда
- SCLK_log0; // синхроимпульс SCLK лог.0
- if((PIN_IO) != 0) // считаем данные из линии, если не 0
- {
- out |= (1<<step); // запишем лог.1 в разряд сдвинутый step
- }
- if (step < 7)
- {
- _delay_us(1); // длина между синхроимпульсами 1 микросекунда
- SCLK_log1; // синхроимпульс SCLK
- }
- }
- _delay_us(1); // длина между синхроимпульсами 1 микросекунда
- SCLK_log0;
- CE_log0; // закончить передачу
- return out; // вернуть полученное значение
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement