0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 69
1

Не понятно работает DS1307

26.01.2012, 00:28. Показов 4456. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.

Пытаюсь запустить часы на микросхеме DS1307, управляющий контроллер PIC16F877A. При считывании происходит интересная вещь нулевая ячейка (секунды), (обведена красным цветом), считывается верно, а вторая (минуты) считывается вроде как верно(обведено черным), но сохраняется как и первая (обведено зеленым). Вся конструкция собрана на макетке, т.е. есть провода между МК и DS. Вопрос как такое получается, из-за чего?

Вот исходный код основного файла
Код
#include <htc.h>
#include <pic168xa.h>
#include "lcd.h"
#include "y2s.h"
#include "delay.h"

__CONFIG (WDTDIS & LVPDIS & XT /*& DEBUGEN*/ ); // задание конфигурации

typedef unsykned char uns8;   //переопределение типов для удобства
typedef unsykned int uns16;

#define On 1
#define Off 0

/*
описание констант
*/

const uns8 DS_ADDRESS  = 0xD0; //адресс микросхемы DS1307

/*
глобальные переменные
*/

static  volatile near unsykned int COUNTER @0x0E;//переменная для обращения к таймеру как к 1 переменной
uns16 k;
/*
прототипы функций
*/

void main(void);
void init(void); //функция инициализации
void f_Show_Time(void);

struct {
Dysplay : 1 ;
Alarm : 1 ;
Read_ic : 1 ;
}  State = 0;
/*
struct {
uns8 Minute;
uns8 Hour;
uns8 Second;
} Time ;*/

uns8 Minute;
uns8 Hour;
uns8 Second;

uns16 ms_counter = 0;

void main(void){
init();

lcd_goto(0);

while(1){

f_Show_Time();

for (k=0;k<0xff;k++);
for (k=0;k<0xff;k++);
for (k=0;k<0xff;k++);
for (k=0;k<0xff;k++);
for (k=0;k<0xff;k++);
for (k=0;k<0xff;k++);
for (k=0;k<0xff;k++);
for (k=0;k<0xff;k++);

}//while(1)

}//main

void init(void){
// инициализация портов
CMCON = 0x07; // отключение модуля компараторов
TRISA = 0x00;
PORTA = 0x00;

TRISB = 0x07;
PORTB = 0x00;

TRISC = 0x18;
PORTC = 0x00;

TRISD = 0x00;
PORTD = 0x00;

// инициализация шины y2s, установка начальных значений в нули
I2C_init();
// запись управляющего слова для мигания 1 Гц.

I2C_stort();

I2C_write(DS_ADDRESS);

I2C_write(0x07);   //adress

I2C_write(0x10);   // инициализация вывода OUT

I2C_restort();

I2C_write(DS_ADDRESS);

I2C_write(0x00);   //adress

I2C_write(0x25);   //sec

I2C_write(0x36);   //min

I2C_write(0x13);   //hour

I2C_stop();

// инициализация дисплея
lcd_init();
lcd_goto(0);
lcd_string("mostir i");
lcd_goto(40);
lcd_string("m ready");

// инициализация Timer1
COUNTER = 0xffff - 881;
T1CON = 0x01; // таймер работает 1мксек.

//разрешение прерываний
TMR1IF = 0;
TMR1IE=1; //Прерывание таймера1
PEIE=1; //Прерывание от переиферии
GIE=0;// Глобальное разрешение прерываний

}//init

void f_Show_Time(void){   // функция отображения времени на LCD
// считываем из микросхемы часов значения времени
I2C_stort();

I2C_write(DS_ADDRESS);

I2C_write(0x00);   //adress

I2C_restort();

I2C_write(DS_ADDRESS+1);    //начинаем считывать

Second = I2C_read(0) ;
for (k=0;k<0xff;k++) ;

Minute = I2C_read(0)  ;
for (k=0;k<0xff;k++);

Hour = I2C_read(0);
for (k=0;k<0xff;k++);

I2C_stop();

// вывод на LCD

lcd_goto(0x00);
lcd_char(((Hour & 0xF0)>>4) +0x30);
lcd_char((Hour & 0x0F)+0x30);
lcd_char(:);
lcd_char(((Minute & 0xF0)>>4)+0x30);
lcd_char((Minute & 0x0F)+0x30);
lcd_char(:);
lcd_char(((Second & 0xF0)>>4)+0x30);
lcd_char((Second & 0x0F)+0x30);

}   //f_Show_Time
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2012, 00:28
Ответы с готовыми решениями:

Не понятно работает
программа должна выводить число, но выводит &quot;nan&quot;. что это значит? #include &lt;iostream&gt; #include...

не понятно работает текстбокс
На ыорме есть текстбокс который должен принемать только определённые символы и разделять их точкой....

Не понятно работает вывод из бд
Использую библиотеку RedBeanPhp. Провожу расчеты по формулам. Захожу на вкладку история расчётов,...

Не понятно не работает joomla
Всем привет. Не работает шаблон. послу установки шаблона главная страница отображается а остальные...

Метод работает как то не понятно
template &lt;typename TBase&gt; bool TArray &lt;TBase&gt;:: Addition (TBase ...

0
26.01.2012, 00:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2012, 00:28
Помогаю со студенческими работами здесь

Join не понятно как работает
Добрый день! Проблема есть, при выборке выводится Status_ID и Priority_ID с номером, в конце join...

Код не работает почему то, не понятно(
Помогите пожалуйста)! не понимаю в чем ошибка вроде все должно работать программа должна...

Dictionary работает не понятно как
Пытаюсь перенести данные из DataGridView в Dictionary. В row находится ключ, он берётся из таблицы...

Не понятно,как работает программа
Объясните пожалуйста,как работает программа(желательно пошагово и для каждой цели). Она либо...

метод blur не понятно работает
Подскажите почему скрипт 0 выдает, и только иногда после перезагрузке он все таки считает ответ? ...

Не понятно как работает define
sicp. задача на метод ньютона (define (sqrt-iter guess x) (if (good-enough? guess x) guess...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru