Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 11.10.2006, 12:29  
alexander70
Прописка
 
Регистрация: 14.07.2005
Сообщений: 133
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 6 сообщении(ях)
alexander70 на пути к лучшему
По умолчанию Добавление и вывод данных в EEPROM ( PIC16F84A)

Приветствую! Есть готовая программа (ниже) и схема счётчика (импульсов или замыканий кнопки и т.д.) http://cdrecords.narod.ru/Count.pdf . При каждом нажатии на кнопку SW5 счётчик уменьшается на 1, а при нажатии на SW3, счётчик увеличивается на 1. Кнопками SW1, SW2, SW4, SW8 устанавливаются начальные показания счётчика (удобно при работе счётчика в режиме уменьшения). При достижении счётчиком нулевых значений, загорается светодиод. Предлагается добавить 2 кнопки на свободные выводы, например на RB6 и RA4 . Первая кнопка записывает набранные значения на индикаторе в память EEPROM , вторая кнопка выводит значения из памяти на индикатор (чтобы каждый раз не набирать необходимые значения заново). А может быть даже можно обойтись одной кнопкой подключённой к RB6. Короткое нажатие записывает значение на индикаторе в память, а длительное нажатие выводит показания из памяти на индикатор. Что для этого лучше изменить в программе?

С уважением, Александр

list p=16f84
include "P16F84A.inc"
__config _RC_OSC & _WDT_OFF & _PWRTE_ON
;Описание портов ввода/вывода (табл. 16)
;Вывод
ANODE equ PORTA
bFig1 equ 3 ;RA3 (выв. 2)
bFig2 equ 2 ;RA2 (выв. 1)
bFig3 equ 1 ;RA1 (выв. 1
bFig4 equ 0 ;RA0 (выв. 17)
mANODE equ (1‹‹bFig1)|(1‹‹bFig2)|(1‹‹bFig3)|(1‹‹bFig4)
DCD equ PORTB
mDCD equ B'00001111' ;RB0-RB3 (выв. 6-9)
;Ввод
SENSORS equ PORTB
bKey equ 6 ;RB6 (выв. 12)
bSEN1 equ 5 ;RB5 (выв. 11)
bSEN2 equ 4 ;RB4 (выв. 10)
mSEN1 equ 1‹‹bSEN1
mSEN2 equ 1‹‹bSEN2
mSENS equ mSEN1+mSEN2

MaxInt equ (.31*4)-1
;Переменные (табл. 17)
cblock H'0C'
W_copy
STATUS_copy
FSR_copy
SensPos
FigPtr
Fig1
Fig2
Fig3
Fig4
FigSel
IntCtr ;счетчик прерываний
Alarm ;сигнал перехода 1-›0
endc
;Возможные состояния датчиков
Pos0 equ 0
Pos1 equ mSEN1
Pos2 equ mSENS
Pos3 equ mSEN2
;Макроопределения
;Узел алгоритма (табл. 7)
NODE macro pp1,nn1,pp2,nn2,pp3,nn3
local NO
NO movfw SENSORS
andlw mSENS
movwf SensPos
xorlw pp1
BZ nn1
movfw SensPos
xorlw pp2
BZ nn2
movfw SensPos
xorlw pp3
BZ nn3
goto NO
endm
INCR macro Fig
local Lab
movfw Fig
addlw -9
BZ Lab
incf Fig,f
return
Lab clrf Fig
endm
DECR macro Fig
local Lab
movf Fig,f
BZ Lab
decf Fig,f
return
Lab movlw 9
movwf Fig
endm
SetLeft macro
movlw Fig1
movwf FigPtr
movlw B'00001000'
movwf FigSel
endm
;Начало исполняемого кода
org 0
goto START
org 4
;Обслуживание прерывания
;по переполнению таймера (табл. 19)
T0SERV movwf W_copy
movf STATUS,w
movwf STATUS_copy
movf FSR,w
movwf FSR_copy
;
decfsz IntCtr,f
goto Proceed
movlw MaxInt
movwf IntCtr
btfsc SENSORS,bKey
goto Proceed
btfsc FigSel, bFig2
call INCR1
btfsc FigSel, bFig3
call INCR2
btfsc FigSel, bFig4
call INCR3
btfsc FigSel, bFig1
call INCR4
Proceed
;
clrf ANODE
movfw FigPtr
movwf FSR
movfw INDF
; iorlw ~mDCD
iorwf Alarm,w
movwf DCD
movfw FigSel
movwf ANODE
incf FigPtr,f
bcf STATUS,C
rrf FigSel,f
btfss STATUS,C
goto ENDINT
SetLeft
ENDINT movf FSR_copy,w
movwf FSR
movf STATUS_copy,w
movwf STATUS
swapf W_copy,f
swapf W_copy,w
bcf INTCON,T0IF
retfie
;
INCR1 INCR Fig1
return
INCR2 INCR Fig2
return
INCR3 INCR Fig3
return
INCR4 INCR Fig4
return



;Инициализация (табл. 1
START clrf ANODE
bsf STATUS,RP0
clrf TRISA
movlw B'01110000'
movwf TRISB
;movlw B'00000010'
;movwf OPTION_REG
bcf OPTION_REG,NOT_RBPU
bcf OPTION_REG,T0CS
bcf STATUS,RP0
SetLeft
clrf Fig1
clrf Fig2
clrf Fig3
clrf Fig4
movlw MaxInt
movwf IntCtr
clrf Alarm
bsf INTCON,T0IE
bsf INTCON,GIE


;Основной цикл (табл. 10)
;-----------------------------------------
;picmaniac's code
WP1 btfss PORTB,bSEN1 ;Проверим вход увеличения (активный - высокий)
goto WM1 ;Лог.0 - переход на проверку другого входа
call Pause ;Пауза от дребезга
btfss PORTB,bSEN1 ;Повторная проверка
goto WM1 ;Дребезг - переход
;-----------------------------------------

;ND0 NODE Pos1,ND1,Pos3,ND4,Pos2,ND0
;ND1 NODE Pos2,ND2,Pos0,ND0,Pos3,ND0
;ND2 NODE Pos3,ND3,Pos1,ND1,Pos0,ND0
;ND3 NODE Pos0,ND3A,Pos2,ND2,Pos1,ND0


ND3A bcf INTCON,GIE
call ADD1
bsf INTCON,GIE
clrf Alarm

;-----------------------------------------
;picmaniac's code
WP2 btfsc PORTB,bSEN1 ;Ждем, пока пройдет сигнал по входу увеличения
goto WP2 ;
call Pause ;Пауза от дребезга
btfsc PORTB,bSEN1 ;
goto WP2 ;


WM1 btfss PORTB,bSEN2 ;Проверим вход уменьшения (активный - высокий)
goto WP1 ;Лог.0 - переход на проверку другого входа
call Pause ;Пауза от дребезга
btfss PORTB,bSEN2 ;Повторная проверка
goto WP1 ;Дребезг - переход
;-----------------------------------------

;ND4 NODE Pos2,ND5,Pos0,ND0,Pos1,ND0
;ND5 NODE Pos1,ND6,Pos3,ND4,Pos0,ND0
;ND6 NODE Pos0,ND6S,Pos2,ND5,Pos3,ND0


ND6S bcf INTCON,GIE
call SUBT1
bsf INTCON,GIE
;
clrf Alarm
movf Fig1,w
addwf Fig2,w
addwf Fig3,w
addwf Fig4,w
btfsc STATUS,Z
bsf Alarm,7

;-----------------------------------------
;picmaniac's code
WM2 btfsc PORTB,bSEN2 ;Ждем, пока пройдет сигнал по входу уменьшения
goto WM2 ;
call Pause ;Пауза от дребезга
btfsc PORTB,bSEN2 ;
goto WM2 ;

goto WP1
;-----------------------------------------

;Подпрограммы (табл. 13)
ADD1 INCR Fig4
INCR Fig3
INCR Fig2
INCR Fig1
return
SUBT1 DECR Fig4
DECR Fig3
DECR Fig2
DECR Fig1
return
;-----------------------------------------
;picmaniac's code
Pause movlw 0
P_label addlw 1
nop
btfss STATUS,Z
goto P_label
return
;-----------------------------------------
end
Реклама:
alexander70 вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Упаковка данных (сжатие данных) satnettv Proteus, KiCAD и другие ECAD 4 06.09.2007 20:15
Вывод инфо. SpL Микроконтроллеры, АЦП, память и т.д 21 30.01.2007 22:40
Вывод состояния через 1 вывод DL36 Микроконтроллеры, АЦП, память и т.д 0 16.11.2006 14:27
PIC16F84A??? RETAS Микроконтроллеры, АЦП, память и т.д 7 04.03.2005 05:20
PIC16F84A проблема с записью в ПЗУ данных Jerry86 Микроконтроллеры, АЦП, память и т.д 2 23.12.2004 03:43


Часовой пояс GMT +4, время: 19:16.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot