Стивен Барретт - Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
- Название:Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
- Автор:
- Жанр:
- Издательство:Издательский дом «ДМК-пресс»
- Год:2007
- Город:Москва
- ISBN:5-9706-0034-2
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Барретт - Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С краткое содержание
В книге последовательно рассматриваются все этапы создания встраиваемых систем на микроконтроллерах с применением современных технологий проектирования. Задумав эту книгу, авторы поставили перед собой задачу научить читателя искусству создания реальных устройств управления на однокристальных микроконтроллерах.
Издание содержит материал, охватывающий все вопросы проектирования, включает множество заданий для самостоятельной работы, примеры программирования, примеры аппаратных решений и эксперименты по исследованию работы различных подсистем микроконтроллеров.
Данная книга является прекрасным учебным пособием для студентов старших курсов технических университетов, которые предполагают связать свою профессиональную деятельность с проектированием и внедрением встраиваемых микропроцессорных систем. Книга также будет полезна разработчикам радиоэлектронной аппаратуры на микроконтроллерах.
Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:

Рис. 7.12.К программе управления лазерным проектором: блок-схема алгоритма (слева), структура программы (вверху справа), шестнадцатеричные значения к диаграмме ЦАП (внизу справа)
Система сначала инициализируется, устанавливая порты в необходимый режим (вход или выход) и закрывая лазерный затвор. Затем программа считывает информацию из порта PORTA, чтобы определить, нажат ли переключатель. Если он нажат, используется команда переключателя, позволяющая определить выбранное изображение. Код, необходимый для создания данного изображения обеспечивается выбором переключателя. Чтобы создать изображение, лазер сначала перемещается в требуемую исходную позицию для заданной траектории. Затем открывается лазерный затвор, и соответствующая траектория обеспечивается последовательностью положений лазерного луча в различные моменты времени. Мы приводим несколько примеров, и затем предлагаем вам самостоятельно, сформировать оставшиеся варианты в качестве домашней работы (задание 14).
7.2.6. Программный код
//********************************************************************
//имя файла: laser.с
//функции: программа для управления лазерным проектором
//контроллер: отладочная плата 68HC12B32 фирмы Motorola
//Выводы отладочной платы микроконтроллера 68HC12B32 фирмы Motorola:
//Port A: Конфигурирован как входной порт, активируемый нажатием
// бездребезговых переключателей на каждом входе
//Port B: Конфигурирован как выходной порт для управления светодиодным
// индикатором
//Port S: Конфигурирован как выходной порт, создающий двоичный код
// на канале X ЦАП
//Port T: Конфигурирован как выходной порт, создающий двоичный код
// на канале Y ЦАП
//Port P[0]: Конфигурирован как выходной порт, создающий TTL совместимый
// сигнал для управления затвором
//авторы: Steve Barrett and Daniel Pack
//создан: февраль 20, 2003
//последняя редакция: март 3, 2004
//********************************************************************
//включенные файлы
//********************************************************************
#include <912b32.h>
//функции прототипов
void initialize_ports(void); //инициализация портов
void shutter(int); //открытие/закрытие створок
void position_laser(unsigned char, unsigned char); // положение лазера
void delay(void);
#define open 1
#define close 0
//main program*************************************************************
//global variables
unsigned char new_PORTA, old_PORTA = 0xFF;
int i;
int go;
void main(void) {
//инициализировать вектор reset B32
asm(".area vectors(abs)\n"
".org 0xFFF8\n"
".word 0x8000, 0x8000, 0x8000, 0x8000\n"
".text");
go = 1; //начало цикла while
initialize_ports(); //инициализировать порты
shutter(close); //закрыть створки
position_laser(0x80,0x80); //расположить луч в центре
while(go) { //продолжать, пока не нажмут кнопку Stop
new_PORTA = PORTA; //read PORTA input switches
if (new_PORTA != old_PORTA) switch(new_PORTA){ //формировать образ по значению
//нажатой клавиши
case 0x7F: //PA7 - Точка в центре экрана
PORTB = 0x80;// подсвечивает светодиод порта PORTE
position_laser(0x80,0x80);
shutter(open);
delay();
shutter(close);
PORTB=0x00; //включает красные светодиоды индикатора
break;
case 0xBF: //PA6- горизонтальная линия
position_laser(0x00,0x80);
shutter(open);
for{i=0; i<=255; i++) {
i = (unsigned char)(i);
position_laser(i, 0x80);
delay();
}
shutter(close);
PORTB=0x00; //включает красные светодиоды индикатора
break;
case 0xDF: //PA5 - Вертикальная линия
PORTB = 0x20; // подсвечивает светодиод порта PORTB
position_laser(0x80,0x00);
shutter(open);
for(i=0; i<=255;i++) {
i=(unsigned char)(i);
position_laser(0x80,i);
delay();
}
shutter(close);
PORTB=0x00; //включает красные светодиоды индикатора
break;
case 0xFF: //PA4 - Правая пила под углом 45 градусов
// с Юго-Запада на СВ
PORTB = 0x10; // подсвечивает светодиод порта PORTB
position_laser(0x00,0x00);
shutter(open);
for(i=0; i<=255; i++) {
i = (unsigned char)(i);
position_laser(i, i);
delay();
}
shutter(close);
PORTB=0x00; //включает красные светодиоды индикатора
break;
case 0xF7: //PA3 - Левая пила под углом 45 градусов
//с ЮВ на СЗ
PORTB = 0x08; // подсвечивает светодиод порта PORTB
delay();
PORTB=0x00; // включает красные светодиоды индикатора
break;
case 0xFB: //PA2 Окружность
PORTB = 0x04; // подсвечивает светодиод порта PORTB
delay();
PORTB=0x00; //включает красные светодиоды индикатора
break;
case 0xFD: //PA1 Синусоида
PORTB = 0x02; // подсвечивает светодиод порта PORTB
delay();
PORTB=0x00; // включает красные светодиоды индикатора
break;
case 0xFE: //PA0 Остановка
PORTB = 0x01; // подсвечивает светодиод порта PORTB
position_laser(0x00,0x00);
shutter(close);
delay();
PORTB=0x00; // включает красные светодиоды индикатора
go = 0;
break;
case 0xFF:
break;
default:
; //все остальные случаи
}//конец switch(new_PORTA)
old_PORTA = new_PORTA;
}//конец if(new_PORTA ! = old_PORTA)
}//конец while(go)
}//конец main
//********************************************************************
// initialize_ports: производится конфигурация портов в качестве
//входных/выходных
//********************************************************************
void initialize_ports(void)
{
DDRA=0x00; //установить PORTA в качестве входного порта
DDRB=0xFF; //установить PORTB в качестве выходного порта
PORTB=0x00; //включить красные светодиоды индикатора
DDRS=0xFF; //установить PORTT в качестве выходного порта
DDRP=0xFF; //установить PORTP в качестве выходного порта
}
//********************************************************************
/// /shutter(int action) : открытие и закрытие затвора
//********************************************************************
void shutter(int action) {
if (action == open) PORTP = 0x01;
if (action == close) PORTP = 0x00;
}
//********************************************************************
//position_laser(unsigned char x_pos, unsigned char y_pos): посылает
//сигнал управления для каналов X и Y гальванометра из портов PORTS
//и PORTT соответственно.
//********************************************************************
void position_laser(char x_pos,char y_pos) {
PORTS = x_pos;
PORTT = y_pos;
}
//********************************************************************
//delay(void): создает задержку
Интервал:
Закладка: