Система регулирования дорожного движения

курсовая работа

-

Общий провод (земля)

В таблице использованы следующие обозначения: I -- вход; O -- выход; I/O -- вход/выход; P -- питание; - -- не используется; ТТЛ -- ТТЛ вход; ТШ -- вход триггера Шмитта.

Микроконтроллер содержит 8-разрядное АЛУ и рабочий регистр W. АЛУ является арифметическим модулем общего назначения и выполняет арифметические и логические функции над содержимым рабочего регистра и любого из регистров контроллера. АЛУ может выполнять операции сложения, вычитания, сдвига и логические операции. Если не указано иное, то арифметические операции выполняются в дополнительном двоичном коде.

В зависимости от результата операции, АЛУ может изменять значения бит регистра STATUS: C (Carry), DC (Digit carry) и Z (Zero).

Все перечисленные выше особенности данного микроконтроллера удовлетворяют требованиям для реализации системы светофоров.

2. Принцип действия устройства

2.1 Функциональная схема

Система управления

Данное устройство может работать автономно или под управлением компьютера. Который указывает устройству, какой свет включить в определенном направлении. Возможны следующие варианты включения светофоров:

нормальный режим

все красные

все зеленые

2.2 Описание элементов схемы

Схема питается от источника стабилизированного напряжения +5В. Тактовая частота микроконтроллера задается RC - цепью и составляет около 2 МГц. Порты RA0 - RA4 и RB0 используются для синхронизации с компьютером. Порты RA0 - RA3 (используются на вход) принимают данные от компьютера. Порт RA4 (используется на выход) выдает сигнал подтверждения приема данных. Порт RB0 (используется на вход) строб данных от компьютера. К линиям RB2 - RB7 посредствам транзисторов подключены 12 лампочек, которые имитируют светофоры. Лампочка загорается при низком уровне сигнала на выходе RB2 - RB7.

3. Программное обеспечение

3.1 Алгоритм программы

Словесное изложение алгоритма

Программа включает в себя бесконечный цикл в котором выполняется подпрограммы. Первая подпрограмма отвечает за инициализацию портов ввода/вывода. Вторая подпрограмма отвечает за нормальный режим работы системы. В ней выполняется включение лампочек светофоров через определенный промежуток времени. Задержка - вложенные циклы и выполняются они указанное количество раз. Третья подпрограмма отвечает за работу светофоров, учитывая информацию поступившую от компьютера. В ней анализируется полученная информация и выбирается вариант работы системы.

3.2 Листинг программы с комментариями

;******************************************************

;*листинг исходной программы

;******************************************************

list p=16c84, r=hex ;директива, определяющая тип

;процессора и систему счисления

;по умолчанию

;

;******************************************************

;*описание используемых переменных и назначения адресов

;*ячеек для хранения переменных пользователя

;******************************************************

PCL EQU 0x02

STATUS EQU 0x03

RP0 EQU 5

PORTA EQU 0x05

PORTB EQU 0x06

TRISA EQU 0x05

TRISB EQU 0x06

W EQU 0

F EQU 1

TEMPA EQU 0x0C

TEMPB EQU 0x0D

COUNT1 EQU 0x0E

COUNT2 EQU 0x0F

COUNT3 EQU 0x10

;

;******************************************************

;*определение меток замены текста

;******************************************************

;

#DEFINE Z STATUS,2 ;бит нулевого результата

#DEFINE VD1 PORTB,2 ;красный светодиод

#DEFINE VD2 PORTB,3 ;желтый светодиод

#DEFINE VD3 PORTB,4 ;зеленый светодиод

#DEFINE VD4 PORTB,5 ;красный светодиод

#DEFINE VD5 PORTB,6 ;желтый светодиод

#DEFINE VD6 PORTB,7 ;зеленый светодиод

#DEFINE KONT PORTB,0 ;подтверждение приема данных

#DEFINE KOMP PORTA,4 ;строб данных от компьютера

#DEFINE D0 PORTA,0 ;данные от компьютера

#DEFINE D1 PORTA,1 ;данные от компьютера

#DEFINE D2 PORTA,2 ;данные от компьютера

#DEFINE D3 PORTA,3 ;данные от компьютера

;

;******************************************************

;*исполняемая программа

;******************************************************

;

ORG 0x000 ;установка начального адреса по сбросу

GOTO START ;переход на начало программы

ORG 0x005 ;установка начального адреса размещения программы

START

CALL INIT_PORTS ;вызов подпрограммы инициализации портов МК

LOOP

CLRWDT ;сброс сторожевого таймера

CALL SVETOFOR

BTFSS TEMPA,0

CALL PROCESSING_DATA

GOTO LOOP ;переход к метке LOOP для повторения процесса

INIT_PORTS ;подпрограмма инициализации портов

MOVLW 0xFF ;установка линий портов

MOVWF PORTA ;A и B в единичное

MOVWF PORTB ;состояние

BSF STATUS,RP0 ;переход на банк 1

MOVLW 0xFF ;установка RB0-RB7

MOVWF TRISB ;на выход

BCF STATUS,RP0 ;возврат в банк 0

RETURN ;возврат из подпрограммы

SVETOFOR

;************************ горит VD1 и VD6 (красный и зеленый) ******************

BSF VD1 ;зажечь красный свет

BSF VD6 ;зажечь зеленый свет

MOVLW H32 ;пересылка константы 50 в W

MOVWF COUNT2 ;загрузка 50 в COUNT2

MOVWF COUNT1 ;загрузка 50 в COUNT1

LOOPD

DECFSZ COUNT1,F ;декремент COUNT1

CALL INPUT_DATA

BTFSS TEMPA,0 ; пропустить команду если (TEMPA,0) = 1

GOTO END_P

GOTO LOOPD ;

CLRWDT ;сброс сторожевого таймера

MOVWF COUNT1

DECFSZ COUNT2,F ;декремент COUNT2

GOTO LOOPD

;

;******* горит VD2 (желтый где горит красный) **********

;

BSF VD2 ;зажечь желтый свет

MOVLW HA ;пересылка константы 50 в W

MOVWF COUNT2 ;загрузка 50 в COUNT2

MOVWF COUNT1 ;загрузка 50 в COUNT1

LOOPD1

DECFSZ COUNT1,F ;декремент COUNT1

CALL INPUT_DATA

BTFSS TEMPA,0 ; пропустить команду если (TEMPA,0) = 1

GOTO END_P

GOTO LOOPD1 ;

CLRWDT ;сброс сторожевого таймера

MOVWF COUNT1

DECFSZ COUNT2,F ;декремент COUNT2

GOTO LOOPD1

;

;****** гаснет красный, желтый и зеленый ***********

;

BCF VD2

BCF VD1

BCF VD6

;

;***** горят другой красный и зеленый **************

;

BSF VD3

BSF VD4

MOVLW H32 ;пересылка константы 50 в W

MOVWF COUNT2 ;загрузка 50 в COUNT2

MOVWF COUNT1 ;загрузка 50 в COUNT1

LOOPD2

DECFSZ COUNT1,F ;декремент COUNT1

CALL INPUT_DATA

BTFSS TEMPA,0 ; пропустить команду если (TEMPA,0) = 1

GOTO END_P

GOTO LOOPD2 ;

CLRWDT ;сброс сторожевого таймера

MOVWF COUNT1

DECFSZ COUNT2,F ;декремент COUNT2

GOTO LOOPD2

;

;***** горит желтый где горит красный **********

;

BSF VD5 ;зажечь желтый свет

MOVLW HA ;пересылка константы 50 в W

MOVWF COUNT2 ;загрузка 50 в COUNT2

MOVWF COUNT1 ;загрузка 50 в COUNT1

LOOPD3

DECFSZ COUNT1,F ;декремент COUNT1

CALL INPUT_DATA

BTFSS TEMPA,0 ; пропустить команду если (TEMPA,0) = 1

GOTO END_P

GOTO LOOPD3 ;

CLRWDT ;сброс сторожевого таймера

MOVWF COUNT1

DECFSZ COUNT2,F ;декремент COUNT2

GOTO LOOPD3

;

;***** гаснут красный, желтый и зеленый ***********

;

BCF VD5

BCF VD4

BCF VD3

END_P

RETURN

INPUT_DATA ;подпрограмма проверки порта А

MOVF PORTA,W ;чтение состояния порта А в W

MOVWF TEMPA ;пересылка W в TEMPA

RETURN

PROCESSING_DATA ;подпрограмма анализирования принятых данных

BEGIN

MOVF PORTA,W ;чтение состояния порта А в W

MOVWF TEMPA ;пересылка W в TEMPA

ANDLW 0x7 ;наложение на W маски b00000111

SUBWF TEMPA,W ;вычитание W из TEMPA

BTFSC Z ;пропустить команду, если результат нулевой

GOTO TWO

GOTO END_PP

;

;************красный свет во всех направлениях*************

;

TWO

CLRF COUNT1 ;обнуление регистра COUNT1

MOVWF COUNT1 ;пересылка W в COUNT1

INCF COUNT1 ;инкрементирование COUNT1

MOVF COUNT1,W

SUBWF TEMPA,W

BTFSC Z

GOTO THREE

BSF VD1

BSF VD4

V1

CALL INPUT_DATA

BTFSS TEMPA,0

GOTO BEGIN

GOTO V1

;

;**********зеленый свет во всех направлениях************

;

THREE

CLRF COUNT1

MOVWF COUNT1

INCF COUNT1

MOVF COUNT1,W

SUBWF TEMPA,W

BTFSC Z

NOP ;пустая команда предназначение здесь т. к. все варианты проверены)

BSF VD3

BSF VD6

V2

CALL INPUT_DATA

BTFSS TEMPA,0

GOTO BEGIN

GOTO V2

END_PP

RETURN

END ;конец программы

Приложение

Размещено на www.allbest.

Делись добром ;)