Например TDA7294

Форум РадиоКот • Просмотр темы - Помогите чайнику с таймером на PIC16F84a
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вт ноя 11, 2025 20:53:34

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 27 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Пт апр 23, 2010 08:38:28 
Родился

Зарегистрирован: Пт мар 20, 2009 08:46:44
Сообщений: 13
Рейтинг сообщения: 0
Собрал я таймер на мк , работает замечательно. Но вот беда диапозон времени не тот что нужен.
В данном таймере диапазон от 0-90 мин а мне нужно от 1- 12 часов. Как это сделать? Какие изменения нужно внести в программу?
Прошу вашей помощи.


__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC
;
;********************** Константы*******************************
;

M_O_INIT EQU 0xC3 ;b'11000011',Загрузка OPTION. Коэфф. дел.=16
M_TA_INIT EQU 0x08 ;b'00001000',Управление портом А-TRISA
M_TB_INIT EQU 0x00 ;b'00000000',Управление портом В-TRISB
M_I_INIT EQU 0xA0 ;b'10100000',Загрузка INTCON
M_FLAG_INIT EQU 0xFF ;b'11111111',Загрузка регистра флагов
X_Pause EQU 0xFE ;Данные для счетчика X
Y_Pause EQU 0xFE ;Данные для счетчика Y
Z_Pause EQU 0x05 ;Данные для счетчика Z
Del_Range EQU 0x82 ;Константа задержки
Cycle_1 EQU 0xA0 ;Частота зв. сигнала (1024 Гц)
Cycle_2 EQU 0x02 ;Скважность имп. зв. сигнала (2)
Cycle_3 EQU 0xFF ;Длительность зв. сигнала (500ms)
Cycle_4 EQU 0x06 ;Время звучания (6s)

;
;******************** Описание портов **********************************
;

Ind_0 EQU 0x00 ;Вывод RA0, мл.разряд индикатора (1-вкл.), Out
Ind_1 EQU 0x01 ;Вывод RA1, ст.разряд индикатора (1-вкл.) Out
C1_Rel EQU 0x02 ;Вывод RA2, Зарядка\разрядка конденсатора (In/Out)
TMR_On EQU 0x03 ;Вывод RA3, Пуск/Сброс таймера (0), In
TMR_Run EQU 0x04 ;Вывод RA4, Выход зв. сигнала, Out
Led_On EQU 0x07 ;Вывод RB7, Индикатор работы таймера (1), Out

;
;********************** Описание регистра Флагов *************************
;

Phase EQU 0x07 ;Режим работы: 0-таймер вкл., 1-установка

;
;************************** Переменные ************************************
;

Delay_Reg_1 EQU 0x0C ;Рабочие регистры подпрограмм
Delay_Reg_2 EQU 0x0D ; задержки
Flags EQU 0x0E ;Хранение регисра флагов
W_copy EQU 0x0F ;Временное хранение w
FSR_copy EQU 0x10 ;Временное хранение FSR
STATUS_copy EQU 0x11 ;Временное хранение STATUS
X_Count EQU 0x12 ;Cчетчик задержки X
Y_Count EQU 0x13 ;Cчетчик задержки Y
Z_Count EQU 0x14 ;Cчетчик задержки Z
R_Bits EQU 0x15 ;Время (мин.), соотв. сопротивлению R1
N EQU 0x16 ;Рабочая ячейка подпр. One_Shot
Digit_0 EQU 0x17 ;Мл.байт величины выдержки времени
Digit_1 EQU 0x18 ;Ст.байт величины выдержки времени
Int_Count_Low EQU 0x19 ;Мл.байт счетчика прерываний
Int_Count_High EQU 0x1A ;Ст.байт счетчика прерываний
Ind_Nom EQU 0x1B ;Хранение № индикатора
Cell_1 EQU 0x1C ;Рабочие регистры подпрограммы
Cell_2 EQU 0x1D ; генерации зв. сигнала
Cell_3 EQU 0x1E
Cell_4 EQU 0x1F

;
;***************** Основной код*******************************
;
ORG 0 ;Программа начинается с метки 'Main'
goto Main
ORG 4 ;Вектор прерывания
goto Int_Prog

;
;**************** Начальная инициализация *******************
;
Main
clrf PORTA ;Очистить выходные защелки порта А
clrf PORTB ; и порта В
clrf TMR0 ;Очистить таймер
bsf STATUS,RP0 ;Открыть доступ к банку 1
movlw M_O_INIT ;Загрузить исходные
movwf OPTION_REG^80H ; данные в OPTION_REG
movlw M_TA_INIT ;Настроить порт А
movwf TRISA^80H ;
movlw M_TB_INIT ;Настроить порт В
movwf TRISB^80H ;
bcf STATUS,RP0 ;Включить банк 0
movlw M_I_INIT ;Загрузить исходные
movwf INTCON ; данные в INTCON
movlw M_FLAG_INIT ;Загрузить исходные
movwf Flags ; данные в ячейку Flags
clrf R_Bits ;Очистить R_Bits
Test
bcf INTCON,7 ;Запрет прерываний
movlw b'10000000' ;Вывод на LSB(HG1) индикатор цифры 8
movwf PORTB
bsf PORTA,0
call Delay_1s ;Пауза 1сек
bsf PORTA,1 ;Вывод на MSB индикатор(HG2) цифры 8
call Delay_1s ;Пауза 1сек
clrf PORTA ;Порты в исходное состояние
clrf PORTB
clrf N ;Обнулить N
bsf PORTA,TMR_Run
First_Pass
call One_Shot ;Пробное измерение, зарядка конденсатора
call Delay_100ms ;Задержка 0,1сек



;
;****************** Установка времени выдержки таймера**********************
;

Get_Time
bsf Flags,Phase ;Признак режима установки
bcf INTCON,7 ;Запрет прерываний

call One_Shot ;Подсчет числа 'N' импульсов разрядки
movlw 0x03 ;Запись ст. байта адреса таблицы
movwf PCLATH ; преобразования в PCLATH
movf N,w
call Convert ;Таблица преобразования
movwf R_Bits ;Хранение результата преобразования
clrf PCLATH ;PCLATH в исходное состояние
call Bin_to_BCD ;Перекодирование в BCD код
bsf INTCON,7 ;Разрешить прерывания

;
;****************** Проверка состояния кнопки SB1 **************************
;

Check_SB1
btfsc PORTA,TMR_On ;Пока кнопка не нажата-
goto Get_Time ; таймер в режиме установки
call Delay_100ms
bcf Flags,Phase ;Установить признак работы таймера на счет
call Delay_1s ;Задержка, необходимая для отпускания SB1

;
;******************** Таймер включен ***************************************
;

Timer_On

clrf Int_Count_Low ;Обнулить счетчики прерываний
clrf Int_Count_High

Time_Count
bsf PORTA,TMR_Run ;Транзистор VT1 закрыт
btfss PORTA,TMR_On ;Сброс таймера при повторном нажатии
goto Reset_TMR ; на SB1
movfw Int_Count_High ;Сравнение счетчика прерываний с 15000
xorlw 0x3A ; (3A98hex),что соответствует 1мин.
btfss STATUS,Z
goto Time_Count
movfw Int_Count_Low
sublw 0x97
btfsc STATUS,C
goto Time_Count ;Если 1мин не закончилась-продолжить счет
decf R_Bits,f ;R_Bits=R_Bits-1. Если установленное
btfsc STATUS,Z ; время закончилось (R_Bits=0), установить
bsf Flags,Phase ; признак окончания работы таймера
call Bin_to_BCD ;Преобразование R_Bits в BCD-код
btfss Flags,Phase ;Если таймер в режиме счета-
goto Timer_On ; идти на продолжение счета времени

;
;************************** Таймер остановлен ****************************
;

Timer_Stop
call Delay_1s
call Beep
bsf PORTA,TMR_Run ;Транзистор VT1 закрыт
Reset_TMR
call Delay_1s
clrf R_Bits ;Обнулить счетчик времени
clrf Int_Count_Low ; и прерываний
clrf Int_Count_High
bsf Flags,Phase ;Флаг режима установки=1
call Delay_100ms
goto Get_Time ;Идти на установку

;
;******** Подпрограмма преобразования двоичного кода в BCD-код *********
; Двоичный код в регистре R_Bits, после преобразования в Digit_0
; - единицы, в Digit_1 - десятки.

Bin_to_BCD
clrf Digit_1
movfw R_Bits
movwf Digit_0
G_Tens
movlw d'10'
subwf Digit_0,w
btfss STATUS,C
goto Over
movwf Digit_0
incf Digit_1,f
goto G_Tens
Over
movf Digit_1,w ;Гашение незначащих нулей
andlw b'00001111'
btfss STATUS,Z
goto Finish
movlw b'00010000' ;d'16'-указатель на 16 строку
movwf Digit_1 ; таблицы (пустое место)
Finish
return

;
;****** Подпрограмма преобразования для 7-ми сегментного индикатора ********
; "0" - соответствует горящему сегменту, т. к. индикатор с общим анодом

Table
addwf PCL,f
retlw b'11000000' ;Цифра "0"
retlw b'11111001' ;Цифра "1"
retlw b'10100100' ;Цифра "2"
retlw b'10110000' ;Цифра "3"
retlw b'10011001' ;Цифра "4"
retlw b'10010010' ;Цифра "5"
retlw b'10000010' ;Цифра "6"
retlw b'11111000' ;Цифра "7"
retlw b'10000000' ;Цифра "8"
retlw b'10010000' ;Цифра "9"
retlw b'10001000' ;Цифра "А"
retlw b'10000011' ;Цифра "B"
retlw b'11000110' ;Цифра "C"
retlw b'10100001' ;Цифра "D"
retlw b'10000110' ;Цифра "E"
retlw b'10001110' ;Цифра "F"
retlw b'11111111' ;Пустое место (код 10h)

;
;********************* Обработка прерывания от TMR0 ***********************
;

Int_Prog
movwf W_copy ;Сохранение регистров
movf STATUS,w
movwf STATUS_copy
movf FSR,w
movwf FSR_copy
bcf INTCON,T0IF ;Сбросить флаг прерывания

movlw 0x06 ; Настраиваем таймер
movwf TMR0

btfsc Flags,Phase ;Проверка текущего режима:
goto Clear ;Если установка-обнулить счетчики

movfw Int_Count_Low ; Прибавляем LSB счетчик прерываний
xorlw H'FF' ;Если переполнен-перенос в ст. разряд
BZ Add_H ;
incf Int_Count_Low,f
goto Indicate ;Индикация
Add_H
incf Int_Count_High,f ;Прибавляем MSB счетчик прерываний
clrf Int_Count_Low
movfw Int_Count_High
xorlw H'FF' ;Если переполнен-обнулить счетчики
BZ Clear
goto Indicate ;Индикация
Clear
clrf Int_Count_Low
clrf Int_Count_High
Indicate
bcf PORTA,Ind_0 ;Гашение индикаторов
bcf PORTA,Ind_1
incf Ind_Nom,f ;Выбор индикатора (чет\нечет)
btfss Ind_Nom,0 ; если чет-индикация мл.байта
goto LSB_Ind ; если нечет-старшего
goto MSB_Ind
MSB_Ind
movf Digit_1,w ;Загрузить MSB в w
call Table ;Преобразование в 7-сегм. код
andwf Flags,w ;Установить бит 7 порта В
movwf PORTB ; и вывод
bsf PORTA,Ind_1 ;Включить индикатор
goto End_Int
LSB_Ind
movf Digit_0,w ;Загрузить MSB в w
call Table ;Преобразование в 7-сегм. код
andwf Flags,w ;Установить бит 7 порта В
movwf PORTB ; и вывод
bsf PORTA,Ind_0 ;Включить индикатор
End_Int
movf FSR_copy,w ;Восстановление регистров
movwf FSR
movf STATUS_copy,w
movwf STATUS
swapf W_copy,f
swapf W_copy,w
retfie

;
;****************** Подпрограмма "One Shot" ********************************
;

One_Shot
clrf N
bsf STATUS,RP0
bsf TRISA,2
bcf STATUS,RP0
Tst
btfss PORTA,C1_Rel
goto Ready
incfsz N,f
goto Tst
Ready
decf N,f
movf N,w
xorlw 0xFF
btfsc STATUS,Z
clrf N
bsf STATUS,RP0
bcf TRISA,2
bcf STATUS,RP0
bsf PORTA,C1_Rel
return

;
;************************** Подпрограмма задержки на 1s *****************
;

Delay_1s
movlw Z_Pause
movwf Z_Count
Z_Loop
movlw Y_Pause
movwf Y_Count

Y_Loop movlw X_Pause
movwf X_Count

X_Loop decfsz X_Count,f
goto X_Loop
decfsz Y_Count,f
goto Y_Loop
decfsz Z_Count,f
goto Z_Loop
return

;
;**************Подпрограмма задержки на 100 мс***************************
;

Delay_100ms
movlw Del_Range
movwf Delay_Reg_1
movlw h'FF'
movwf Delay_Reg_2
Loop
decfsz Delay_Reg_2,f
goto Loop
decfsz Delay_Reg_1,f
goto Loop
return

;
;********* Подпрограмма подачи звукового сигнала на RA4 ******************
;

Beep
bcf INTCON,7
movlw Cycle_4
movwf Cell_4

Beep_500
movlw Cycle_3
movwf Cell_3
Double
movlw Cycle_2
movwf Cell_2
H_Level
bsf PORTA,4
movlw Cycle_1
movwf Cell_1
Ring_1
decfsz Cell_1,f
goto Ring_1
L_Level
bcf PORTA,4
movlw Cycle_1
movwf Cell_1
Ring_2
decfsz Cell_1,f
goto Ring_2

decfsz Cell_2,f
goto H_Level

decfsz Cell_3,f
goto Double
goto Del_500

Del_500
movlw Cycle_3
movwf Cell_3
Doub
movlw Cycle_2
movwf Cell_2
H_Lev
bcf PORTA,4
movlw Cycle_1
movwf Cell_1
Rin_1
decfsz Cell_1,f
goto Rin_1
L_Lev
bcf PORTA,4
movlw Cycle_1
movwf Cell_1
Rin_2
decfsz Cell_1,f
goto Rin_2

decfsz Cell_2,f
goto H_Lev

decfsz Cell_3,f
goto Doub

decfsz Cell_4,f
goto Beep_500
bsf INTCON,7
return


;
;**** Подпрограмма табличной конвертации значения N *********
; в длительность выдержки времени (мин.)

ORG 0x300
Convert
addwf PCL,f
retlw .1
retlw .1
retlw .2
retlw .2
retlw .3
retlw .3
retlw .4
retlw .4
retlw .5
retlw .5
retlw .6
retlw .6
retlw .7
retlw .7
retlw .8
retlw .8
retlw .9
retlw .9
retlw .10
retlw .10
retlw .11
retlw .11
retlw .12
retlw .12
retlw .13
retlw .13
retlw .14
retlw .14
retlw .15
retlw .15
retlw .16
retlw .16
retlw .17
retlw .17
retlw .18
retlw .18
retlw .19
retlw .19
retlw .20
retlw .20
retlw .21
retlw .21
retlw .22
retlw .22
retlw .23
retlw .23
retlw .24
retlw .24
retlw .25
retlw .25
retlw .26
retlw .26
retlw .27
retlw .27
retlw .28
retlw .28
retlw .29
retlw .29
retlw .30
retlw .30
retlw .31
retlw .31
retlw .32
retlw .32
retlw .33
retlw .33
retlw .34
retlw .34
retlw .35
retlw .35
retlw .36
retlw .36
retlw .37
retlw .37
retlw .38
retlw .38
retlw .39
retlw .39
retlw .40
retlw .40
retlw .41
retlw .41
retlw .42
retlw .42
retlw .43
retlw .43
retlw .44
retlw .44
retlw .45
retlw .45
retlw .46
retlw .46
retlw .47
retlw .47
retlw .48
retlw .48
retlw .49
retlw .49
retlw .50
retlw .50
retlw .51
retlw .51
retlw .52
retlw .52
retlw .53
retlw .53
retlw .54
retlw .54
retlw .55
retlw .55
retlw .56
retlw .56
retlw .57
retlw .57
retlw .58
retlw .58
retlw .59
retlw .59
retlw .60
retlw .60
retlw .61
retlw .61
retlw .62
retlw .62
retlw .63
retlw .63
retlw .64
retlw .64
retlw .65
retlw .65
retlw .66
retlw .66
retlw .67
retlw .67
retlw .68
retlw .68
retlw .69
retlw .69
retlw .70
retlw .70
retlw .71
retlw .71
retlw .72
retlw .72
retlw .73
retlw .73
retlw .74
retlw .74
retlw .75
retlw .75
retlw .76
retlw .76
retlw .77
retlw .77
retlw .78
retlw .78
retlw .79
retlw .79
retlw .80
retlw .80
retlw .81
retlw .81
retlw .82
retlw .82
retlw .83
retlw .83
retlw .84
retlw .84
retlw .85
retlw .85
retlw .86
retlw .86
retlw .87
retlw .87
retlw .88
retlw .88
retlw .89
retlw .89
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90
retlw .90

END ;Конец


Последний раз редактировалось VAZZIK Пт апр 23, 2010 13:47:07, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помагите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Пт апр 23, 2010 09:11:06 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7315
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
Прошу вашей помощи.

А в чем должна выражаться помощь? Ну ладно, помогу. Слово "Помагите" правильно пишется "помогите". Если хотите получить от прерывания 250 мкс интервалы, то в прерывании лучше не присваивать значение 6 TMR0, а прибавлять (во-первых вы не можете гарантировать, что в прерывание вошли именно на переходе FF->00, а не позже, во-вторых, к моменту присвоения в прерывании уже выполнено по меньшей мере 8 команд). Кстати, прибавлять надо не 6.

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Пт апр 23, 2010 14:08:34 
Родился

Зарегистрирован: Пт мар 20, 2009 08:46:44
Сообщений: 13
Рейтинг сообщения: 0
Я в МК не юзер, я чайник. Если можно то поконкретнее. Мне он очень нужен


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Пт апр 23, 2010 15:16:42 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7315
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Я (и большинство других, наверняка) не телепат. Если можно, поконкретнее.
У вас есть исходник, разберитесь в нем, и измените как вам надо. В чем проблема то?

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Пт апр 23, 2010 18:48:24 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7315
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Хоть бы схему привёл или исходник откуда содрана. Автор может увидит тут исходник без ссылки на него - обидится. Вообще мне видится два варианта изменения. Первый забить таблицу Convert числами от 1 до 12 (равномерно) и в Timer_On и в Int_prog сделать измерение интервала в один час. Тогда можно выставить число от 1 до 12 и получить желаемое.

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Пт апр 23, 2010 19:11:07 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7315
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Ладно, если уж начал вникать - вот лекарство. В процедуре Int_prog удлинил минуту в 60 раз. Насчет точности этой минуты меня гложут сомнения, но пусть это останентся на совести автора. Я ведь даже не знаю какой частоты кварц применен. Таблицу Convert можно не перебивать - будет крутой таймер с выдержкой от 1 до 90 часов.
Код:
    btfsc Flags,Phase ;Проверка текущего режима:
    goto Clear ;Если установка-обнулить счетчики

    incf  int_count_pre
    movlw 60
    subwf int_count_pre, w
    btfss status, c
    goto   Indicate
    movlw  60
    movwf  int_cout_pre

    movfw Int_Count_Low ; Прибавляем LSB счетчик прерываний
    xorlw H'FF' ;Если переполнен-перенос в ст. разряд
    BZ Add_H ;
    incf Int_Count_Low,f
    goto Indicate ;Индикация
Add_H
    incf Int_Count_High,f ;Прибавляем MSB счетчик прерываний
    clrf Int_Count_Low
    movfw Int_Count_High
    xorlw H'FF' ;Если переполнен-обнулить счетчики
    BZ Clear
    goto Indicate ;Индикация
Clear
    clrf int_count_pre
    clrf Int_Count_Low
    clrf Int_Count_High

Незабудь в переменных дать адрес ячейки для переменной int_count_pre

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Пт апр 23, 2010 19:28:53 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Вызов подпрограммы , да еще табличной конвертации, в прерывании . ..
Что то отвернуло даже анализировать далее сей "шедевр".


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Пт апр 23, 2010 20:07:49 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7315
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
dosikus писал(а):
Вызов подпрограммы , да еще табличной конвертации, в прерывании . ..
Что то отвернуло даже анализировать далее сей "шедевр".
А почему нет? Я, лично, так тоже делаю. Мне не жаль подарить один уровень стека из 8. И, кстати, человек делает динамическую индикацию в прерывании, а не так другие писатели шедевров с задержками в основном теле программы. Зато, он не вызывает эту конвертацию из других мест. Шедевр, если вникнуться, написан неплохо. Хотя и есть спорные моменты. Как я уже сразу написал, не нравится присвоение в прерывании от TMR0. Это место, где постоянно будет накапливаться ошибка. Но каждый пишет по-своему. Я так не пишу. Но это не значит, что другие не имеют права так писать.

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Пт апр 23, 2010 22:18:49 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
uldemir писал(а):
И, кстати, человек делает динамическую индикацию в прерывании, а не так другие писатели шедевров с задержками в основном теле программы.


А конвертировать нужно обязательно в прерывании ????
В прерывании нужен счетчик( секунд,минут , часов и т.д. ) , обработчик кнопок , вывод из буфера на индикацию со сканером разрядов. И все . И никаких пп. там на.. не нужно.
Задержки вообще зло- тратить процессорное время впустую ...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Пт апр 23, 2010 22:49:23 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7315
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
dosikus писал(а):
вывод из буфера на индикацию со сканером разрядов.

Ну вот это там и делается. и ничего больше. Или предлагаешь в буфере держать полный имидж? Я дак еще в буфере бывает храню аттрибут что этот разряд должен моргать, и в этом же прерывании это моргание и обсчитывается. Так что этот приём считаю рациональным.

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Пт апр 23, 2010 22:59:44 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
В основном цикле заполнять буфер уже сконвертированными данными . Буфер 2 байта .
Bin2BCD конвертите же в главном цикле , почему в 7 сегментный код надо в прерывании ?????????
Скажу по секрету эта ваша любимая BIN2BCD здесь вообще на.. не нужна .
Под мигание и еще под кучку флагов можно и отдельные переменные завести .
А вообще не плохо было бы перелопатить все это на посегментную индикацию , жрать будет меньше и не надо ключей.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Сб апр 24, 2010 09:24:05 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7315
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Мы увидим новую прошивку? :))

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Сб апр 24, 2010 10:07:53 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
uldemir писал(а):
Мы увидим новую прошивку? :))


На 84 ?! . Оно вам надо ?
Редкий , дорогой чип .


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Сб апр 24, 2010 10:48:48 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7315
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
dosikus писал(а):
На 84 ?! . Оно вам надо ?
Редкий , дорогой чип .

Да нет, нафик не сдалось. Просто размышляю, почему автор так безобразно время меряет. В минуте автор отсчитывает 15000 прерываний. Значит прерывание предполагается раз в 4 миллисекунды. По регистру option указано, что коэффициент предделителя 16. получается что за 4000 микросекунд должно пройти 4000+8+3 импульсов. Короч, точность не ахти какая. Ошибка около 0,3% или я чегой-то не понимаю. Или там кварц на 4011 кГц (где такой взять?). Хотя для таймера на полтора часа такая ошибка была приемлима и что-либо особенное городить не было смысла.

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Сб апр 24, 2010 11:18:20 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Вт сен 30, 2008 09:23:14
Сообщений: 209
Откуда: Краснодарский край
Рейтинг сообщения: 0
Судя по описанию это Кухонный таймер из Журнала Радио. Номер, на вскидку, не скажу. Я такой собрал, полезная штука. Там переменником регулируется время от 0 до 90 мин. У меня не было нужного сопрота, я поставил другой и максимальное время у меня 70 мин. Если мне надо 1ч40 мин. я его включаю дважды. Вроде полезная штука. Особенно когда фоторезист засветить или мясо пожарить.)))) Кварц 4 Мгц.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Вс апр 25, 2010 14:27:08 
Родился

Зарегистрирован: Пт мар 20, 2009 08:46:44
Сообщений: 13
Рейтинг сообщения: 0
Да, это действительно кухонный таймер. Вот что у меня получилось благодаря вашей помощи


__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC
;
;********************** Константы*******************************
;

M_O_INIT EQU 0xC3 ;b'11000011',Загрузка OPTION. Коэфф. дел.=16
M_TA_INIT EQU 0x08 ;b'00001000',Управление портом А-TRISA
M_TB_INIT EQU 0x00 ;b'00000000',Управление портом В-TRISB
M_I_INIT EQU 0xA0 ;b'10100000',Загрузка INTCON
M_FLAG_INIT EQU 0xFF ;b'11111111',Загрузка регистра флагов
X_Pause EQU 0xFE ;Данные для счетчика X
Y_Pause EQU 0xFE ;Данные для счетчика Y
Z_Pause EQU 0x05 ;Данные для счетчика Z
Del_Range EQU 0x82 ;Константа задержки
Cycle_1 EQU 0xA0 ;Частота зв. сигнала (1024 Гц)
Cycle_2 EQU 0x02 ;Скважность имп. зв. сигнала (2)
Cycle_3 EQU 0xFF ;Длительность зв. сигнала (500ms)
Cycle_4 EQU 0x06 ;Время звучания (6s)

;
;******************** Описание портов **********************************
;

Ind_0 EQU 0x00 ;Вывод RA0, мл.разряд индикатора (1-вкл.), Out
Ind_1 EQU 0x01 ;Вывод RA1, ст.разряд индикатора (1-вкл.) Out
C1_Rel EQU 0x02 ;Вывод RA2, Зарядка\разрядка конденсатора (In/Out)
TMR_On EQU 0x03 ;Вывод RA3, Пуск/Сброс таймера (0), In
TMR_Run EQU 0x04 ;Вывод RA4, Выход зв. сигнала, Out
Led_On EQU 0x07 ;Вывод RB7, Индикатор работы таймера (1), Out

;
;********************** Описание регистра Флагов *************************
;

Phase EQU 0x07 ;Режим работы: 0-таймер вкл., 1-установка

;
;************************** Переменные ************************************
;

Delay_Reg_1 EQU 0x0C ;Рабочие регистры подпрограмм
Delay_Reg_2 EQU 0x0D ; задержки
Flags EQU 0x0E ;Хранение регисра флагов
W_copy EQU 0x0F ;Временное хранение w
FSR_copy EQU 0x10 ;Временное хранение FSR
STATUS_copy EQU 0x11 ;Временное хранение STATUS
X_Count EQU 0x12 ;Cчетчик задержки X
Y_Count EQU 0x13 ;Cчетчик задержки Y
Z_Count EQU 0x14 ;Cчетчик задержки Z
R_Bits EQU 0x15 ;Время (мин.), соотв. сопротивлению R1
N EQU 0x16 ;Рабочая ячейка подпр. One_Shot
Digit_0 EQU 0x17 ;Мл.байт величины выдержки времени
Digit_1 EQU 0x18 ;Ст.байт величины выдержки времени
Int_Count_Low EQU 0x19 ;Мл.байт счетчика прерываний
Int_Count_High EQU 0x1A ;Ст.байт счетчика прерываний
Ind_Nom EQU 0x1B ;Хранение № индикатора
Cell_1 EQU 0x1C ;Рабочие регистры подпрограммы
Cell_2 EQU 0x1D ; генерации зв. сигнала
Cell_3 EQU 0x1E
Cell_4 EQU 0x1F
int_count_pre EQU ????????????

;
;***************** Основной код*******************************
;
ORG 0 ;Программа начинается с метки 'Main'
goto Main
ORG 4 ;Вектор прерывания
goto Int_Prog

;
;**************** Начальная инициализация *******************
;
Main
clrf PORTA ;Очистить выходные защелки порта А
clrf PORTB ; и порта В
clrf TMR0 ;Очистить таймер
bsf STATUS,RP0 ;Открыть доступ к банку 1
movlw M_O_INIT ;Загрузить исходные
movwf OPTION_REG^80H ; данные в OPTION_REG
movlw M_TA_INIT ;Настроить порт А
movwf TRISA^80H ;
movlw M_TB_INIT ;Настроить порт В
movwf TRISB^80H ;
bcf STATUS,RP0 ;Включить банк 0
movlw M_I_INIT ;Загрузить исходные
movwf INTCON ; данные в INTCON
movlw M_FLAG_INIT ;Загрузить исходные
movwf Flags ; данные в ячейку Flags
clrf R_Bits ;Очистить R_Bits
Test
bcf INTCON,7 ;Запрет прерываний
movlw b'10000000' ;Вывод на LSB(HG1) индикатор цифры 8
movwf PORTB
bsf PORTA,0
call Delay_1s ;Пауза 1сек
bsf PORTA,1 ;Вывод на MSB индикатор(HG2) цифры 8
call Delay_1s ;Пауза 1сек
clrf PORTA ;Порты в исходное состояние
clrf PORTB
clrf N ;Обнулить N
bsf PORTA,TMR_Run
First_Pass
call One_Shot ;Пробное измерение, зарядка конденсатора
call Delay_100ms ;Задержка 0,1сек



;
;****************** Установка времени выдержки таймера**********************
;

Get_Time
bsf Flags,Phase ;Признак режима установки
bcf INTCON,7 ;Запрет прерываний

call One_Shot ;Подсчет числа 'N' импульсов разрядки
movlw 0x03 ;Запись ст. байта адреса таблицы
movwf PCLATH ; преобразования в PCLATH
movf N,w
call Convert ;Таблица преобразования
movwf R_Bits ;Хранение результата преобразования
clrf PCLATH ;PCLATH в исходное состояние
call Bin_to_BCD ;Перекодирование в BCD код
bsf INTCON,7 ;Разрешить прерывания

;
;****************** Проверка состояния кнопки SB1 **************************
;

Check_SB1
btfsc PORTA,TMR_On ;Пока кнопка не нажата-
goto Get_Time ; таймер в режиме установки
call Delay_100ms
bcf Flags,Phase ;Установить признак работы таймера на счет
call Delay_1s ;Задержка, необходимая для отпускания SB1

;
;******************** Таймер включен ***************************************
;

Timer_On

clrf Int_Count_Low ;Обнулить счетчики прерываний
clrf Int_Count_High

Time_Count
bsf PORTA,TMR_Run ;Транзистор VT1 закрыт
btfss PORTA,TMR_On ;Сброс таймера при повторном нажатии
goto Reset_TMR ; на SB1
movfw Int_Count_High ;Сравнение счетчика прерываний с 15000
xorlw 0x3A ; (3A98hex),что соответствует 1мин.
btfss STATUS,Z
goto Time_Count
movfw Int_Count_Low
sublw 0x97
btfsc STATUS,C
goto Time_Count ;Если 1мин не закончилась-продолжить счет
decf R_Bits,f ;R_Bits=R_Bits-1. Если установленное
btfsc STATUS,Z ; время закончилось (R_Bits=0), установить
bsf Flags,Phase ; признак окончания работы таймера
call Bin_to_BCD ;Преобразование R_Bits в BCD-код
btfss Flags,Phase ;Если таймер в режиме счета-
goto Timer_On ; идти на продолжение счета времени

;
;************************** Таймер остановлен ****************************
;

Timer_Stop
call Delay_1s
call Beep
bsf PORTA,TMR_Run ;Транзистор VT1 закрыт
Reset_TMR
call Delay_1s
clrf R_Bits ;Обнулить счетчик времени
clrf Int_Count_Low ; и прерываний
clrf Int_Count_High
bsf Flags,Phase ;Флаг режима установки=1
call Delay_100ms
goto Get_Time ;Идти на установку

;
;******** Подпрограмма преобразования двоичного кода в BCD-код *********
; Двоичный код в регистре R_Bits, после преобразования в Digit_0
; - единицы, в Digit_1 - десятки.

Bin_to_BCD
clrf Digit_1
movfw R_Bits
movwf Digit_0
G_Tens
movlw d'10'
subwf Digit_0,w
btfss STATUS,C
goto Over
movwf Digit_0
incf Digit_1,f
goto G_Tens
Over
movf Digit_1,w ;Гашение незначащих нулей
andlw b'00001111'
btfss STATUS,Z
goto Finish
movlw b'00010000' ;d'16'-указатель на 16 строку
movwf Digit_1 ; таблицы (пустое место)
Finish
return

;
;****** Подпрограмма преобразования для 7-ми сегментного индикатора ********
; "0" - соответствует горящему сегменту, т. к. индикатор с общим анодом

Table
addwf PCL,f
retlw b'11000000' ;Цифра "0"
retlw b'11111001' ;Цифра "1"
retlw b'10100100' ;Цифра "2"
retlw b'10110000' ;Цифра "3"
retlw b'10011001' ;Цифра "4"
retlw b'10010010' ;Цифра "5"
retlw b'10000010' ;Цифра "6"
retlw b'11111000' ;Цифра "7"
retlw b'10000000' ;Цифра "8"
retlw b'10010000' ;Цифра "9"
retlw b'10001000' ;Цифра "А"
retlw b'10000011' ;Цифра "B"
retlw b'11000110' ;Цифра "C"
retlw b'10100001' ;Цифра "D"
retlw b'10000110' ;Цифра "E"
retlw b'10001110' ;Цифра "F"
retlw b'11111111' ;Пустое место (код 10h)

;
;********************* Обработка прерывания от TMR0 ***********************
;

Int_Prog
movwf W_copy ;Сохранение регистров
movf STATUS,w
movwf STATUS_copy
movf FSR,w
movwf FSR_copy
bcf INTCON,T0IF ;Сбросить флаг прерывания

movlw 0x06 ; Настраиваем таймер
movwf TMR0

btfsc Flags,Phase ;Проверка текущего режима:
goto Clear ;Если установка-обнулить счетчики

incf int_count_pre
movlw 60
subwf int_count_pre, w
btfss status, c
goto Indicate
movlw 60
movwf int_cout_pre


movfw Int_Count_Low ; Прибавляем LSB счетчик прерываний
xorlw H'FF' ;Если переполнен-перенос в ст. разряд
BZ Add_H ;
incf Int_Count_Low,f
goto Indicate ;Индикация
Add_H
incf Int_Count_High,f ;Прибавляем MSB счетчик прерываний
clrf Int_Count_Low
movfw Int_Count_High
xorlw H'FF' ;Если переполнен-обнулить счетчики
BZ Clear
goto Indicate ;Индикация
Clear
clrf Int_Count_Low
clrf Int_Count_High
Indicate
bcf PORTA,Ind_0 ;Гашение индикаторов
bcf PORTA,Ind_1
incf Ind_Nom,f ;Выбор индикатора (чет\нечет)
btfss Ind_Nom,0 ; если чет-индикация мл.байта
goto LSB_Ind ; если нечет-старшего
goto MSB_Ind
MSB_Ind
movf Digit_1,w ;Загрузить MSB в w
call Table ;Преобразование в 7-сегм. код
andwf Flags,w ;Установить бит 7 порта В
movwf PORTB ; и вывод
bsf PORTA,Ind_1 ;Включить индикатор
goto End_Int
LSB_Ind
movf Digit_0,w ;Загрузить MSB в w
call Table ;Преобразование в 7-сегм. код
andwf Flags,w ;Установить бит 7 порта В
movwf PORTB ; и вывод
bsf PORTA,Ind_0 ;Включить индикатор
End_Int
movf FSR_copy,w ;Восстановление регистров
movwf FSR
movf STATUS_copy,w
movwf STATUS
swapf W_copy,f
swapf W_copy,w
retfie

;
;****************** Подпрограмма "One Shot" ********************************
;

One_Shot
clrf N
bsf STATUS,RP0
bsf TRISA,2
bcf STATUS,RP0
Tst
btfss PORTA,C1_Rel
goto Ready
incfsz N,f
goto Tst
Ready
decf N,f
movf N,w
xorlw 0xFF
btfsc STATUS,Z
clrf N
bsf STATUS,RP0
bcf TRISA,2
bcf STATUS,RP0
bsf PORTA,C1_Rel
return

;
;************************** Подпрограмма задержки на 1s *****************
;

Delay_1s
movlw Z_Pause
movwf Z_Count
Z_Loop
movlw Y_Pause
movwf Y_Count

Y_Loop movlw X_Pause
movwf X_Count

X_Loop decfsz X_Count,f
goto X_Loop
decfsz Y_Count,f
goto Y_Loop
decfsz Z_Count,f
goto Z_Loop
return

;
;**************Подпрограмма задержки на 100 мс***************************
;

Delay_100ms
movlw Del_Range
movwf Delay_Reg_1
movlw h'FF'
movwf Delay_Reg_2
Loop
decfsz Delay_Reg_2,f
goto Loop
decfsz Delay_Reg_1,f
goto Loop
return

;
;********* Подпрограмма подачи звукового сигнала на RA4 ******************
;

Beep
bcf INTCON,7
movlw Cycle_4
movwf Cell_4

Beep_500
movlw Cycle_3
movwf Cell_3
Double
movlw Cycle_2
movwf Cell_2
H_Level
bsf PORTA,4
movlw Cycle_1
movwf Cell_1
Ring_1
decfsz Cell_1,f
goto Ring_1
L_Level
bcf PORTA,4
movlw Cycle_1
movwf Cell_1
Ring_2
decfsz Cell_1,f
goto Ring_2

decfsz Cell_2,f
goto H_Level

decfsz Cell_3,f
goto Double
goto Del_500

Del_500
movlw Cycle_3
movwf Cell_3
Doub
movlw Cycle_2
movwf Cell_2
H_Lev
bcf PORTA,4
movlw Cycle_1
movwf Cell_1
Rin_1
decfsz Cell_1,f
goto Rin_1
L_Lev
bcf PORTA,4
movlw Cycle_1
movwf Cell_1
Rin_2
decfsz Cell_1,f
goto Rin_2

decfsz Cell_2,f
goto H_Lev

decfsz Cell_3,f
goto Doub

decfsz Cell_4,f
goto Beep_500
bsf INTCON,7
return


;
;**** Подпрограмма табличной конвертации значения N *********
; в длительность выдержки времени (мин.)

ORG 0x300
Convert
addwf PCL,f
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .1
retlw .2
retlw .2
retlw .2
retlw .2
retlw .2
retlw .2
retlw .2
retlw .2
retlw .2
retlw .2
retlw .2
retlw .2
retlw .2
retlw .2
retlw .2
retlw .2
retlw .2
retlw .2
retlw .2
retlw .2
retlw .3
retlw .3
retlw .3
retlw .3
retlw .3
retlw .3
retlw .3
retlw .3
retlw .3
retlw .3
retlw .3
retlw .3
retlw .3
retlw .3
retlw .3
retlw .3
retlw .3
retlw .3
retlw .3
retlw .3
retlw .4
retlw .4
retlw .4
retlw .4
retlw .4
retlw .4
retlw .4
retlw .4
retlw .4
retlw .4
retlw .4
retlw .4
retlw .4
retlw .4
retlw .4
retlw .4
retlw .4
retlw .4
retlw .4
retlw .4
retlw .5
retlw .5
retlw .5
retlw .5
retlw .5
retlw .5
retlw .5
retlw .5
retlw .5
retlw .5
retlw .5
retlw .5
retlw .5
retlw .5
retlw .5
retlw .5
retlw .5
retlw .5
retlw .5
retlw .5
retlw .6
retlw .6
retlw .6
retlw .6
retlw .6
retlw .6
retlw .6
retlw .6
retlw .6
retlw .6
retlw .6
retlw .6
retlw .6
retlw .6
retlw .6
retlw .6
retlw .6
retlw .6
retlw .6
retlw .6
retlw .7
retlw .7
retlw .7
retlw .7
retlw .7
retlw .7
retlw .7
retlw .7
retlw .7
retlw .7
retlw .7
retlw .7
retlw .7
retlw .7
retlw .7
retlw .7
retlw .7
retlw .7
retlw .7
retlw .7
retlw .8
retlw .8
retlw .8
retlw .8
retlw .8
retlw .8
retlw .8
retlw .8
retlw .8
retlw .8
retlw .8
retlw .8
retlw .8
retlw .8
retlw .8
retlw .8
retlw .8
retlw .8
retlw .8
retlw .8
retlw .9
retlw .9
retlw .9
retlw .9
retlw .9
retlw .9
retlw .9
retlw .9
retlw .9
retlw .9
retlw .9
retlw .9
retlw .9
retlw .9
retlw .9
retlw .9
retlw .9
retlw .9
retlw .9
retlw .9
retlw .9
retlw .10
retlw .10
retlw .10
retlw .10
retlw .10
retlw .10
retlw .10
retlw .10
retlw .10
retlw .10
retlw .10
retlw .10
retlw .10
retlw .10
retlw .10
retlw .10
retlw .10
retlw .10
retlw .10
retlw .11
retlw .11
retlw .11
retlw .11
retlw .11
retlw .11
retlw .11
retlw .11
retlw .11
retlw .11
retlw .11
retlw .11
retlw .11
retlw .11
retlw .11
retlw .11
retlw .11
retlw .11
retlw .11
retlw .11
retlw .12
retlw .12
retlw .12
retlw .12
retlw .12
retlw .12
retlw .12
retlw .12
retlw .12
retlw .12
retlw .12
retlw .12
retlw .12
retlw .12
retlw .12
retlw .12
retlw .12

END ;Конец


А вот какой дать адрес ячейки для переменной int_count_pre?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Вс апр 25, 2010 15:06:09 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7315
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Rrrrrrrrr. Не надо постить такие огромные листинги. тем более 3 раза, тем более в таком нечитабельном виде. кстати, я там бред написал. Начал писать инкрементирующий счетчик и закончил мыслью декрементирующего счетчика.
в конце надо присваивать не 60, а ноль.
Код:
   incf int_count_pre
   movlw 60
   subwf int_count_pre, w
   btfss status, c
   goto Indicate
   clrf int_cout_pre

А адрес любой свободный в нулевой странице. Наприме следующий свободный 0x20.

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Вс апр 25, 2010 16:16:25 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4590
Откуда: Планета Земля
Рейтинг сообщения: 2
Медали: 1
Получил миской по аватаре (1)
Вы хоть бы схему показали. Быстрее Вам написАть новую прогамму, чем помочь в этой разобраться.
За "бутылку пива" напишу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Вс апр 25, 2010 16:54:34 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7315
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Вроде нашел. Радио 7/2006. http://www.radio.ru/archive/2006/07/a15.shtml

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите чайнику с таймером на PIC16F84a
СообщениеДобавлено: Вс апр 25, 2010 18:34:08 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4590
Откуда: Планета Земля
Рейтинг сообщения: 2
Медали: 1
Получил миской по аватаре (1)
Схемы нет :(


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 27 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y