3.5 Проектирование процедуры Main()

Процедура Main это главная процедура программы с которой начинается выполнение. В данной процедуре необходимо вызвать процедуру инициализации, а затем необходимо перейти в бесконечный цикл опроса датчика, измерения и дешифрации величин, отображение данных выполняется по прерываниям таймера. На рисунке 12 приведен общий алгоритм работы устройства.

Рисунок 12 – Общий алгоритм работы устройства


4.         Листинг программы

#include <msp430F135.h>

void vLCD_Silence(void);/*Состояние выводов "по умолчанию"*/

void vLCD_Init(void);/*Инициализация дисплея*/

void vLCD_Clear();/*Очистка дисплея*/

void vLCD_RetLeft();/*Перемещение курсора в левую позицию*/

void vLCD_EntryModeSet(char ID,char SH);/*Установка направления сдвига курсора

(ID=0/1 - влево/вправо) и разрешение сдвига дисплея (SH=1) при записи в DDRAM*/

void vLCD_OnOff(char D,char CB);/*Включает модуль (D=1) и выбирает тип курсора (см. даташит)*/

void vLCD_CurDispShift(char SC,char RL);/*Выполнияет сдвиг дисплея или курсора

(SC=0/1 - курсор/дисплей, RL=0/1 - влево/вправо)*/

void vLCD_FuncSet(char DL,char _N,char _F);/*Устанавливает разрядность интерфейса

(DL=0/1 - 4/8 бита), режим развертки строк (_N=0/1 - одна строка/две строки)

и размер символа (_F=0/1 - 5х8/5х10)*/

void vLCD_SetAddr(char ADD);/*Установка адреса для последующих операций и выбор области DDRAM*/

void vLCD_WriteData(char DATA);/*Запись данных в активную область*/

void vLCD_Delay(char a);/*Задержка на 0/1 - 40 мкс/1.95 мс */

/*Команды(0)/Данные(1)*/

void vRS(char set)

{

if(set)

P3OUT|=0x80;

else

P3OUT&=~0x80;

}

/*Синхронизация*/

void vEN(char set)

{

if(set)

P3OUT|=0x40;

else

P3OUT&=~0x40;

_NOP();

}

/*Запись в индикатор

RS - команды(0)/данные(1); Data - тело команды/данных*/

void vLCD_Write(char RS, char Data)

{

vRS(RS);

_NOP();

//_NOP();

P1OUT&=Data|0x0f;//Запись старшей тетрады.

vEN(1);

_NOP();

//_NOP();

vEN(0);

_NOP();

//_NOP();

P1OUT&=~0xf0;

P1OUT|=(Data<<4)&~0x0f;//Запись младшей тетрады.

_NOP();

//_NOP();

vEN(1);

_NOP();

//_NOP();

vEN(0);

_NOP();

//_NOP();

P1OUT|=0xf0;//Устанавливает на выводах состояние "по умолчанию".

_NOP();

//_NOP();

}

/*Состояние выводов "по умолчанию"*/

void vLCD_Silence(void)

{

vEN(0);

vRS(0);

P1OUT=0xf0;

}

/*Инициализация дисплея*/

void vLCD_Init(void)

{

for(char i=0;i<21;i++)

vLCD_Delay(1);//задержка на 40 мс.

vRS(0);

_NOP();

P1OUT&=0x30|0x0f;//Запись старшей тетрады.

vEN(1);

_NOP();

vEN(0);

_NOP();

P1OUT|=0xf0;//Устанавливает на выводах состояние "по умолчанию".

_NOP();

for(char i=0;i<3;i++)

vLCD_Delay(1);//задержка на 4.1 мс.

vLCD_FuncSet(0,0,0);//4-х разрядная шина, развертка 1 строк, символ 5х8.

vLCD_FuncSet(0,1,0);//4-х разрядная шина, развертка 1 строк, символ 5х8.

vLCD_OnOff(1,0);//Вкл. модуля, выкл. курсора.

vLCD_Clear();//Очистка DDRAM.

vLCD_EntryModeSet(1,0);//Сдвиг курсора вправо, сдвиг дисплея запрещен.

}

/*Очистка дисплея*/

void vLCD_Clear()

{

vLCD_Write(0,0x01);

vLCD_Delay(1);

}

/*Перемещение курсора в левую позицию*/

void vLCD_RetLeft()

{

vLCD_Write(0,0x02);

vLCD_Delay(1);

}

/*Установка направления сдвига курсора (ID=0/1 - влево/вправо)

и разрешение сдвига дисплея (SH=1) при записи в DDRAM*/

void vLCD_EntryModeSet(char ID,char SH)

{

char Data=0x04+(ID<<1)+SH;

vLCD_Write(0,Data);

vLCD_Delay(0);

}

/*Включает модуль (D=1) и выбирает тип курсора (см. даташит)*/

void vLCD_OnOff(char D,char CB)

{

char Data=0x08+(D<<2)+CB;

vLCD_Write(0,Data);

vLCD_Delay(0);

}

/*Выполнияет сдвиг дисплея или курсора (SC=0/1 - курсор/дисплей,

RL=0/1 - влево/вправо)*/

void vLCD_CurDispShift(char SC,char RL)

{

char Data=0x10+(SC<<3)+(RL<<2);

vLCD_Write(0,Data);

vLCD_Delay(1);

}

/*Устанавливает разрядность интерфейса (DL=0/1 - 4/8 бита), режим развертки bстрок (N=0/1 - одна строка/две строки) и размер символа (F=0/1 - 5х8/5х10)*/

void vLCD_FuncSet(char DL,char _N,char _F)

{

char Data=0x20+(DL<<4)+(_N<<3)+(_F<<2);

vLCD_Write(0,Data);

vLCD_Delay(0);

}

/*Установка адреса для последующих операций и выбор области DDRAM*/

void vLCD_SetAddr(char ADD)

{

ADD+=0x80;

vLCD_Write(0,ADD);

vLCD_Delay(0);

}

/*Запись данных в активную область*/

void vLCD_WriteData(char DATA)

{

vLCD_Write(1,DATA);

vLCD_Delay(0);

}

/*Задержка на 0/1 - 40 мкс/1.95 мс */

void vLCD_Delay(char a)

{

IFG1&=~WDTIFG;//Сбросили очередной флаг прерывания...

//Запуск Собаки с очисткой.

if(a)

WDTCTL=0x5A00 | 0x1f;//TMSEL,SSEL,WDIS.1,WDIS.0 - период 1.95 мс.

else

WDTCTL=0x5A00 | 0x1b;//TMSEL,WDIS.1,WDIS.0 0 - период 12.8 мкс.

char z=1;

if(!a)z=4;

for(char i=0;i<z;i++)

{

while(!(IFG1&WDTIFG))

_NOP();//пока нет прерывания от Собаки - висим.

IFG1&=~WDTIFG;//Сбросили очередной флаг прерывания...

}

//Остановка Собаки.

WDTCTL=0x5A00 | 0x93;//HOLD,TMSEL,WDIS.1,WDIS.0

}

/*Вывод строки c позиции line,column до конца строки. Если фактическая длинна строки больше, строка переписывается с начальной позиции.

Начало строки: line - номер строки сверху (0-3),

column - позиция первого символа в строке, string - строка символов*/

void vLCD_TransMassive(unsigned char line,unsigned char column,

unsigned char string[])

{

//Для корректной работы следует установить следующий режим:

//vLCD_EntryModeSet(1,0);//Сдвиг курсора вправо, сдвиг дисплея запрещен.

unsigned char ADD=line,ColumnCounter=column;

/*Вычисляем ардес в DDRAM*/

switch(ADD)

{

case 3:

ADD=0x54;

break;

case 2:

ADD=0x14;

break;

case 1:

ADD=0x40;

case 0:

break;

default:

ADD=0x00;

}

if(column>19)

column=0;

ADD+=column;

vLCD_SetAddr(ADD);//Установка адреса.

for(char i=0;;i++)//Запись строки (бесконечный цикл).

{

if(string[i]=='\0')//Если обнаружен симовл конца строки - выход из цикла.

return;

else

{

vLCD_WriteData(string[i]);

if(++ColumnCounter>19)//Если достигнут физический конец строки,

{

vLCD_SetAddr(ADD);//продолжаем запись с начальной позиции.

ColumnCounter=column;

}

}

}

_NOP();

}


Заключение

В данном курсовом проекте было разработано удаленное устройство индикации.

Использование внешнего кварцевого генератора обеспечивает высокую стабильность работы последовательного коммуникационного интерфейса (USART).

В ходе проектирования устройства были рассмотрены основные принципы построения устройств на микроконтроллерах MSP430 от Texas Instruments. А так же изучены аппаратные возможности данных микроконтроллеров.

Научились по описаниям работы или временным диаграммам функционирования устройств составлять алгоритмы тех или иных блоков программ.

В целом по разработанному курсовому проекту можно заметить, что использование микроконтроллеров MSP430 позволяет строить недорогие и производительные микроконтроллерные системы не использую внешнее периферийное оборудование (аналоговый компаратор, аппаратный тайме и др.).


Информация о работе «Построение компьютерной системы на микроконтроллере»
Раздел: Информатика, программирование
Количество знаков с пробелами: 15138
Количество таблиц: 2
Количество изображений: 12

Похожие работы

Скачать
326231
12
0

... рисунков в формате А0-А1 со скоростью 10-30 мм/с. Фотонаборный аппарат Фотонаборный аппарат можно увидеть только в солидной полиграфической фирме. Он отличается своим высоким разрешением. Для обработки информации фотонаборный аппарат оборудуется процессором растрового изображения RIP, который функционирует как интерпретатор PostScript в растровое изображение. В отличие от лазерного принтера в ...

Скачать
132911
10
46

... несчастных случаев. Рассмотрен вопрос о мероприятиях по защите окружающей среды. 7. Технико-экономическое обоснование проекта   7.1. Выбор и обоснование аналога В качестве аналога автоматизированной системы управления тепличным хозяйством выберем комплекс «АСУ «Теплица» ЗАО “НАНКО”, который реализует следующие основные функции: ·  регистрацию и отображение значений контролируемых ...

Скачать
157854
4
9

... ). Подпрограмма завершена, управление передается назад вызывавшему модулю.   6. Технико-экономическое обоснование   6.1 Пути снижения затрат за счет внедрения системы Внедрение автоматической системы управления маслонапорной установкой гидроэлектростанции решает следующие задачи -           Полностью автоматическая система управления маслонапорной установкой не требует участия человека ...

Скачать
67372
0
0

... ход выполнения программы и видеть соответствие между исходным текстом, образом программы в машинных кодах и состоянием всех ресурсов эмулируемого микроконтроллера. Следует отметить, что высокоуровневый отладчик обеспечивает выполнение всех своих функций только в том случае, если используется кросс-компилятор, поставляющий полную и правильную отладочную информацию (не все компиляторы, особенно их ...

0 комментариев


Наверх