Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
Курсовая по Микропроцессорам. MPLab. Помогите |
Философия, технологии, алгоритмы! |
|
Опции темы |
28.05.2012, 19:46 | #1 |
Форумец
Сообщений: 17
Регистрация: 13.06.2008
Возраст: 32
Не в сети |
Курсовая по Микропроцессорам. MPLab. Помогите
Доброго времени суток.
Прошу помочь с курсовой. К входу аналогового преобразователя подключён датчик который опрашивает микропроцессор 1 раз в секунду. К нулевой ножке порта B подключена линия управления, исполнительным механизмом, который включается при подаче на эту ножку логическую единицу, и выкл. при подаче на эту ножку логич. нуля. По простому, надо реализовать алгоритм управления, который включает исполнительный механизм, если считанный код с АЦП будет больше заданной величины, и выключить его в противном случае. Работаем мы с контролером PIC16F73. |
05.06.2012, 16:08 | #2 |
Форумец
Сообщений: 17
Регистрация: 13.06.2008
Возраст: 32
Не в сети |
_______________________ up!
|
12.06.2012, 15:49 | #4 | |
Форумец
Сообщений: 17
Регистрация: 13.06.2008
Возраст: 32
Не в сети |
Цитата:
include p16f73.inc mlBait equ 0x45 ; Младший байт для хранения числа прерываний (константы) stBait equ 0x46 ; Старший байт для хранения числа прерываний (константы) mlRabBait equ 0x47 ; Младший рабочий байт для подсчета количества прерываний stRabBait equ 0x48 ; Старший рабочий байт для подсчета количества прерываний Konstanta equ 0x44 ; Константа для сравнения с результатом преобразования АЦП flag equ 0x52 org 0x00 goto start org 0x04 bcf flag,0 BTFSC INTCON, T0IF ; Проверяем флаг прерывания от таймера call PrerivanieTaymera ; Если он установлен, то Запускаем процедуру обработки прерывания от таймера BTFSC PIR1, ADIF ; Проверяем флаг прерывания от АЦП call PrerivanieACP ; Если он установлен, то Запускаем процедуру обработки прерывания от АЦП BCF INTCON,T0IF ; Сбрасываем флаг прерывания от таймера BCF PIR1, ADIF ; Сбрасываем флаг прерывания от АЦП retfie ZapuskACP bsf ADCON0,2 ; Запускаем АЦП CLRF mlRabBait CLRF stRabBait RETURN PrerivanieACP MOVF ADRES,0 ; Пересылаем констану рабочий байт в рабочий регистр (Для сравнения) SUBWF Konstanta ; Вычитаю из регистра результата работы АЦП (ADRES) рабочий регистр, хранящий константу BTFSC STATUS, C ; Проверяем результат вычитания bcf PORTB,1 ; Если бит С равен 1 (т.е. результат преобразования АЦП меньше константы ; (отрицательный результат вычитания))тогда сбрасываем RB1 BTFSS STATUS, C ; Проверяем результат вычитания bsf PORTB,1 ; Если бит С равен 0 (т.е. результат преобразования АЦП больше константы ; (положительный результат вычитания))тогда устанавливаем RB1 CLRF ADRES ; Очищаем результат работы АЦП RETURN PrerivanieTaymera: BCF STATUS,Z MOVLW .1 ; ADDWF mlRabBait,1; Увеличиваем младший рабочий байт (INCF mlRabBait) BTFSC STATUS,C ; Анализирум бит C INCF stRabBait ; Если он = 1, то увеличиваем старший рабочий байт на 1 MOVF stRabBait,0 ; Пересылаем старший рабочий байт в рабочий регистр SUBWF stBait,0 ; Вычитаю из константы (stBait) рабочий регистр, хранящий количество прываний BTFSS STATUS, Z ; Проверяем результат вычитания GOTO Dalee ; Если бит Z равен 0 (т.е. вычитание не равно 0) тогда в конец процедуры BCF STATUS,Z MOVF mlRabBait,0 ; Пересылаем младший рабочий байт в рабочий регистр SUBWF mlBait,0 ; Вычитаю из константы (mlBait) рабочий регистр, хранящий количество прываний BTFSC STATUS, Z ; Проверяем результат вычитания bsf flag,0 ; Если бит Z равен 1 (т.е. вычитание равно 0) тогда устанавливаем флаг вызова запуска АЦП Dalee: BCF STATUS,C ; Очищаем биты C и Z регистра STATUS (BCF STATUS,Z) RETURN start: CLRF mlBait CLRF stBait CLRF mlRabBait CLRF stRabBait CLRF Konstanta CLRF flag MOVLW .10 ; MOVWF Konstanta; Задаем константу MOVLW .19 ; (+) Записали число 5095(прерываний от таймера) для осчета двух минут MOVWF stBait; MOVLW .232 ; MOVWF mlBait-) BSF STATUS, RP0 ; (1)(2) Устанавливаем банк 1 BCF TRISB,1; Устанавливаем RB1 на выход MOVLW .00 ; MOVWF ADCON1; Устанавливаем RA1 как аналоговый вход MOVLW .255 ; MOVWF TRISA ; Устанавливаем portА на Ввод BCF STATUS, RP0 ; (3) Устанавливаем банк 0 MOVLW .9 ; 00001001 MOVWF ADCON0; Выбор входного канала RA1, Включение АЦП, Выбор источника тактовых импульсов- 00 = Fosc/2(Fosc-частота одной фазы машинного цикла, совпадающая с частотой кварца), Выбор входного канала RA1, Включение АЦП BSF STATUS, RP0 ; (3) Устанавливаем банк 1 BSF PIE1, ADIE 4) Разрешаем прерывания от АЦП BCF STATUS, RP0 ; (3) Устанавливаем банк 0 BCF PIR1, ADIF ; Сбрасываем флаг прерываний от АЦП BSF INTCON, PEIE ; Разрешаем переферийные прерывания MOVLW .0 +Таймер) MOVWF TMR0; Запустли таймер BSF STATUS, RP0 ; Устанавливаем банк 1 MOVLW .7 MOVWF OPTION_REG; Записали в предделитель 7 (предделитель = 256) BSF INTCON,T0IE ; Разрешаем прерывания от таймера(-Таймер) BSF INTCON, GIE ; Разрешаем прерывания в системе BCF STATUS, RP0 ; Устанавливаем банк 0 loop: BTFSC flag,0 call ZapuskACP ; Запускаем АЦП goto loop end это пример. только здесь с константой. мне надо что бы секунды были. в общем по заданию. |
|
13.06.2012, 00:08 | #5 |
Форумец
Сообщений: 39,863
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
|