Микропроцессорная система управления объектом

Автор работы: Пользователь скрыл имя, 14 Февраля 2013 в 01:07, курсовая работа

Краткое описание

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

Содержание

ВВЕДЕНИЕ 5
1 ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА ПРОЕКТИРОВАНИЕ 7
1.1 Алгоритм работы МПС 8
1.2 Обработка цифровой информации 9
1.3 Обработка аналоговой информации 10
1.4 Обработка запросов на прерывания 11
1.5 Пульт управления 13
2 РАЗРАБОТКА СТРУКТУРНОЙ СХЕМЫ УСТРОЙСТВА 14
3 РАЗРАБОТКА ПРИНЦИПИАЛЬНОЙ СХЕМЫ БЛОКА ЧТЕНИЯ С ДАТЧИКОВ 17
3.1 Чтение информации с бинарных датчиков 17
3.2 Чтение информации с аналоговых датчиков 19
4 РАЗРАБОТКА ПРИНЦИПИАЛЬНОЙ СХЕМЫ БЛОКА ВЫВОДА УПРАВЛЯЮЩИХ СИГНАЛОВ 21
4.1 Блок вывода аналогового управляющего сигнала 21
5 РАЗРАБОТКА ПРИНЦИПИАЛЬНОЙ СХЕМЫ БЛОКА ПОСЛЕДОВАТЕЛЬНОГО КАНАЛА СВЯЗИ 22
Преимущества 22
Недостатки 22
6 РАЗРАБОТКА ПРИНЦИПИАЛЬНОЙ СХЕМЫ ПУЛЬТА УПРАВЛЕНИЯ 24
7 РАЗРАБОТКА СТРУКТУРЫ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ОБЩЕГО АЛГОРИТМА УПРАВЛЕНИЯ 26
8 РАЗРАБОТКА АЛГОРИТМА РАБОТЫ БЛОКА ЧТЕНИЯ ИНФОРМАЦИИ С ЦИФРОВЫХ ДАТЧИКОВ 28
9 РАЗРАБОТКА АЛГОРИТМА РАБОТЫ БЛОКА ЧТЕНИЯ ИНФОРМАЦИИ С АНАЛОГОВЫХ ДАТЧИКОВ 30
10 РАЗРАБОТКА АЛГОРИТМА РАБОТЫ БЛОКА ОБМЕНА ДАННЫМИ ПО ПОСЛЕДОВАТЕЛЬНОМУ КАНАЛУ СВЯЗИ 32
11 РАЗРАБОТКА АЛГОРИТМА РАБОТЫ БЛОКА ВЗАИМОДЕЙСТВИЯ С ОПЕРАТОРОМ 34
12 РАЗРАБОТКА АЛГОРИТМА РАБОТЫ ОБРАБОТКИ АВАРИЙНЫХ СИТУАЦИЙ 36
13 РАСЧЕТ ЭЛЕКТРИЧЕСКИХ ПАРАМЕТРОВ МИКРОПРОЦЕССОРНОЙ СИСТЕМЫ УПРАВЛЕНИЯ 38
14 РАЗРАБОТКА БЛОКА ПИТАНИЯ ДЛЯ МИКРОПРОЦЕССОРНОЙ СИСТЕМЫ УПРАВЛЕНИЯ 39
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 41
ПРИЛОЖЕНИЕ А 42
(ОБЯЗАТЕЛЬНОЕ) 42
СХЕМА ЭЛЕКТРИЧЕСКАЯ ПРИНЦИПИАЛЬНАЯ МИКРОПРОЦЕССОРНОЙ СИСТЕМЫ УПРАВЛЕНИЯ 42
ПРИЛОЖЕНИЕ Б 47

Вложенные файлы: 1 файл

Курсач_ГОТОВ!.docx

— 1.06 Мб (Скачать файл)

BSF  INTCON,GIE   ;РАЗРЕШИТЬ ГЛАБАЛЬНЫЕ ПРЕРЫВАНИЯ

RETFIE                     ;ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ В ОСНОВНУЮ ПРОГРАММУ

;----------------------------------------------------

 

; ИНИЦИАЛИЗАЦИЯ

;----------------------------------------------------

INIT_START

;ИНИЦИАЛИЗАЦИЯ ПОРТОВ

BANC0

BCF INTCON,GIE    ;ЗАПРЕТИТЬ ПРЕРЫВАНИЯ

CLRF PORTA    ;ОЧИСТКА ПОРТОВ

CLRF PORTB  

CLRF PORTC

BANC1

MOVLW B'00101000'

MOVWF TRISA    ;ЛИНИИ RA3-RA5 НФ ВВОД

MOVLW B'01111110'

MOVWF TRISB    ;ЛИНИИ RB6-RB1 НА ВВОД, RB7 НА ВЫВОД СИГНАЛИЗАЦИИ

MOVLW B'11011001'

MOVWF TRISC

;ИНИЦИАЛИЗАЦИЯ МОДУЛЯ USART

BANC0

MOVLW B'10010000'

MOVWF RCSTA    ;ВКЛЮЧИТЬ USART И РАЗРЕШИТЬ ПРИЕМ

BANC1

MOVLW B'00101000'

MOVWF TXSTA    ;АСИНХРОННЫЙ НИЗКОСКОРОСТНОЙ РЕЖИМ ПЕРЕДАЧИ

MOVLW 0x03

MOVWF SPBRG    ;СКОРОСТЬ ОБМЕНА 76800 БИТ/С

;ИНИЦИАЛИЗАЦИЯ МОДУЛЯ MSSP

BANC0

MOVLW B'00001000'

MOVWF SSPCON    ;ВЕДУЩИЙ РЕЖИМ I2C

BANC1

MOVLW B'01000000'   

MOVWF SSPSTAT    ;УПРАВЛЕНИЕ ДЛИТЕЛЬНОСТЬЮ ФРОНТА ВЫКЛЮЧЕН, ВЫХ. УРОВНИ СООТВЕТСТВУЮТ СПЕЦИФИКАЦИИ I2C SMBus

MOVLW 0x0C

MOVWF SSPADD    ;ТАКТОВАЯ ЧАСТОТА 400 кГц

CLRF SSPCON2

;ИНИЦИАЛИЗАЦИЯ МОДУЛЯ ADC

MOVLW B'00000100'

MOVWF ADCON1    ;ЛЕВОЕ ВЫРАВНИВАНИЕ, ИСПОЛЬЗУЮТСЯ AN0, AN1, AN3

BANC0

MOVLW B'10000001'

MOVWF ADCON0    ;МОДУЛЬ АЦП ВКЛЮЧЕН, ТАКТОВАЯ ЧАСТОТА Fosc/32, ВЫБРАН КАНАЛ AN0

;ИНИЦИАЛИЗАЦИЯ ТАЙМЕРА TMR0 + ПОДТЯГИВАЮЩИЕ  РЕЗИСТОРЫ ПОРТА Б + INT ПО ЗАДНЕМУ  ФРОНТУ

BANC1

MOVLW B'00010101'

MOVWF OPTION_REG   ;КОЭФФИЦИЕНТ ДЕЛЕНИЯ ПРЕДДЕЛИТЕЛЯ 1:64, ВНУТРЕННИЙ ИСТОЧНИК Fosc/4

BANC0 

CLRF TMR0    ;ОЧИСТКА РЕГИСТРА

;ИНИЦИАЛИЗАЦИЯ ТАЙМЕРА TMR1

MOVLW B'00000010'   ;КОЭФФИЦИЕНТ ДЕЛЕНИЯ ПРЕДДЕЛИТЕЛЯ 1:1

;СИНХРОНИЗАЦИЯ ВКЛЮЧЕНА

;ВНЕШНИЙ ИСТОЧНИК ТАКТОВЫХ ИМПУЛЬСОВ

MOVWF T1CON

CLRF TMR1L    ;ОЧИСТКА РЕГИСТРОВ TMR1L И TMR1H

CLRF TMR1H    ;ТЕМ САМЫМ ОБЕСПЕЧИВАЕМ СИГНАЛ В 765 мс

;ИНИЦИАЛИЗАЦИЯ РАБОТЫ ИНДИКАТОРА  И ВКЛЮЧЕНИЕ MSSP

BSF  SSPCON, SSPEN  ;ВКЛЮЧИТЬ МОДУЛЬ MSSP

MOVLW SSPBUF

MOVWF FSR     ;ТАКИМ ОБРАЗОМ ПРИ ПЕРЕДАЧЕ В SSPBUF НЕ НУЖНО ПЕРЕКЮЧАТЬСЯ МЕЖДУ РЕГИСТРАМИ

;ИНИЦИАЛИЗАЦИЯ РИ1 И РИ2

BANC1

BSF  SSPCON2, SEN  ;СГЕНЕРИРОВАТЬ БИТ START

BTFSC SSPCON2, SEN  ;ОЖИДАТЬ ОКОНЧАНИЯ ГЕНЕРАЦИИ БИТА START

GOTO $-1

MOVLW ADR_IND12   ;ПЕРЕДАТЬ АДРЕС МОДУЛЯ

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1 

MOVLW CB_PORT_OUT   ;ЗАГРУЖАЕМ COMMAND BYTE ДЛЯ ЗАДАНИЯ РЕЖИМА ВЫДАЧИ СИГНАЛОВ С МР

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

MOVLW S_PORT_OUT   ;ПОРТ РИ1 НА ВЫВОД(ОТОБРАЖЕНИЕ)

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

MOVLW S_PORT_OUT   ;ПОРТ РИ2 НА ВЫВОД(ОТОБРАЖЕНИЕ)

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

BSF  SSPCON2, RSEN  ;СГЕНЕРИРОВАТЬ БИТ RESTART

BTFSC SSPCON2, RSEN  ;ОЖИДАТЬ ОКОНЧАНИЯ ГЕНЕРАЦИИ БИТА RESTART

GOTO $-1

MOVLW CB_SEL_PORT   ;ЗАГРУЖАЕМ КОНСТАНТУ ДЛЯ ОТПРАВКИ ДАННЫХ НА РИ1 И РИ2

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

MOVLW S_PORT_OFF   ;ОТКЛЮЧИТЬ ИНДИКАЦИЮ РИ1

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

MOVLW S_PORT_OFF   ;ОТКЛЮЧИТЬ ИНДИКАЦИЮ РИ2

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

BSF  SSPCON2, PEN  ;СФОРМИРОВАТЬ БИТ STOP

;ИНИЦИАЛИЗАЦИЯ РИ3 И РИ4

BSF  SSPCON2, SEN  ;СГЕНЕРИРОВАТЬ БИТ START

BTFSC SSPCON2, SEN  ;ОЖИДАТЬ ОКОНЧАНИЯ ГЕНЕРАЦИИ БИТА START

GOTO $-1

MOVLW ADR_IND34   ;ПЕРЕДАТЬ АДРЕС МОДУЛЯ

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1 

MOVLW CB_PORT_OUT   ;ЗАГРУЖАЕМ COMMAND BYTE ДЛЯ ЗАДАНИЯ РЕЖИМА ВЫДАЧИ СИГНАЛОВ С МР

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

MOVLW S_PORT_OUT   ;ПОРТ РИ3 НА ВЫВОД(ОТОБРАЖЕНИЕ)

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

MOVLW S_PORT_OUT   ;ПОРТ РИ4 НА ВЫВОД(ОТОБРАЖЕНИЕ)

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

BSF  SSPCON2, RSEN  ;СГЕНЕРИРОВАТЬ БИТ RESTART

BTFSC SSPCON2, RSEN  ;ОЖИДАТЬ ОКОНЧАНИЯ ГЕНЕРАЦИИ БИТА RESTART

GOTO $-1

MOVLW CB_SEL_PORT   ;ЗАГРУЖАЕМ КОНСТАНТУ ДЛЯ ОТПРАВКИ ДАННЫХ НА РИ3 И РИ4

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

MOVLW S_PORT_OFF   ;ОТКЛЮЧИТЬ ИНДИКАЦИЮ РИ3

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

MOVLW S_PORT_OFF   ;ОТКЛЮЧИТЬ ИНДИКАЦИЮ РИ4

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

BSF  SSPCON2, PEN  ;СФОРМИРОВАТЬ БИТ STOP

;ИНИЦИАЛИЗАЦИЯ ПРЕРЫВАНИЙ

BANC0

BSF  PORTC, RC5   ;ВЫКЛЮЧИТЬ АВАРИЙНУЮ СИГНАЛИЗАЦИЮ

MOVLW B'01010000'

MOVWF INTCON    ;РАЗРЕШИТЬ ПРЕРЫВАНИЯ ОТ ПЕРИФЕРИЙНЫХ МОДУЛЕЙ И ВНЕШНИХ ПРЕРЫВАНИЙ

MOVLW B'00100001'   ;РАЗРЕШИТЬ ПРЕРЫВАНИЯ ОТ ПРИЕМНИКА USART И ТАЙМЕРА TMR1

CLRF PIR1

BANC1

MOVWF PIE1

BANC0

BSF INTCON,GIE    ;РАЗРЕШИТЬ ГЛАБАЛЬНЫЕ ПРЕРЫВАНИЯ

 

;----------------------------------------------------

; ПОДПРОГРАММА ОБРАБОТКИ ЦИФРОВОЙ  ИНФОРМАЦИИ

;----------------------------------------------------

BINARY_START

BANC0

;ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ

CLRW

CLRF BIN_X1

CLRF BIN_X2

CLRF BIN_X3

CLRF BIN_X4

;ПРИНИМАЕМ ВХОДНЫЕ ЗНАЧЕНИЯ 

MOVF PORTB, W

MOVWF TEMP

BTFSC TEMP, RB1   ;ЕСЛИ RB1 = 1, ТО ЗАПИШЕМ В BIN_X1 = 0x01

BSF  BIN_X1, BIT_ZERO

BTFSC TEMP, RB2   ;ЕСЛИ RB2 = 1, ТО ЗАПИШЕМ В BIN_X2 = 0x01

BSF  BIN_X2, BIT_ZERO

BTFSC TEMP, RB3   ;ЕСЛИ RB3 = 1, ТО ЗАПИШЕМ В BIN_X3 = 0x01

BSF  BIN_X3, BIT_ZERO

BTFSC TEMP, RB4   ;ЕСЛИ RB4 = 1, ТО ЗАПИШЕМ В BIN_X4 = 0x01

BSF  BIN_X4, BIT_ZERO    

;ВЫЧИСЛЕНИЕ ФУ-ИИ

MOVF BIN_X2, W

ANDWF BIN_X3, W

ANDWF BIN_X4, W   ;ПЕРВАЯ ЧАСТЬ СЛОЖЕНИЯ ПО МОДУЛЮ 2

MOVWF TEMP    ;ЕЕ СОХРАНЕНИЕ

COMF BIN_X3, F

COMF BIN_X1, W

IORWF BIN_X3, W   ;ВТОРАЯ ЧАСТЬ СЛОЖЕНИЯ ПО МОДУЛЮ 2

XORWF TEMP, F    ;РЕЗУЛЬТАТ

COMF BIN_X3, F   ;ВОССТОНАВЛИВАЕМ ЗНАЧЕНИЕ X3

BTFSS TEMP, BIT_ZERO  ;ЕСЛИ '0', ТО ПЕРЕЙТИ К СЛЕД. ПОДПРОГРАММЕ

GOTO ADC_START

;ВЫРАБОТКА СИГНАЛА Y1 = 1, ДЛИТЕЛЬНОСТЬЮ  T1

CLRF TMR0    ;СБРОС РЕГИСТРА

BCF  INTCON, T0IF  ;СБРОС ФЛАГА ПРЕРЫВАНИЯ

BSF  INTCON, T0IE  ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ ОТ TMR0

MOVLW SIG_T1

MOVWF TMR0

BSF  PORTA, RA4   ;ВЫВОД Y1=1 НА RA4

 

;----------------------------------------------------

; ПОДПРОГРАММА ОБРАБОТКИ АНАЛОГОВОЙ  ИНФОРМАЦИИ

;----------------------------------------------------

ADC_START

;ЧТЕНИЕ АНАЛОГОВОГО СИГНАЛА  С AN0

MOVLW SELECT_AN0

MOVWF ADCON0    ;НАЧАТЬ ПРЕОБРАЗОВАНИЕ AN0  

BTFSC  ADCON0,GO   ;ОЖИДАТЬ ОКОНЧАНИЯ ПРЕОБРАЗОВАНИЯ 

GOTO $-1

MOVF ADRESH, W

MOVWF ANALOG_1

;ЧТЕНИЕ АНАЛОГОВОГО СИГНАЛА  С AN1

MOVLW SELECT_AN1

MOVWF ADCON0    ;НАЧАТЬ ПРЕОБРАЗОВАНИЕ AN1  

BTFSC  ADCON0,GO   ;ОЖИДАТЬ ОКОНЧАНИЯ ПРЕОБРАЗОВАНИЯ 

GOTO $-1

MOVF ADRESH, W

MOVWF ANALOG_2

;ЧТЕНИЕ АНАЛОГОВОГО СИГНАЛА  С AN3

MOVLW SELECT_AN3

MOVWF ADCON0    ;НАЧАТЬ ПРЕОБРАЗОВАНИЕ AN3  

BTFSC  ADCON0,GO   ;ОЖИДАТЬ ОКОНЧАНИЯ ПРЕОБРАЗОВАНИЯ 

GOTO $-1

MOVF ADRESH, W

MOVWF ANALOG_3

;ЧТЕНИЕ РЕГИСТРА К, ПУЛЬТА УПРАВЛЕНИЯ

BANC1

BSF  SSPCON2, SEN  ;СГЕНЕРИРОВАТЬ БИТ START

BTFSC SSPCON2, SEN  ;ОЖИДАТЬ ОКОНЧАНИЯ ГЕНЕРАЦИИ БИТА START

GOTO $-1

MOVLW ADR_K    ;ПЕРЕДАТЬ АДРЕС МОДУЛЯ

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

BSF  SSPCON2, RCEN  ;РАЗРЕШИТЬ ПРИЕМ ДАННЫХ ПО I2C

BTFSC SSPCON2, RCEN  ;ОЖИДАТЬ ОКОНЧАНИЯ ПРИЕМА В SSPBUF

GOTO $-1

BSF  SSPCON2, ACKDT  ;УСТАНОВКА БИТА ПОДТВЕРЖДЕНИЯ

BSF  SSPCON2, ACKEN  ;ВЫДАТЬ В ЛИНИЮ I2C ACK

BSF  SSPCON2, PEN  ;СФОРМИРОВАТЬ БИТ STOP

BANC0

COMF INDF, W    ;ИНВЕРСИЯ НУЖНА ДЛЯ ПРАВИЛЬНОГО ОТОБРАЖЕНИЯ В СООТВЕТСТВИИ СО СХЕМОЙ   

MOVWF REG_K    ;СОХРАНЕНИЕ В РЕГИСТР

;ЧТЕНИЕ КОЛИЧЕСТВА ИМПУЛЬСОВ,  С ИМПУЛЬСНОГО ДАТЧИКА (ВОЗЬМЕМ  TMR1H)

MOVF TMR1H, W

;ВЫЧИСЛЕНИЕ ФУ-ИИ

SUBWF ANALOG_3, W   ;ВЫЧИСЛЕНИЕ ПЕРВЫЙ ФУ-ИИ ДЛЯ СРАВНЕНИЯ

MOVWF TEMP_RESULT   ;ЕЕ СОХРАНЕНИЕ

RLF  TEMP_RESULT, F  ;ДОМНОЖЕНИЕ НА 2, КОНЕЧНЫЙ РЕЗУЛЬТАТ

MOVF ANALOG_1, W   ;ВЫЧИСЛЕНИЕ ВТОРОЙ ФУ-ИИ ДЛЯ СРАВНЕНИЯ

ADDWF REG_K, W   ;N1+K

ADDWF ANALOG_2, W   ;(N1+K) + N2

MOVWF TEMP    ;ЕЕ СОХРАНЕНИЕ, КОНЕЧНЫЙ РЕЗУЛЬТАТ

SUBWF TEMP_RESULT, W  ;ВЫПОЛНЯЕМ РАЗНОСТЬ TEMP_RESULT - TEMP, ДЛЯ СРАВНЕНИЯ

BTFSS  STATUS, C   ;ЕСЛИ С = 1, ТО МАКСИМАЛЬНАЯ TEMP

GOTO  MAX_M1

GOTO IF_Q

MAX_M1

MOVF TEMP_RESULT, W

MOVWF TEMP    ;ВРЕМЕННО СОХРАНЯЕМ НУЖНОЕ НАМ ЗНАЧЕНИЕ ИЗ TEMP_RESULT

GOTO IF_Q

IF_Q

MOVLW CONST_Q

SUBWF TEMP, W

BTFSC  STATUS, C   ;ЕСЛИ С = 1, ТО МАКСИМАЛЬНАЯ CONST_Q

GOTO  Y2_SEND

GOTO Y3_SEND

Y2_SEND

;ВЫРАБОТКА СИГНАЛА Y2 = 1, ДЛИТЕЛЬНОСТЬЮ  T2

MOVLW 0x00

MOVWF RESULT_NQ   ;ЗАПОМИНАНИЕ РЕЗУЛЬТАТА N > Q

CLRF TMR0    ;СБРОС РЕГИСТРА

BCF  INTCON, T0IF  ;СБРОС ФЛАГА ПРЕРЫВАНИЯ

BSF  INTCON, T0IE  ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ ОТ TMR0

MOVLW SIG_T2

MOVWF TMR0

BSF  PORTC, RC1   ;ВЫВОД Y2=1 НА RC1

Y3_SEND

;ВЫРАБОТКА СИГНАЛА Y3 = 1, ДЛИТЕЛЬНОСТЬЮ  T3

MOVLW 0x01

MOVWF RESULT_NQ   ;ЗАПОМИНАНИЕ РЕЗУЛЬТАТА N > Q

CLRF TMR0    ;СБРОС РЕГИСТРА

BCF  INTCON, T0IF  ;СБРОС ФЛАГА ПРЕРЫВАНИЯ

BSF  INTCON, T0IE  ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ ОТ TMR0

MOVLW SIG_T3

MOVWF TMR0

BSF  PORTC, RC2   ;ВЫВОД Y1=1 НА RC2

;ФОРМИРОВАНИЕ СИГНАЛА Y4, ЕГО  ВЫЧИСЛЕНИЕ

MOVLW CONST_A1

MOVWF TEMP    ;БУДЕМ ВЫПОЛНЯТЬ УМНОЖЕНИЕ НАД КОНСТАНТОЙ A1

MOVLW MUL_CC

MOVWF COUNTER_I   ;ЗАГРУЖАЕМ ЧИСЛО В СЧЕТЧИК, ДЛЯ ОТСЧЕТА ЦИКЛОВ УМНОЖЕНИЯ

CLRF COUNTER_J   ;ДЛЯ УКАЗАНИЯ НУЖНОГО БИТА

CLRF TEMP_RESULT   ;ДЛЯ ХРАНЕНИЯ РЕЗУЛЬТАТА УМНОЖЕНИЯ, БЕЗ ПОТЕРЬ ЕСЛИ ЧИСЛА НЕ ОЧЕНь БОЛЬШИЕ

;ЦИКЛ ВЫПОЛНЕНИЯ УМНОЖЕНИЯ A1 и N3 

CYCLE_MUL

BTFSS ANALOG_3, COUNTER_J ;ПРОВЕРКА УКАЗАННОГО БИТА НА '1', ЕСЛИ ДА - ОБРАБОТАТЬ

GOTO COUNTER_DEC   ;НУЖНЫЙ БИТ РАВЕН НУЛЮ, СДВИНУТЬ A1 И ИЗМЕНИТЬ ЗНАЧЕНИЯ В СЧЕТЧИКАХ

MOVF TEMP, W    ;ЗАГРУЗАЕМ УМНОЖАЕМОЕ, ДЛЯ СЛОЖЕНИЯ

ADDWF TEMP_RESULT, F  

COUNTER_DEC

RLF  TEMP, F

INCF COUNTER_J, F  ;ИЗМЕНЯЕМ УКАЗАТЕЛЬ НА СЛЕД. БИТ

DECFSZ COUNTER_I, F  ;ЖДЕМ ОКОНЧАНИЯ ЦИКЛА АППАРАТНОГО УМНОЖЕНИЯ

GOTO CYCLE_MUL

;ВЫПОЛНЯЕМ СЛОЖЕНИЕ (A1*N3) + A0

MOVLW CONST_A0

ADDWF TEMP_RESULT, F  ;ПОЛУЧАЕМ ЗНАЧЕНИЕ ФУ-ИИ Y4

MOVF TEMP_RESULT, W

MOVWF OUTPUT_Y4   ;СОХРАНЯЕМ ДЛЯ ПОСЛЕДУЮЩЕГО ОТОБРАЖЕНИЯ НА РИ4

SWAPF TEMP_RESULT, F  ;МЕНЯЕМ ПОЛУБАЙТЫ ДЛЯ МОДУЛЯ ЦАП, ЧТО БЫ МОЖНО БЫЛО ПЕРЕДАТЬ

;ВЫДАЧА СИГНАЛА НА ЦАП (V4)

BANC1

BSF  SSPCON2, SEN  ;СГЕНЕРИРОВАТЬ БИТ START

BTFSC SSPCON2, SEN  ;ОЖИДАТЬ ОКОНЧАНИЯ ГЕНЕРАЦИИ БИТА START

GOTO $-1

MOVLW ADR_DAC    ;ПЕРЕДАТЬ АДРЕС МОДУЛЯ

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1 

MOVLW BIT_LOW    ;ЗАГРУЖАЕМ КОНСТАНТУ ДЛЯ ПОСЫЛКИ СТАРШЕЙ ЧАСТИ ДАННЫХ

ANDWF TEMP_RESULT, W  ;ЗАНУЛЯЕТ СТАРШУЮ ТЕТРАДУ, ЧТО СООТВЕТСТВУЕТ НОРМАЛЬНОЙ РАБОТЕ ЦАП

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

MOVLW BIT_HEIGHT   ;ЗАГРУЖАЕМ КОНСТАНТУ ДЛЯ ПОСЫЛКИ МЛАДШЕЙ ЧАСТИ ДАННЫХ

ANDWF TEMP_RESULT, W  ;ЗАНУЛЯЕТ МЛАДШУЮ ТЕТРАДУ

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

BSF  SSPCON2, PEN  ;СФОРМИРОВАТЬ БИТ STOP

;----------------------------------------------------

; ПОДПРОГРАММА ФОРМИРОВАНИЯ БАЙТ  ИНДИКАЦИИ

;----------------------------------------------------

IND_START

BANC0

;ОЧИСТИМ БАЙТЫ ИНДИКАЦИИ

CLRF RIND_1

CLRF RIND_2

CLRF RIND_3

CLRF RIND_4

;СФОРМИРУЕМ БАЙТЫ ИНДИКАЦИИ

COMF ANALOG_1, W   ;ИНВЕРСИЯ НУЖНА ДЛЯ ПРАВИЛЬНОГО ОТОБРАЖЕНИЯ В СООТВЕТСТВИИ СО СХЕМОЙ

MOVWF RIND_1    ;РЕГИСТР ИНДИКАЦИИ РИ1 СФОРМИРОВАН, ЗНАЧЕНИЕ ЕГО N1

BTFSC BIN_X1, BIT_ZERO ;BIN_X1 = 1, ТО ЗАПИШЕМ В RIND_2[BIT_0] = 1

BSF  RIND_2, BIT_0

BTFSC BIN_X2, BIT_ZERO ;BIN_X2 = 1, ТО ЗАПИШЕМ В RIND_2[BIT_1] = 1

BSF  RIND_2, BIT_1

BTFSC BIN_X3, BIT_ZERO ;BIN_X3 = 1, ТО ЗАПИШЕМ В RIND_2[BIT_2] = 1

BSF  RIND_2, BIT_2

BTFSC BIN_X4, BIT_ZERO ;BIN_X4 = 1, ТО ЗАПИШЕМ В RIND_2[BIT_3] = 1

BSF  RIND_2, BIT_3  ;РЕГИСТР ИНДИКАЦИИ РИ2 СФОРМИРОВАН, ЗНАЧЕНИЕ ЕГО X4,X3,X2,X1

COMF RIND_2, F   ;ИНВЕРСИЯ НУЖНА ДЛЯ ПРАВИЛЬНОГО ОТОБРАЖЕНИЯ В СООТВЕТСТВИИ СО СХЕМОЙ

BTFSC PORTA,  RA4   ;PORTA[RA4] = 1, ТО ЗАПИШЕМ В RIND_3[BIT_0] = 1

BSF  RIND_3, BIT_0

BTFSC PORTC,  RC1   ;PORTC[RC1] = 1, ТО ЗАПИШЕМ В RIND_3[BIT_1] = 1

BSF  RIND_3, BIT_1

BTFSC PORTC,  RC2   ;PORTC[RC2] = 1, ТО ЗАПИШЕМ В RIND_3[BIT_2] = 1

BSF  RIND_3, BIT_2  ;РЕГИСТР ИНДИКАЦИИ РИ3 СФОРМИРОВАН, ЗНАЧЕНИЕ ЕГО Y3,Y2,Y1

COMF RIND_3, F   ;ИНВЕРСИЯ НУЖНА ДЛЯ ПРАВИЛЬНОГО ОТОБРАЖЕНИЯ В СООТВЕТСТВИИ СО СХЕМОЙ

COMF OUTPUT_Y4, W  ;ВОССТАНАВЛИВАЕМ ИЗ ПАМЯТИ Y4, ИНВЕРСИЯ НУЖНА ДЛЯ ...

MOVWF RIND_4    ;РЕГИСТР ИНДИКАЦИИ РИ4 СФОРМИРОВАН, ЗНАЧЕНИЕ ЕГО Y4

 

;----------------------------------------------------

; ПОДПРОГРАММА УСТАНОВКИ ЗНАЧЕНИЙ  ИНДИКАЦИИ

;----------------------------------------------------

IND_SET

BANC1

;ОТПРАВКА ИНФОРМАЦИИ НА ИНДИКАЦИЮ  РИ1 И РИ2

BSF  SSPCON2, SEN  ;СГЕНЕРИРОВАТЬ БИТ START

BTFSC SSPCON2, SEN  ;ОЖИДАТЬ ОКОНЧАНИЯ ГЕНЕРАЦИИ БИТА START

GOTO $-1

MOVLW ADR_IND12   ;ПЕРЕДАТЬ АДРЕС МОДУЛЯ

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

MOVLW CB_SEL_PORT   ;ЗАГРУЖАЕМ КОНСТАНТУ ДЛЯ ОТПРАВКИ ДАННЫХ НА РИ1 И РИ2

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

MOVF RIND_1,W

MOVWF INDF    ;ОТПРАВИТЬ ЗНАЧЕНИЯ РИ1     

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

MOVF RIND_2,W

MOVWF INDF    ;ОТПРАВИТЬ ЗНАЧЕНИЯ РИ2    

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

BSF  SSPCON2, PEN  ;СФОРМИРОВАТЬ БИТ STOP

;ОТПРАВКА ИНФОРМАЦИИ НА ИНДИКАЦИЮ  РИ3 И РИ4

BSF  SSPCON2, SEN  ;СГЕНЕРИРОВАТЬ БИТ START

BTFSC SSPCON2, SEN  ;ОЖИДАТЬ ОКОНЧАНИЯ ГЕНЕРАЦИИ БИТА START

GOTO $-1

MOVLW ADR_IND34   ;ПЕРЕДАТЬ АДРЕС МОДУЛЯ

MOVWF INDF    

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

MOVLW CB_SEL_PORT   ;ЗАГРУЖАЕМ КОНСТАНТУ ДЛЯ ОТПРАВКИ ДАННЫХ НА РИ3 И РИ4

MOVWF INDF

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

MOVF RIND_3,W

MOVWF INDF    ;ОТПРАВИТЬ ЗНАЧЕНИЯ РИ3

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

MOVF RIND_4,W

MOVWF INDF    ;ОТПРАВИТЬ ЗНАЧЕНИЯ РИ4

BTFSC SSPCON2, ACKSTAT ;ОЖИДАТЬ ФОРМИРОВАНИЕ ACK

GOTO $-1

BSF  SSPCON2, PEN  ;СФОРМИРОВАТЬ БИТ STOP

;ПРОВЕРКА ЕСЛИ ПОДПРОГРАММА  БЫЛА ВЫЗВАНА ИЗ ПРЕРЫВАНИЯ

BTFSS INTCON, GIE   ;ЕСЛИ ГЛОБАЛЬНЫЕ ПРЕРЫВАНИЯ ВЫФКЛЮЧЕНЫ, ТО ВЕРНУТЬСЯ В БЛОК ПРЕРЫВАНИЯ

GOTO FINISH_INTERUPT  ;ПРЕРЫВАНИЕ ЗАВЕРШЕННО, Т.К. ВЫПОЛНИЛО ВСЕ ЧТО НУЖНО 

 

;----------------------------------------------------

; ПОДПРОГРАММА ТУМБЛЕР "ОСТАНОВ"

;----------------------------------------------------

BANC0

BTFSC PORTB, RB5   ;ОЖИДАТЬ СНЯТИЯ ОСТАНОВА

GOTO S-1

GOTO BINARY_START  ;ВОЗОБНАВЛЯЕМ ЦИКЛ РАБОТЫ ЯДРА 

 

;----------------------------------------------------

; ПОДПРОГРАММА ПРЕРЫВАНИЙ

;----------------------------------------------------

INTERUPTS_START

BANC0

;ПРОВЕРКА НА ПРЕРЫВАНИЕ ОТ  ИСТОЧНИКА ПИТАНИЯ

BTFSS INTCON, INTF

GOTO NEXT_INT_2

BTFSS PORTA, RA5

GOTO NEXT_INT_2

;ВЫДАЕМ СИМВОЛ 

MOVLW '!'     

MOVWF TXREG    ;ВЫДАЧА СИМВОЛА '!'

;ВЫРАБАТЫВАЕМ СИГНАЛ Y5

CLRF TMR0    ;СБРОС РЕГИСТРА

BCF  INTCON, T0IF  ;СБРОС ФЛАГА ПРЕРЫВАНИЯ

BSF  INTCON, T0IE  ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ ОТ TMR0

MOVLW SIG_T5

MOVWF TMR0

BSF  PORTA, RA2   ;ВЫДАЕМ СИГНАЛ Y5 ЧАСТОТОЙ 1/T5

GOTO FINISH_INTERUPT  ;ЗАКАНЧИВАЕМ ПРЕРЫВАНИЕ

NEXT_INT_2

;ПРОВЕРКА ПРЕРЫВАНИЯ ОТ АВАРИЙНОГО  ДАТЧИКА

BTFSS INTCON, INTF

GOTO NEXT_INT_3

BTFSS PORTB, RB7

Информация о работе Микропроцессорная система управления объектом