//********************************************************************
//имя файла: 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);