Djangirov1 / Vfrc5
.doc
Тема: Работа с периферийными узлами микроконтроллеров ATMEL. Последовательный периферийный интерфейс TWI.
Цель работы: научиться осуществлять обмен информации между различными устройствами с использованием интерфейса TWI микроконтроллера.
Задание №1: Реализовать на микроконтроллере программу взаимодействия с другими устройствами по интерфейсу TWI. Проверить работу программы в Proteus VSM.
Сверхточные часы реального времени с интегрированным кристаллом и ОЗУ DS3232. Выводить данные о времени и дате на устройство отображения (ЖКИ дисплей).
#ifndef _DS3232_INCLUDED_ //перечисление функций, взятых из библиотеки
#define _DS3232_INCLUDED_// ds3232.lib и её подключение
#include <i2c.h>
#pragma used+
unsigned char rtc_read(unsigned char address);
void rtc_write(unsigned char address,unsigned char data);
void rtc_init(unsigned char C,unsigned char CS,unsigned char AO); //&&&
void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec);
void rtc_set_time(unsigned char hour,unsigned char min,unsigned char sec);
void rtc_get_date(unsigned char *date,unsigned char *month,unsigned char *year);
void rtc_set_date(unsigned char date,unsigned char month,unsigned char year);
#pragma used-
#pragma library ds3232.lib
#endif
#include <mega16.h>
#include "ds3232.h"
##include <lcd.h>
#include <stdio.h>
#include <delay.h>
#include <i2c.h>
//определяем порт Д как работающий через TWI(I2C), 5 и 6 пины соотв. для данных и управления
#asm
.equ __i2c_port=0x12 ;PORTD
.equ __sda_bit=5
.equ __scl_bit=6
#endasm
//определяем порт А как работающий с LCD
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
unsigned char h=0, m=0, s=0;
unsigned char date=0, month=0, year=0;
unsigned char C=0b00000100;//биты C и CS необходимы для задания формата
unsigned char CS=0b11001000;// времени и даты
unsigned char AO=25;//бит для установки режима будильника (alarm)
char buffer [64];
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTD=0x00;
DDRD=0b00001000;
// I2C Bus initialization
i2c_init();
lcd_init(16);
// DS1307 Real Time Clock initialization
// Square wave output on pin SQW/OUT: Off
// SQW/OUT pin state: 0
rtc_init(C,CS,AO);//инициализация часов
while (1)
{
// Place your code here
rtc_get_time(&h,&m,&s);
rtc_get_date(&date, &month, &year);
lcd_gotoxy(0,0);
sprintf(buffer, "Time %i:%i:%i", h,m,s);
lcd_gotoxy(0,0);
lcd_puts(buffer);
sprintf(buffer, "Date %i:%i:%i", date,month,year);
lcd_gotoxy(0,1);
lcd_puts(buffer);
};
}
Выводы: на данной лабораторной работе я научился осуществлять обмен информации между различными устройствами с использованием интерфейса TWI микроконтроллера.