Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » WRITE, READ в протоне (Подскажите по командам записи чтения EPROM)
WRITE, READ в протоне
warstas Дата: Вт, 02.12.2014, 00:33  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Новенький
Сообщений: 4
Репутация: 0   ±
Замечания:   ±
На сайте с 24.11.2011

Статус: Offline

Здравствуйте Уважаемые!
Собственно в PicBasicPro пользовался WRITE, READ этими командами, проблем не возникало, при включении питания данные считывались при отключении сохранялись.
Начал переходить на Протон и не могу найти адекватной замены этим простым командам, всякие Cdata, Cread, Cwrite сохраняют данные не в EPROM Memory а в Program Memory туда где храниться основная программа. Просто write read не работают, перелопатил всю ИнструкцияProton+IDE и ничего.
Ткните носом!
Вот такая конструкция в пик бейсике работает у меня без проблем:
проц 16F628A, 16F877A
X var WORD
Y var WORD

WRITE 1 , 9
WRITE 2 , 8
READ 1, X
READ 2, Y

MAIN:'____________________Начало_________________________________
LCDOUT $FE,2,"X=",DEC3 X, $FE,$14,"Y=",DEC3 Y
PAUSE 100
GOTO MAIN
ЯНДЕКС Дата: 02.12.2014
dimvad Дата: Вт, 02.12.2014, 00:58  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 54   ±
Замечания:   ±
На сайте с 20.07.2012

Статус: Offline

В протоне - это команды Eread и Ewrite.
warstas Дата: Вт, 02.12.2014, 01:10  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Новенький
Сообщений: 4
Репутация: 0   ±
Замечания:   ±
На сайте с 24.11.2011

Статус: Offline

О заработало!
Огромное спасибо!
Плохо книгу читал.
mnbv Дата: Пт, 25.03.2016, 19:56  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Новенький
Сообщений: 17
Репутация: 2   ±
Замечания:   ±
На сайте с 09.03.2011

Статус: Offline

Напоролся на небольшую проблему. Надо забить данные в память, затем, в ходе программы их читать. Но не получается. Упрощенная рограмма ниже приведена - там лапкой помахать в симуляторе; я пользуюсь picsimulatoride. Протон версии 3.5.2.6 MPASM 5.47.  Пишу hex в контроллер, затам считываю память - данные там сидят. Получается, что проблема в операторе READ. Не разбираюсь в ассемблере, но не увидел там команды EEADR. Переписал кусок программы в PICBASIC (2.47 если что), там всё работает. Можно, конечно, и всю программу написать на PICBASIC, но на Протоне она чуть короче. В чём может быть проблема?
Код

Device 12F683
Declare  Reminders = OFF    '
Xtal = 8
'----------------------------Предустановки----------------------------------------------------------
Config  CP_OFF, CPD_OFF, PWRTE_OFF, MCLRE_OFF, WDT_OFF, INTRC_OSC_NOCLKOUT', BOREN_ON
OSCCON = %01110000                     ' 8 мгц
'ADCON0.7 = 1                            ' выравнивание результата АЦП по правому краю
CMCON0 = 7                             ' откл  
TRISIO=%00011010                       '   
Dim a         As Word                  '
Dim b         As Byte                  '
Dim k         As Word                  '
Dim PWM_value As Word                  '
Dim y         As Byte                  'Word
k=0
y=0
b=0
EData  5, 5,2, 1, 3 , 127
'*****************************
data_out:                           ' вывод
    a = ERead b
    GPIO.0 = 1
    DelayUS 200                     ' сброс
    GPIO.0 = 0                      '
    DelayUS 200
       k = 0
       Repeat
          If k > 0 Then                '
           GPIO.0 = 1
           DelayUS 3
           GPIO.0 = 0
       EndIf
       Inc k
       Until k > a
       DelayMS 5
       Inc b
GoTo data_out
'*****************************  
End
Прикрепления: READ1.rar (15.9 Kb)

Сообщение отредактировал mnbv - Пт, 25.03.2016, 19:59
mnbv Дата: Пт, 25.03.2016, 20:00  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Новенький
Сообщений: 17
Репутация: 2   ±
Замечания:   ±
На сайте с 09.03.2011

Статус: Offline

[code][/code]
Сообщение отредактировал mnbv - Пт, 25.03.2016, 20:03
anatol Дата: Сб, 26.03.2016, 16:40  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Порой лень писать
Код
[b] k = 0
       Repeat
          If k > 0 Then
[b]
И когда получится условие k > 0
mnbv Дата: Пн, 28.03.2016, 08:11  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Новенький
Сообщений: 17
Репутация: 2   ±
Замечания:   ±
На сайте с 09.03.2011

Статус: Offline

Этот кусок программы работает так: переменной k присваивается начальное значение 0, затем вход в цикл "repeat....until", затем внутри цикла проверяется условие k>0. В первом цикле оно не выполняется. В конце цикла к увеличивается на единицу и становится равным 1. Цикл повторяется со строчки "repeat". Условие k>0 в этом и последующих циклах выполняется, поэтому происходит помахивание лапкой. Так происходит до тех пор, пока переменная k не превысит значения другой переменной (или числа). Условие k>0 введено для того, чтобы число импульсов на выходе было равно значению этой самой другой переменной, а если убрать это условие, то на выходе будет на один импульс больше.
         Но вопрос в том, что число, которое Протон считывает из ячейки памяти по адресу 0 не равно тому, которое туда записано. А picbasic делает это всё правильно.
ivan_fd Дата: Пн, 28.03.2016, 11:25  |                                                                                                                Сообщение # 8
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

mnbv,

EData  Word 5, 5,2, 1, 3 , 127

Сообщение отредактировал ivan_fd - Пн, 28.03.2016, 11:26
mnbv Дата: Пн, 28.03.2016, 11:45  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Новенький
Сообщений: 17
Репутация: 2   ±
Замечания:   ±
На сайте с 09.03.2011

Статус: Offline

Да нет. Я пробовал и Edata as Byte, Edata as word и прочее. Кроме того, я пробовал просто забить нулями первый десяток адресов. Все равно читается не то, а, похоже 65535.
ivan_fd Дата: Пн, 28.03.2016, 11:48  |                                                                                                                Сообщение # 10
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

У меня все работает. До этого, в переменную a выводилось два байта, как и должно быть.
mnbv Дата: Пн, 28.03.2016, 11:56  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Новенький
Сообщений: 17
Репутация: 2   ±
Замечания:   ±
На сайте с 09.03.2011

Статус: Offline

работает мой код от Протона? В симуляторе? Если в asm нет  EEADR - я его не вижу или он не нужен?
Сообщение отредактировал mnbv - Пн, 28.03.2016, 12:08
ЯНДЕКС Дата: 28.03.2016
ivan_fd Дата: Пн, 28.03.2016, 12:06  |                                                                                                                Сообщение # 12
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Да Ваш код в Протеусе. Только прописал, что бы в Еепром записывало двух байтовое значение, а не один байт.
До того, по команде EREAD, считывало так же два байта, но так как у нас в первой ячейке 5 и во второй тоже 5, то мы получали 1285.
mnbv Дата: Пн, 28.03.2016, 12:13  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Новенький
Сообщений: 17
Репутация: 2   ±
Замечания:   ±
На сайте с 09.03.2011

Статус: Offline

Если у Вас всё работает, то дальше я разберусь. Большое спасибо. Кажется, пора переходить на Протеус.
Anatoliy1000 Дата: Сб, 09.04.2016, 12:20  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 31
Репутация: 0   ±
Замечания:   ±
На сайте с 02.03.2016

Статус: Offline

Такая же проблема как и у предыдущего "писателя"
1. При компиляции ругается на объявленную переменную.
2. Как прочитать 5 из памяти с вытекающими последствиями?


Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
dimvad Дата: Сб, 09.04.2016, 15:37  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 54   ±
Замечания:   ±
На сайте с 20.07.2012

Статус: Offline

У Вас переменная Pausa определена как Byte, а в условии If  NomProg = 5 Then Pausa = 1000 Вы присваивайте ей значение Word, вот компилятор и ругается. А по поводу Eread проблем не вижу, все вроде должно работать.
Форум Picbasic.ru » Программирование МК » Proton PicBasic » WRITE, READ в протоне (Подскажите по командам записи чтения EPROM)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: