Исследование принципа работы микроконтроллеров семейства AVR

Страницы работы

Содержание работы

Для создания программы для микроконтроллера Atmega 8, мы используем программу CodeVisionAVR

CodeVisionAVR — интегрированная среда разработки программного обеспечения для микроконтроллеров семейства Atmel AVR.

CodeVisionAVR включает в себя следующие компоненты:

·  компилятор Си-подобного языка для AVR;

·  компилятор языка ассемблер для AVR;

·  генератор начального кода программы, позволяющего произвести инициализацию периферийных устройств;

·  модуль взаимодействия с отладочной платой STK-500;

·  модуль взаимодействия с программатором;

·  редактор исходного кода с подсветкой синтаксиса;

·  терминал.

Выходными файлами CodeVisionAVR являются:

·  HEX, BIN или ROM-файл для загрузки в микроконтроллер посредством программатора;

·  COFF — файл, содержащий информацию для отладчика;

·  OBJ — файл, в котором хранится промежуточный код компиляции, так называемый объектный код;

CodeVisionAVR является коммерческим программным обеспечением. Существует бесплатная ознакомительная версия с ограничением ряда возможностей, в частности, размер программного кода ограничен 4-мя килобайтами и не включён ряд библиотек.

Запускаем программу CodeVisionAVR:

Рисунок 13 Главное меню программы CodeVisionAVR.

Далее необходимо создать новый проект. Нажимаем File=>New, далее нам предложат выбрать тип файла выбираем проект (projeсt).

Выбераем необходимые нам параметры

Рисунок 14 параметры измерительной системы

Выполняем генерацию программы.

Рисунок 15 Генерация программы.

Наша программа сгенерировалась .

Рисунок 16 сгенерированный код программы.

Проверяем код программы после генерации, и компелируем её и создаем проект.

Код программы:

#include <mega8.h>

// 1 Wire функция (загрузка параметров и адресса).

#asm

.equ __w1_port=0x12 ;PORTD

.equ __w1_bit=2

#endasm

#include <1wire.h>

// Загрузка данных датчика температуры DS1820

#include <ds1820.h>

// Функция буквенно-цифрового ЖКИ модуля.

#asm

.equ __lcd_port=0x18 ;PORTB

#endasm

Программы управления LCD

#include <lcd.h>

#include <delay.h>

#include <math.h>

#include <stdio.h>

#include <stdlib.h>

char lcd_buffer [33];

Максимальное количество датчиков Ds1820.

#define MAX_DEVICES 8

Область хранения РОМ кода устройств Ds1820

unsigned char rom_code [MAX_DEVICES][9];

// Генерируем код

main()

{

// Объявляем локальные переменные I и J

int temp;

unsigned char i,j,devices;

// Инициализируем порты ввода-вывода.

// Инициализируем порт В

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTB=0x00;

DDRB=0x00;

// Инициализируем порт С

// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTC=0x00;

DDRC=0x00;

// Инициализируем порт Д

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTD=0x00;

DDRD=0x00;

// инициализируем Таймер/счётчик 0

// Clock source: System Clock

// Clock value: Timer 0 Stopped

TCCR0=0x00;

TCNT0=0x00;

// инициализируем Таймер/счётчик 1

// Clock source: System Clock

// Clock value: Timer1 Stopped

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// инициализируем Таймер/счётчик 2

// Clock source: System Clock

// Clock value: Timer2 Stopped

// Mode: Normal top=FFh

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

// Инициализируем внешние прерывания.

// INT0: Off

// INT1: Off

MCUCR=0x00;

// Инициализируем Таймер(ы)/Счетчик(и) Энкримент(ы)

TIMSK=0x00;

UCSRA=0x00;

UCSRB=0x10;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x13;

// Инициализируем Аналоговый компаратор.

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

// Инициализируем LCD модуль.

lcd_init(16);

lcd_putsf ("KOVOLENKO\n1 1-Wire TERM");вводим значение     которое будет отображаться на модуле при его загрузке.

delay_ms(2000); время (прерывание)

lcd_clear();

// Инициализация 1 Wire.

w1_init();

Определим сколько устройств DS1820 подключено к шине 1 wire

devices=w1_search(0xf0,rom_code);

Похожие материалы

Информация о работе