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

 

Последовательность шагов по разработке и отладке программы может быть следующей (проект формируем в папке 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

};}








Дата добавления: 2016-01-09; просмотров: 690;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.01 сек.