[an error occurred while processing this directive]
а смысл? гораздо проще сделать программно... типа такого
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено A_F 25 октября 2005 г. 19:17
В ответ на: А если посмотреть на синхронный USART ? Одна линия - такты, другая двунаправленная линия данных. отправлено <font color=gray>KT</font> 25 октября 2005 г. 17:05

//все для ds1302

#define RST_SET RD0 = 1
#define RST_CLR RD0 = 0
#define CLK_SET RC1 = 1
#define CLK_CLR RC1 = 0
#define DAT_SET RC2 = 1
#define DAT_CLR RC2 = 0
#define DAT_INPUT TRISC |=0b00000100
#define DAT_OUTPUT TRISC &=0b11111011
#define DAT_COMPARE RC2

#define COM_WRITE 0b11111110

#define COM_SEC 0b10000001
#define COM_MIN 0b10000011
#define COM_HR 0b10000101
#define COM_DATE 0b10000111
#define COM_MONTH 0b10001001
#define COM_YEAR 0b10001101
#define COM_READ_RAM 0b11000001
#define COM_WRITE_RAM 0b11000000

#define DELAY for(d=0; d!=5; d++)

unsigned char DS1320_ReadByte(unsigned char com)
{
unsigned char n,res=0;
unsigned int d;
RST_SET;
DAT_OUTPUT;
DELAY;
for(n = 0; n != 8; n++)
{
if(com & 0x01)DAT_SET; else DAT_CLR;
CLK_SET;
DELAY;
CLK_CLR;
com = com >> 1;
}
DAT_INPUT;
DELAY;
for(n = 0; n != 8; n++)
{
if(DAT_COMPARE)res|=0x80;
CLK_SET;
DELAY;
if (n != 7)res = res >> 1;
CLK_CLR;
}
RST_CLR;
return res;
}

void DS1320_WriteByte(unsigned char com, unsigned char dat)
{
unsigned char n,res=0;
unsigned int d;
RST_SET;
DAT_OUTPUT;
for(n = 0; n != 8; n++)
{
if(com & 0x01)DAT_SET; else DAT_CLR;
CLK_SET;
DELAY;
CLK_CLR;
com = com >> 1;
}
for(n = 0; n != 8; n++)
{
if(dat & 0x01)DAT_SET; else DAT_CLR;
CLK_SET;
DELAY;
CLK_CLR;
dat = dat >> 1;
}
RST_CLR;
}

unsigned char BinToBCD(unsigned char val)
{
unsigned char t1;
t1=val/10;
val = (t1 << 4) + (val - t1*10);
return val;
}


unsigned char DS1320_ReadRAM(unsigned char adr)
{
unsigned char n, b1,b2;
for (n=0; n<10; n++)
{
b1 = DS1320_ReadByte((adr << 1) | COM_READ_RAM);
b2 = DS1320_ReadByte((adr << 1) | COM_READ_RAM);
if(b1 == b2)return;
}
}

void DS1320_WriteRAM(unsigned char adr, unsigned char num)
{
unsigned char n, b;
for (n=0; n<10; n++)
{
DS1320_WriteByte (0,0);
DS1320_WriteByte (((adr << 1) | COM_WRITE_RAM), num);
b = DS1320_ReadRAM(adr);
if(num == b)return;
}
}


void DS1320_SetUp(unsigned char date, unsigned char month, unsigned char year, unsigned char hr, unsigned char min, unsigned char sec)
{
DS1320_WriteByte (0,0);
DS1320_WriteByte ((COM_WRITE & COM_HR), BinToBCD(hr));
DS1320_WriteByte (0,0);
DS1320_WriteByte ((COM_WRITE & COM_MIN), BinToBCD(min));
DS1320_WriteByte (0,0);
DS1320_WriteByte ((COM_WRITE & COM_SEC), BinToBCD(sec));
DS1320_WriteByte (0,0);
DS1320_WriteByte ((COM_WRITE & COM_DATE), BinToBCD(date));
DS1320_WriteByte (0,0);
DS1320_WriteByte ((COM_WRITE & COM_MONTH), BinToBCD(month));
DS1320_WriteByte (0,0);
DS1320_WriteByte ((COM_WRITE & COM_YEAR), BinToBCD(year));
}
unsigned int GetTime(void)
{
unsigned int t;
unsigned int b,b1;
t = DS1320_ReadByte(COM_HR);
b = ((0x30 & t)>>4) * 10 + (t & 0x0F);
// PrintDouble(b,0,0);

t = DS1320_ReadByte(COM_MIN);
b1 = ((0x70 & t)>>4) * 10 + (t & 0x0F);
b *= 100;
b += b1;
return b;
}

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru