Автор работы: Пользователь скрыл имя, 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
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 ;
BANC0
CLRF TMR0 ;ОЧИСТКА РЕГИСТРА
;ИНИЦИАЛИЗАЦИЯ ТАЙМЕРА TMR1
MOVLW B'00000010' ;
;СИНХРОНИЗАЦИЯ ВКЛЮЧЕНА
;ВНЕШНИЙ ИСТОЧНИК ТАКТОВЫХ
MOVWF T1CON
CLRF TMR1L ;ОЧИСТКА РЕГИСТРОВ TMR1L И TMR1H
CLRF TMR1H ;ТЕМ САМЫМ ОБЕСПЕЧИВАЕМ СИГНАЛ В 765 мс
;ИНИЦИАЛИЗАЦИЯ РАБОТЫ
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 ;СОХРАНЕНИЕ В РЕГИСТР
;ЧТЕНИЕ КОЛИЧЕСТВА ИМПУЛЬСОВ,
С ИМПУЛЬСНОГО ДАТЧИКА (
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
;ОТПРАВКА ИНФОРМАЦИИ НА
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
;ОТПРАВКА ИНФОРМАЦИИ НА
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
Информация о работе Микропроцессорная система управления объектом