- •А.В. Шарапов
- •1. Основные этапы выполнения курсового проекта по проектированию микропроцессорных систем
- •1.1 Конкретизация технического задания
- •1.2. Разработка функциональной схемы устройства,
- •1.3. Разработка схемы алгоритма прикладной программы
- •1.4. Разработка принципиальной электрической схемы
- •1.5. Разработка прикладной программы
- •1.6. Оформление и защита проекта
- •2. Варианты заданий на курсовое проектирование
- •3. Средства разработки программы на языке си, компиляторы и симуляторы
- •4. Язык си для микроконтроллеров
- •Структура программы на языке Си
- •Пункт 4. Объявление переменных
- •5. Загрузка программы в микроконтроллер
- •6. Моделирование работы микроконтроллера avrс помощью симулятораvmlab
- •Программа работы
- •Xdisp lcd(16 2 250k) pa0 pa1 pa2 pa7 pa6 pa5 pa4 nc3 nc2 nc1 nc0
- •Void main(void){
- •If(pind.6){
- •Контрольные вопросы
- •8. Пример выполнения курсового проекта измеритель частоты сети
- •Обоснование алгоритма решения задачи
- •Разработка прикладной программы
- •Version : от 17 до 120 Гц
- •0X41,0xA0,0x42,0xA1,0xE0,0x45,0xA3,0xA4,
- •Моделирование работы устройства с помощью proteus
- •Приложение а
- •2009 Приложение б
- •Приложение в
- •Приложение г
- •Приложение д
- •Приложение ж
- •Приложение и
- •Приложение к
- •Литература
Version : от 17 до 120 Гц
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
};}
Моделирование работы устройства с помощью VMLAB
Ниже приведен файл проекта для симулятора. Для моделирования работы измерителя частоты сети к входу INT0 подключается генератор прямоугольных импульсов, период которого можно задавать программно. К порту РА подключен LCD-дисплей (две строки по 16 символов).
; файл z10_vm.prj
.MICRO "ATmega16"
.TOOLCHAIN "GENERIC"
.TARGET "z.hex"
.COFF "z.cof"
.SOURCE "z__.c"
.CLOCK 8meg
.POWER VDD = 5 VSS = 0
;V[inst_name] node VSS PULSE(v_initial v_final t_delay t_rise ;t_fall t_width ;t_period)
V1 PD2 VSS PULSE(0 5 0 0 0 5m 21m)
;X[inst_name] LCD(chars lines oscil_freq) RS RW E D7 D6 D5 D4 D3 D2 D1D0
Xdisp LCD(16 2 250K) PA0 PA1 PA2 PA7 PA6 PA5 PA4 nc3 nc2 nc1 nc0
Цель моделирования (рис.12) – проверка работоспособности выбранного алгоритма и оценка времени, которое микроконтроллер затрачивает на обработку информации. При проведении эксперимента раскрываем рабочие окна: Peripherals (окно периферийных устройств, чтобы пронаблюдать значение таймера Т1), I/O Ports (окно портов ввода/вывода, чтобы увидеть подачу импульсов на линию PD2), Control Panel (экран жидкокристаллического индикатора).
При моделировании подключался файл Z10.hex, сформированный при трансляции программы, подготовленной на языке Си (страницы 58-60 настоящего пособия), с выводом информации на русском языке (частота сети 47.6 Гц).

Рисунок 12 – Рабочие окна симулятора VMLAB
В окне Code (текст программы на языке Си) ставим точки останова перед открывающей и закрывающей скобкой подпрограммы прерывания и, проведя цикл измерения частоты (для этого дважды нажимаем зеленую кнопку светофора), определяем по данным окна Messages время выполнения подпрограммы прерывания. Оно составило 3,81 мс, что говорит о работоспособности выбранного алгоритма определения частоты. Практически каждый период сетевого напряжения обновляется значение рассчитываемой частоты.
В окне Program Memory можно увидеть машинные коды выполняемых команд и соответствующие им команды на языке ассемблера микроконтроллера. Можно реализовать пошаговое выполнение команд, нажимая кнопочку правее светофора.
