0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 69
|
|
1 | |
Не понятно работает DS130726.01.2012, 00:28. Показов 4456. Ответов 0
Метки нет (Все метки)
Доброго времени суток.
Пытаюсь запустить часы на микросхеме 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
|
26.01.2012, 00:28 | |
Ответы с готовыми решениями:
0
Не понятно работает не понятно работает текстбокс Не понятно работает вывод из бд Не понятно не работает joomla Метод работает как то не понятно |
26.01.2012, 00:28 | |
26.01.2012, 00:28 | |
Помогаю со студенческими работами здесь
1
Join не понятно как работает Код не работает почему то, не понятно( Dictionary работает не понятно как Не понятно,как работает программа метод blur не понятно работает Не понятно как работает define Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |