Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Разработка прикладной программы



Последовательность шагов по разработке и отладке программы может быть следующей (проект формируем в папке z10):

1. Создаем новый проект выбирая:

File→New→Select Project

2. Выбираем использование CodeWizardAVR:

Use the CodeWizard?→Yes

3. В окнах CodeWizardAVR фиксируем тип МК и рабочую частоту:

Chip→Chip: ATmega16→Clock: 8MHz

4. Конфигурируем LCD-дисплей: LCD→PORTA→16

5. Конфигурируем Timer1: Timers→Timer1→

Clock Value: 1000kHz→Interrupt off: Timer1 Overflow→Val: 0xFFFF

6. Настраиваем прерывания: External IRQ→INT0 Enabled→Rising Edge

7. Генерируем файлы C source, C project и CodeWizardAVR project выбирая:

File|Generate, Save and Exit→

Create new directory: C:\cvavr\z10→

Save: z10.c→Save: z10.prj →Save: z10.cwp

8. Редактируем код C source (основная творческая часть по реализации алгоритма)

9. Смотрим или модифицируем конфигурацию проекта выбирая Project→Configure→After Make→Program the Chip

10. Компилируем программу выбирая:

Project→Make

11. Автоматически программируем ATmega16 на STK500:

Apply power→Information→Program.

Ниже приведен текст программы на языке Си. Для обеспечения возможности выводить на LCD-дисплей русские буквы в программу добавлена таблица кодов и функция void putchar(char c). Большую часть времени МК находится в цикле основной программы.

/*****************************************************

This program was produced by the

CodeWizardAVR V1.25.7 beta 5 Standard

Automatic Program Generator

© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project: Измеритель частоты сети

Version: от 17 до 99 Гц

Date: 10.11.2008

Author: Шарапов А.В.

Company: ПрЭ

Comments: курсовой проект

Chip type: ATmega16

Program type: Application

Clock frequency: 1,000000 MHz

Memory model: Small

External SRAM size: 0

Data Stack size: 256

*****************************************************/

#include <mega16.h>

// Alphanumeric LCD Module functions

#asm

.equ __lcd_port=0x1B;PORTA

#endasm

#include <lcd.h>

#include <stdio.h>

flash char Decode2Rus[255-192+1]= {

0x41,0xA0,0x42,0xA1,0xE0,0x45,0xA3,0xA4,

0xA5,0xA6,0x4B,0xA7,0x4D,0x48,0x4F,0xA8,

0x50,0x43,0x54,0xA9,0xAA,0x58,0xE1,0xAB,

0xAC,0xE2,0xAD,0xAE,0xAD,0xAF,0xB0,0xB1,

0x61,0xB2,0xB3,0xB4,0xE3,0x65,0xB6,0xB7,

0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0x6F,0xBE,

0x70,0x63,0xBF,0x79,0xE4,0x78,0xE5,0xC0,

0xC1,0xE6,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7

};

#define _ALTERNATE_PUTCHAR_

void putchar(char c)

{

if(c>=192) lcd_putchar(Decode2Rus[c-192]); else lcd_putchar(c);

}

// Declare your global variables here

unsigned int period=20000;

unsigned int f=500;

char lcd_buffer[33];// Буфер в ОЗУ для LCD-дисплея

// External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void)

{

// Place your code here

TCCR1B=0; //останов таймера

period=TCNT1L+256*TCNT1H;// Вычисление периода сети

TCNT1H=0;//обнуление таймера

TCNT1L=0;

TCCR1B=0x02;//запуск измерения нового периода

f=(100000000/period+5)/10;// Вычисление частоты сети

sprintf(lcd_buffer," power circuit frequency %u.%uHz",f/10,f%10);// Подготовка строки для LCD-дисплея

lcd_gotoxy(1,0);// Вывод строки со второй позиции в 1 строке

lcd_puts(lcd_buffer);

}

void main(void)

{

// Declare your local variables here

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: 1000,000 kHz

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer 1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x02;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// External Interrupt(s) initialization

// INT0: On

// INT0 Mode: Falling Edge

// INT1: Off

// INT2: Off

GICR|=0x40;

MCUCR=0x02;

MCUCSR=0x00;

GIFR=0x40;

// LCD module initialization

lcd_init(16);

// Global enable interrupts

#asm("sei")

while (1)

{

// Place your code here

};}





Дата публикования: 2014-11-04; Прочитано: 464 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...