Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Shift1 system for 1-wire shift registers


Shift1 system for 1-wire shift registers

Сообщений 1 страница 30 из 31

1

Здравствуйте! Пытаю повторить эту конструкцию, только на баскоме
пример кода автора на С файлы автора

из особенностей: исходный код автора передает 7бит(вместо 8) - регистр Q0(hc595) нельзя записать, у меня получается тоже самое.

Отредактировано NewUserBascom (2019-01-08 22:46:14)

0

2

Покопайтесь вот тут Эмуляция 1-Wire устройства

+1

3

Спасибо! давно как то видел эту тему.
я так пологаю этот кусок кода :

Код:
' Ïåðåäà÷à áàéòà ìàñòåðó
Sendbyte:
For A = 0 To 7

L21:
    sbis pinC, dqpin
    rjmp L21
L22:
    sbic pinC, dqpin
    rjmp L22
Timer = 256 - T1reset
Start Timer0

If Bytedat.0 = 0 Then DDRC.dqpin = Opin
Waitus Owdata
DDRC.dqpin = Ipin

Rotate Bytedat , Right

Next A
Stop Timer0
Return


если да то .... я в асемблере не бум бум...

0

4

Да, это фрагмент передачи байта.
Но только его не хватит.
Полистайте повнимательнее... ;)

PS. При вставке кода для корректного копирования необходимо, чтоб и в Bascom и здесь был включен РУС...

+1

5

если я правильно понимаю, то этот код дергает ногу так?

Код:
L01:
    sbic pinC, dqpin
    rjmp L01
L02:
    sbis pinC, dqpin
    rjmp L02

0

6

Не выдергивайте середину, это не поможет для полного понимания того кода...
Какова конечная цель ?
1-Wire Slave ?
Там это реализовано. Изначально не мной, я адаптировал (частично) стороннюю разработку под конкретную м/сх.

0

7

NewUserBascom написал(а):

если я правильно понимаю, то этот код дергает ногу так?

Этот фрагмент ожидает готовности Мастера к приему следующего бита.
Ничего не дергает, а проверяет.

0

8

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

немного разобрался, почитал справку баском, поглядел на другие примеры в итоге родил такое:

тест.раб.1
Код:
$regfile = "m328pdef.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
$baud = 9600

Dim Bx As Byte                                              ' отправляемая переменная
Dim I As Byte
Dim Temp As Byte
Declare Sub B1                                              ' подпрограмма формирования "1" в регистр
Declare Sub B0                                              ' подпрограмма формирования "0" в регистр
Declare Sub Latch                                           ' подпрограмма формирования защелкивания регистра
Declare Sub Send(byval Bx As Byte)                          ' подпрограмма отправки всего и вся
Config Portb.2 = Output
Ds Alias Portb.2
Set Ds
Waitms 100

Bx = &H30
Call Send(bx)
Waitms 1000
Bx = &HFF
Call Send(bx)
Waitms 1000
Bx = &H55
Call Send(bx)
Waitms 1000
Bx = &H80
Call Send(bx)
Waitms 1000
Bx = &H02
Call Send(bx)
End

Sub Send
For I = 0 To 7
Temp.i = Bx.i
If Temp.i = 0 Then
Call B0
End If
If Temp.i = 1 Then
Call B1
End If
Next I
Call Latch
End Sub

Sub B1
'bit=1
Ds = 0
Ds = 1
Waitus 1
End Sub

Sub B0
'bit=0
Ds = 0
Waitus 15
Ds = 1
Waitus 35
End Sub

Sub Latch
Ds = 0
Waitus 200
Ds = 1
Waitus 400
'Ds = 0
 End Sub

отправляет в регистр любое число. Дальше буду пробовать инициализацию лсд(пока в таком виде), если получится хотя бы цифру "1" вывести))) дальше можно будет оптимизировать.

Отредактировано NewUserBascom (2019-01-05 01:05:46)

0

9

NewUserBascom написал(а):

в ассемблере не силен, заглянул сюда, видимо не правильно понимаю.

Ассемблерные вставки использованы для получения более стабильных временнЫх интервалов, т.к. 1-Wire к этому весьма чувствителен.
Операторы Bascom исполняются несколько дольше машинных команд, поэтому Waitms 1 - далеко не всегда будет 1mS...
Когда начинал заниматься этим вопросом, тоже использовал Waitms...
Неустойчиво, много ошибок...

+1

10

NewUserBascom написал(а):

в ассемблере не силен, заглянул сюда, видимо не правильно понимаю.

Давайте поразбираемся... ;)

L01:                          - метка L01
    sbic pinC, dqpin      - пропустить следующую команду, если бит в регистре I/O очищен ("0")
    rjmp L01               - если условие не выполнено, то переход на метку L01
L02:                          - метка L02
    sbis pinC, dqpin      - пропустить следующую команду, если бит в регистре I/O установлен ("1")
    rjmp L02               - если условие не выполнено, то переход на метку L02

Эквивалент на Bascom:
L01:
    IF PINC.dqpin = 1 THEN GOTO L01    - ожидаем появления "0" на указанном пине
L02:
    IF PINC.dqpin = 0 THEN GOTO L02    - ожидаем появления "1" на указанном пине

Только выполняться эта конструкция на каждом этапе будет несколько дольше, чем ассемблерная, что чревато искажением временнЫх параметров сигнала.
По этой же причине данная конструкция не вынесена в отдельную подпрограмму, а оставлена в нескольких местах без изменений.

+1

11

Спасибо! Очень поучительно. :cool:

0

12

В общем, все переделал, предыдущие программы работали криво, этот код выводит буквы,цифры и символы на лсд, проверял пока в протеусе.

Код bas+asm
Код:
$map
$regfile = "m328pdef.dat"
$crystal = 8000000
$hwstack = 64
$swstack = 64
$framesize = 64
$baud = 9600


Dim I As Byte
Dim A As Byte
Dim Lcd_string As String * 16
Dim Character(17) As Byte At Lcd_string Overlay

Declare Sub Preout_txt(byval Txt As Byte)
Declare Sub Preout_cmd(byval Pr As Byte)
Declare Sub Cls1
Declare Sub Init
Declare Sub Send(byval Bx As Byte)
Declare Sub Text(byval Lcdstring As String)
Declare Sub Convert(byval Cx As Byte)


Config Portb.2 = Output
Config Portb.0 = Output
Ds Alias Portb.2
Set Ds
Waitms 200

Call Init
Call Cls1


Do
Call Text( "ABCDEFabcdefQq")
End
Loop

Sub Text(byval Lcdstring As String)

   Local Strlen As Byte
   Local A As Byte

   Strlen = Len(lcdstring)
   Lcd_string = Lcdstring

   For A = 1 To Strlen
      Call Convert(character(a))
   Next

End Sub

Sub Convert(byval Cx As Byte)
Local Hb As Byte , Lb As Byte
Hb = 0
Hb.1 = Cx.7
Hb.2 = Cx.6
Hb.3 = Cx.5
Hb.4 = Cx.4
Print Bin(hb)
Call Preout_txt(hb)

Lb = 0
Lb.1 = Cx.3
Lb.2 = Cx.2
Lb.3 = Cx.1
Lb.4 = Cx.0
Print Bin(lb)
Call Preout_txt(lb)
End Sub


Sub Preout_txt(byval Txt As Byte)
Call Send(96)
Call Send(txt + 96)
Call Send(txt + 64)
Txt = 0
End Sub


Sub Preout_cmd(byval Pr As Byte)
Call Send(32)
Call Send(pr + 32)
Call Send(pr)
Pr = 0
End Sub


'**********************************подпрограмма отправки в НС595*****************************'
Sub Send(byval Bx As Byte)

For I = 0 To 7
A = Bx.i
Esli0:
   lds R16 , {A}
   cpi R16 , 0
   BREQ send0
   rjmp Esli1:
   Send0:
    cbi PORTB,PB2
    ldi  r18, 40
    L1:
    dec  r18
    brne L1
    sbi PORTB,PB2
    ldi  r18, 93
    L2:
    Dec R18
    brne L2
    nop
Esli1:
   lds R16 , {A}
   cpi R16 , 1
   BREQ send1
   rjmp Выход
   Send1:
  cbi PORTB,PB2
  sbi PORTB,PB2
  lpm
  lpm
  rjmp Выход:
Выход:
Next I

'<latch>'
cbi PORTB,PB2
Wait200:
    ldi  r18, 3
    ldi  r19, 19
    L3:
    dec  r19
    brne L3
    dec  r18
    brne L3
sbi PORTB,PB2
Wait300:
    ldi  r18, 4
    ldi  r19, 29
    L4:
    dec  r19
    brne L4
    dec  r18
    brne L4
'<latch>'
Bx = 0
  End Sub
'**********************************подпрограмма отправки в НС595*****************************'

Sub Init
  '*************init 8bit*****************
Call Preout_cmd(&H18)
RCALL Waitms2
Call Preout_cmd(&H18)
RCALL Waitms2
Call Preout_cmd(&H18)
RCALL Waitms2
Call Preout_cmd(&H08)
RCALL Waitms2
Call Preout_cmd(&H08)
RCALL Waitms2
Call Preout_cmd(&H02)
RCALL Waitms2

'*************init 4bit*****************
Call Preout_cmd(&H00)
RCALL Waitms2
Call Preout_cmd(&H1e)
RCALL Waitms2
Call Preout_cmd(&H00)
RCALL Waitms2
Call Preout_cmd(&H04)
RCALL Waitms2
End Sub


Sub Cls1
'*************init cls 4bit*****************
Call Preout_cmd(&H00)
RCALL Waitms2
Call Preout_cmd(&H10)
End Sub

Waitms2:
    ldi  r18, 21
    ldi  r19, 199
   L5:
    dec  r19
    brne L5
    dec  r18
    brne L5
ret
Картинка

https://b.radikal.ru/b34/1901/12/e950c98cf09f.jpg

Коды задержек генерировал здесь, насколько это криво не знаю(я только начинаю врубаться в asm), но работают.

Отредактировано NewUserBascom (2019-01-08 01:57:53)

0

13

Дальше не могу победить, хочу цикл тоже на ассемблере, но не могу сделать(кусок который надо заменить),

код
Код:
Sub Send(byval Bx As Byte)

For I = 0 To 7
A = Bx.i
Esli0:
   lds R16 , {A}
   cpi R16 , 0
   BREQ send0
   rjmp Esli1:
........
здесь что то делается
.....
Next I

........
здесь что то делается
.....
end Sub

может кто подскажет как сделать цикл на ASM? Пробовал отсюда брать: Вставки на ASM AVR (ассемблер)
ничего не получается, еще смущает это:

код
Код:
Sub Convert(byval Cx As Byte)
Local Hb As Byte , Lb As Byte
Hb = 0
Hb.1 = Cx.7
Hb.2 = Cx.6
Hb.3 = Cx.5
Hb.4 = Cx.4
Print Bin(hb)
Call Preout_txt(hb)

Lb = 0
Lb.1 = Cx.3
Lb.2 = Cx.2
Lb.3 = Cx.1
Lb.4 = Cx.0
Print Bin(lb)
Call Preout_txt(lb)
End Sub

но лучше ничего не придумал.
Я пытаюсь оптимизировать, чтоб можно было в Tiny13(2313) использовать, но пока ни как... 1,5Кб занимает...

Отредактировано NewUserBascom (2019-01-08 02:00:11)

0

14

NewUserBascom написал(а):

Дальше не могу победить, хочу цикл тоже на ассемблере, но не могу сделать

Медленно работает ? ;)

В данном случае вместо For...Next надо использовать цепочку, подобную задержке.
Только тут есть одно ограничение...
Используя асс. вставки, придется использовать только регистры и четко следить за их содержимым...
Именованные переменные эти вставки туго поддерживают, могут случиться накладки...
Посему- или перебираться в Макроассемблер и работать там, или искать другие способы... ;)

0

15

NewUserBascom написал(а):

Я пытаюсь оптимизировать, чтоб можно было в Tiny13(2313) использовать, но пока ни как... 1,5Кб занимает...

Для начала оптимизируйте используемые переменные.
Там, где есть возможность, используйте те типы, которые занимают минимум места в памяти.
Избегайте использования "пустых" байтов. Это, например, если объявлена переменная типа Bit...
Каждая (!) такая занимает 1 байт в памяти. Используйте конструкции вроде <байт>.<бит>, например - var.3...

Старайтесь не использовать конструкции Call, Sub...End Sub...
Как ни странно (гуру прокомментируют, если надо) , они и работают медленнее и память хомячат...
Лучше Gosub...Return...

Следующий ход:

$hwstack = 64
$swstack = 64
$framesize = 64

Начинайте уменьшать значения в этих строках, только предварительно изучите, за что каждая отвечает.
Даже сейчас, навскидку, видно, что значения завышены.

Анализируйте размер прошивки уже после того, как закомментированы все строки, которые используются только при отладке.
Отсутствие тех же $baud = 9600, Print сразу даст ощутимый эффект.

+1

16

Nord написал(а):

Посему- или перебираться в Макроассемблер и работать там, или искать другие способы...

Я ж только учусь))) могу и глупостей наворотить. В любом случае у того забугорного товарища все вмещается меньше чем в 2Кб(и ЛСД по одному проводу и рабочая программа) и на С все написано... КАК???

Код:
$hwstack = 64
$swstack = 64
$framesize = 64


я их увеличил, потому что долго не понимал, иногда при отладке все значения в программе выбивало в 0. Конечно буду уменьшать. Еще попробую инициализацию(значения) отправить в Data.

Отредактировано NewUserBascom (2019-01-08 03:04:12)

0

17

NewUserBascom написал(а):

Я ж только учусь))) могу и глупостей наворотить. В любом случае у того забугорного товарища все вмещается меньше чем в 2Кб(и ЛСД по одному проводу и рабочая программа) и на С все написано... КАК???

Учимся мы постоянно, даже гуру этого форума не знают всего и иногда лазают по справочникам и даташитам... ;)

А в отношении "того забугорного товарища" могу сказать только, что он тоже вряд ли гений... ;)
"Нет плохих компьютеров, есть плохие программисты..." (приписывают Б.Гейтсу) ;)

0

18

NewUserBascom написал(а):

Код:$hwstack = 64
$swstack = 64
$framesize = 64
я их увеличил, потому что долго не понимал

Вот здесь, в последнем посте, RDW хорошо про них (стеки) разложил Вставить спецсимвол в строку

+1

19

Nord написал(а):

Начинайте уменьшать значения в этих строках, только предварительно изучите, за что каждая отвечает.
Даже сейчас, навскидку, видно, что значения завышены.

Если перед тем, как писать программу создать проект, а уж потом в нём файлы программы, то в окне CodeExplorer всё просчитывается автоматически.
Параметры стеков будут меняться по мере написания кода. Останется только в финале установить эти значения и вуаля. :blush:
http://s5.uploads.ru/t/olFC3.jpg

+1

20

sva-don написал(а):

Если перед тем...

Во как...  :confused:
Век живи - век учись... ;)
Биг сенкс !  :cool:

0

21

sva-don написал(а):

Если перед тем


Такое только в последней версии есть. :D

0

22

CodeExplorer давно появился, а не в текущей версии. Я бы задал размер стеков с запасом, а не те числа что в CodeExplorer.

0

23

Пётр написал(а):

CodeExplorer давно появился, а не в текущей версии. Я бы задал размер стеков с запасом, а не те числа что в CodeExplorer.

У меня 2.0.8 и естественно чуток добавляю. Но даже без добавлений всё работает как нужно. Пока сбоев не было.

0

24

Nord написал(а):

Вот здесь, в последнем посте, RDW хорошо про них (стеки) разложил

Спасибо! Прочитал, все стало на свои места.

0

25

Nord написал(а):

Старайтесь не использовать конструкции Call, Sub...End Sub...
Как ни странно (гуру прокомментируют, если надо) , они и работают медленнее и память хомячат...
Лучше Gosub...Return...


а вот здесь подробней, допустим как "Sub Convert(byval Cx As Byte)///////end sub" заменить на "Gosub...Return", если в "Sub Convert" я хочу передать Данные из другой подпрограммы в эту подпрограмму.

0

26

NewUserBascom написал(а):

а вот здесь подробней, допустим как "Sub Convert(byval Cx As Byte)///////end sub" заменить на "Gosub...Return", если в "Sub Convert" я хочу передать Данные из другой подпрограммы в эту подпрограмму.

Создайте переменную Сх нужного формата и передавайте ее хоть в конверте... ;)
Свое содержимое она изменит только по вашей воле.

А в Sub-ах у вас присутствуют переменные Local, которые видимы только в пределах данной Sub и их легко потерять...
Вдобавок эти Local создаются в памяти динамически, что тоже может оказаться критическим фактором при работе программы... Бац - и места в памяти не хватило... ;)

0

27

переделал еще немного, получилось 1,254Кб(еще меньше, это голая программа+ инициализация) еще бы -800байт и норм. чтоб в тини13 можно было залить и еще что нибудь осталось для основной программы.
забил инициализацию и очистку экрана в Data и gosub

код
Код:
$map
$regfile = "m328pdef.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 48
$framesize = 16
$baud = 9600


Dim I As Byte
Dim I1 As Byte
Dim B1 As Byte
Dim A As Byte
Dim Lcd_string As String * 16
Dim Character(17) As Byte At Lcd_string Overlay

Declare Sub Preout_txt(byval Txt As Byte)
Declare Sub Preout_cmd(byval Pr As Byte)
Declare Sub Send(byval Bx As Byte)
Declare Sub Text(byval Lcdstring As String)
Declare Sub Convert(byval Cx As Byte)


Config Portb.2 = Output
Ds Alias Portb.2
Set Ds
Waitms 200

Gosub Init
Gosub Cls1


Do
'Call Text( "ABCDEF.abcdef Qq")
'Wait 2
'Gosub Cls1
End
Loop

Sub Text(byval Lcdstring As String)

   Local Strlen As Byte
   Local A As Byte

   Strlen = Len(lcdstring)
   Lcd_string = Lcdstring

   For A = 1 To Strlen
      Call Convert(character(a))
   Next

End Sub

Sub Convert(byval Cx As Byte)
Local Hb As Byte , Lb As Byte
'Hb = 0
Hb.1 = Cx.7
Hb.2 = Cx.6
Hb.3 = Cx.5
Hb.4 = Cx.4
'Print Bin(hb)
Call Preout_txt(hb)

'Lb = 0
Lb.1 = Cx.3
Lb.2 = Cx.2
Lb.3 = Cx.1
Lb.4 = Cx.0
'Print Bin(lb)
Call Preout_txt(lb)
End Sub


Sub Preout_txt(byval Txt As Byte)
Call Send(96)
Call Send(txt + 96)
Call Send(txt + 64)
'Txt = 0
End Sub


Sub Preout_cmd(byval Pr As Byte)
Call Send(32)
Call Send(pr + 32)
Call Send(pr)
'Pr = 0
End Sub


'**********************************подпрограмма отправки в НС595*****************************'
Sub Send(byval Bx As Byte)

For I = 0 To 7
A = Bx.i
Esli0:
   lds R16 , {A}
   cpi R16 , 0
   BREQ send0
   rjmp Esli1:
   Send0:
    cbi PORTB,PB2
    ldi  r18, 40
    L1:
    dec  r18
    brne L1
    sbi PORTB,PB2
    ldi  r18, 93
    L2:
    Dec R18
    brne L2
    nop
Esli1:
   lds R16 , {A}
   cpi R16 , 1
   BREQ send1
   rjmp Выход
   Send1:
  cbi PORTB,PB2
  sbi PORTB,PB2
  lpm
  lpm
  rjmp Выход:
Выход:
Next I

'<latch>'
cbi PORTB,PB2
Wait200:
    ldi  r18, 3
    ldi  r19, 19
    L3:
    dec  r19
    brne L3
    dec  r18
    brne L3
sbi PORTB,PB2
Wait300:
    ldi  r18, 4
    ldi  r19, 29
    L4:
    dec  r19
    brne L4
    dec  r18
    brne L4
'<latch>'
'Bx = 0
  End Sub
'**********************************подпрограмма отправки в НС595*****************************'

Cls1:
Restore Data_cls                                            'point to stored data
For I1 = 1 To 2                                             'for number of data items
Read B1
Call Preout_cmd(b1)
RCALL Waitms2
Next I1
Return

Init:
Restore Data_init                                           'point to stored data
For I1 = 1 To 10                                            'for number of data items
Read B1
Call Preout_cmd(b1)
RCALL Waitms2
Next I1
Return




Waitms2:
    ldi  r18, 21
    ldi  r19, 199
   L5:
    dec  r19
    brne L5
    dec  r18
    brne L5
ret


Data_init:
Data 24 , 24 , 24 , 8 , 8 , 2 , 0 , 30 , 0 , 4

Data_cls:
Data 0 , 16

Отредактировано NewUserBascom (2019-01-08 19:11:20)

0

28

есть еще прогресс, теперь код весит 1032)))) что весьма радует

код

$map
$regfile = "m328pdef.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 48
$framesize = 16
$baud = 9600

Dim I As Byte
Dim I1 As Byte
Dim B1 As Byte
Dim A As Byte
Dim Lcd_string As String * 16
Dim Character(17) As Byte At Lcd_string Overlay

Dim Bx As Byte
Dim A1 As Byte , Strlen As Byte
Dim Hb As Byte , Lb As Byte , Cx As Byte
''Declare Sub Send(byval Bx As Byte)
Declare Sub Text(byval Lcdstring As String)

Config Portb.2 = Output
Set Alias Portb.2
Waitms 200

Gosub Init
Gosub Cls1

Do
'Print "_x3=" ; Character(a1)
'text("#AbC:1234567890*")
End
Loop

Sub Text(byval Lcdstring As String)

   Strlen = Len(lcdstring)
   Lcd_string = Lcdstring

   For A1 = 1 To Strlen
      Cx = Character(a1)
      Gosub Convert
   Next
End Sub



Convert:
Hb.1 = Cx.7
Hb.2 = Cx.6
Hb.3 = Cx.5
Hb.4 = Cx.4
Gosub Preout_txt_h
Lb.1 = Cx.3
Lb.2 = Cx.2
Lb.3 = Cx.1
Lb.4 = Cx.0
Gosub Preout_txt_l
Return

Preout_txt_h:
Bx = 96 : Gosub Send
Bx = Hb + 96 : Gosub Send
Bx = Hb + 64 : Gosub Send
Return

Preout_txt_l:
Bx = 96 : Gosub Send
Bx = Lb + 96 : Gosub Send
Bx = Lb + 64 : Gosub Send
Return

Preout_cmd:
Bx = 32 : Gosub Send
Bx = B1 + 32 : Gosub Send
Bx = B1 : Gosub Send
Return

'**********************************подпрограмма отправки в НС595*****************************'
'Sub Send(byval Bx As Byte)

Send:

For I = 0 To 7
A = Bx.i
Esli0:
   lds R16 , {A}
   cpi R16 , 0
   BREQ send0
   rjmp Esli1:
   Send0:
    cbi PORTB,PB2
    ldi  r18, 40
    L1:
    dec  r18
    brne L1
    sbi PORTB,PB2
    ldi  r18, 93
    L2:
    Dec R18
    brne L2
    nop
Esli1:
   lds R16 , {A}
   cpi R16 , 1
   BREQ send1
   rjmp Выход
   Send1:
  cbi PORTB,PB2
  sbi PORTB,PB2
  lpm
  lpm
  rjmp Выход:
Выход:
Next I

'<latch>'
cbi PORTB,PB2
Wait200:
    ldi  r18, 3
    ldi  r19, 19
    L3:
    dec  r19
    brne L3
    dec  r18
    brne L3
sbi PORTB,PB2
Wait300:
    ldi  r18, 4
    ldi  r19, 29
    L4:
    dec  r19
    brne L4
    dec  r18
    brne L4
'<latch>'
  'End Sub
  Return
'**********************************подпрограмма отправки в НС595*****************************'

Cls1:
Restore Data_cls                                            'point to stored data
For I1 = 1 To 2                                             'for number of data items
Read B1
Gosub Preout_cmd
RCALL Waitms2
Next I1
Return

Init:
Restore Data_init                                           'point to stored data
For I1 = 1 To 10                                            'for number of data items
Read B1
Gosub Preout_cmd
RCALL Waitms2
Next I1
Return

Waitms2:
    ldi  r18, 21
    ldi  r19, 199
   L5:
    dec  r19
    brne L5
    dec  r18
    brne L5
ret

Data_init:
Data 24 , 24 , 24 , 8 , 8 , 2 , 0 , 30 , 0 , 4

Data_cls:
Data 0 , 16

0

29

NewUserBascom написал(а):

еще бы -800байт и норм. чтоб в тини13 можно было залить и еще что нибудь осталось для основной программы.

Для чего все это? Зачем пытаться сжать программу по максимуму тратя на это время, когда есть МК с объемом памяти больше 1 КБ?

0

30

Пётр написал(а):

Для чего все это? Зачем пытаться сжать программу по максимуму тратя на это время, когда есть МК с объемом памяти больше 1 КБ?

пока учусь, спортивный интерес, к тому же стараюсь больше оптимизировать, чем сжимать. Вот только Mega1284 стоит всего 3$, а tiny85 стоит 1,5$, mega8 и 328 тоже 1,5$... 

Вы все же ГУРУ этого форума, может что подскажете? :cool:

Отредактировано NewUserBascom (2019-01-08 23:06:16)

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Shift1 system for 1-wire shift registers