Большой Воронежский Форум

Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел.
Вернуться   Большой Воронежский Форум » Компьютеры и все, что с ними связано » » Программирование
Философия, технологии, алгоритмы!

Ответ
 
Опции темы
Старый 28.05.2012, 19:46   #1   
Форумец
 
Аватар для Vitekiusis Torro
 
Сообщений: 17
Регистрация: 13.06.2008
Возраст: 32

Vitekiusis Torro вне форума Не в сети
Exclamation Курсовая по Микропроцессорам. MPLab. Помогите

Доброго времени суток.
Прошу помочь с курсовой.

К входу аналогового преобразователя подключён датчик который опрашивает микропроцессор 1 раз в секунду. К нулевой ножке порта B подключена линия управления, исполнительным механизмом, который включается при подаче на эту ножку логическую единицу, и выкл. при подаче на эту ножку логич. нуля.
По простому, надо реализовать алгоритм управления, который включает исполнительный механизм, если считанный код с АЦП будет больше заданной величины, и выключить его в противном случае.
Работаем мы с контролером PIC16F73.
  Ответить с цитированием
Старый 05.06.2012, 16:08   #2   
Форумец
 
Аватар для Vitekiusis Torro
 
Сообщений: 17
Регистрация: 13.06.2008
Возраст: 32

Vitekiusis Torro вне форума Не в сети
_______________________ up!
  Ответить с цитированием
Старый 05.06.2012, 17:18   #3   
Форумец
 
Аватар для Spectator
 
Сообщений: 39,863
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Vitekiusis Torro, контролер то реальный? Или его надо просто сэмулировать случайными числами?
  Ответить с цитированием
Старый 12.06.2012, 15:49   #4   
Форумец
 
Аватар для Vitekiusis Torro
 
Сообщений: 17
Регистрация: 13.06.2008
Возраст: 32

Vitekiusis Torro вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
Vitekiusis Torro, контролер то реальный? Или его надо просто сэмулировать случайными числами?
В самом MPlab выбираем контроллер PIC16F73
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   
Форумец
 
Аватар для Spectator
 
Сообщений: 39,863
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от Vitekiusis Torro Посмотреть сообщение
мне надо что бы секунды были. в общем по заданию.
Ну и привяжись к часам системным. в чем проблема то? в асме вроде шаришь. отчего не можешь опросить таймер системный?
  Ответить с цитированием
Старый 02.07.2012, 16:11   #6   
Форумец
 
Аватар для posq
 
Сообщений: 655
Регистрация: 23.10.2010

posq вне форума Не в сети
Vitekiusis Torro, Знак копирайта ставьте. И ссылочку на автора примера, тобиш на меня.
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind