Сообщение от 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
это пример. только здесь с константой.
мне надо что бы секунды были. в общем по заданию.
[Ответ]