Читаем Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С полностью

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

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

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже