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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Световые эффекты » На перевес ардуинщикам предлагаю написать моргалку как можно короче


На перевес ардуинщикам предлагаю написать моргалку как можно короче

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

1

Взято из видео какого-то недопрограммиста...
httpТыц://www.youtube.com/watch?v=38HLruh4SK8

Ну чО, попробуем написать свою моргалку?

0

2

Ну его нафиг. Руки тоже синими станут.

0

3

https://habr.com/post/151544/
https://habr.com/post/151544/#comment_17497283

Отредактировано Пётр (2018-07-17 19:16:38)

0

4

553 байта в баскоме....  кто меньше?

0

5

-NMi- написал(а):

553 байта в баскоме....  кто меньше?


Чисто спортивный интерес:
f МК = 20 Мгц
f выхода = f МК / 2 = 10 МГц

Bascom 2.0.7.1, размер исходника 108 byte

Симуляция   -  скачать

http://sg.uploads.ru/t/oFWNC.jpghttp://s3.uploads.ru/t/bMnI1.jpg

Отредактировано sasha_1973 (2018-07-18 03:57:35)

0

6

'компактное моргало )))
$map
$regfile = "attiny85.dat"
$crystal = 8000000
$hwstack = 64
$swstack = 64
$framesize = 64
$noramclear
$noinit

Ddrb = &B_0000_1111

0000:

$asm
    sbi portb,0
    rcall pause

    cbi portb,0
    rcall pause
    rjmp 0000

Pause:
    clr r0
Pause_10:
    dec r0
    brne pause_10
    ret

$end Asm
'компактное моргало )))
$map
$regfile = "attiny85.dat"
$crystal = 8000000
$hwstack = 64
$swstack = 64
$framesize = 64
$noramclear
$noinit

Ddrb = &B_0000_1111

0000:

$asm
    sbi portb,0
    rcall pause

    cbi portb,0
    rcall pause
    rjmp 0000

Pause:
    clr r0
Pause_10:
    dec r0
    brne pause_10
    ret

$end Asm

80 байт. Кто меньше?

0

7

асм... не спортивно...  :disappointed:

0

8

А существует ли где-нибудь информация, сколько занимает в памяти та или иная команда (оператор) Bascom и за сколько тактов она выполняется ?
Если не прибегать к листанию report'ов и сторонним замерам ?

0

9

Только дизассемблером узнаешь.

0

10

-NMi- написал(а):

80 байт. Кто меньше?


Код:
$regfile = "attiny84.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 0
$framesize = 24
$noramclear
$noinit

Ddrb = &B_0000_0001                                         ' 1 - pin out (PB0)

' R0 - mask
' R1 - out data
' R2 - var wait

$asm
   clr r0                                                   ' 1 такт
   dec r0                                                   ' 1 такт
   clr r2                                                   ' 1 такт
Start:
   Out Portb , R1                                           ' 1 такт
   eor r1, r0                                               ' 1 такт
L00:
   dec r2                                                   ' 1 такт
   brne L00                                                 ' 1/2 такт(а)
   rjmp Start                                               ' 2 такт
$end Asm

' общее число тактов (с инициализацией) на разовый проход: 9 тактов
' циклов до ногодрыга, минимально: 6 тактов

Это 78 байт.

http://sh.uploads.ru/UiI5s.gif

Что-то ещё доп компилятор генерит, если взять для МК без ОЗУ, то ещё меньше:

Код:
$regfile = "ATtiny15.DAT"
$crystal = 1000000
$tiny
$noinit
$noramclear
$hwstack = 6
$swstack = 0
$framesize = 0

Ddrb = &B_0000_0001                                         ' 1 - pin out (PB0)

' R0 - mask
' R1 - out data
' R2 - var wait

$asm
   clr r0                                                   ' 1 такт
   dec r0                                                   ' 1 такт
   clr r2                                                   ' 1 такт
Start:
   Out Portb , R1                                           ' 1 такт
   eor r1, r0                                               ' 1 такт
L00:
   dec r2                                                   ' 1 такт
   brne L00                                                 ' 1/2 такт(а)
   rjmp Start                                               ' 2 такт
$end Asm

40 байт.

BIN-ы под МК.

0

11

clr r0
dec r0
равно ser r0  --- Экономия одного байта  :D

0

12

-NMi- написал(а):

равно ser r0  --- Экономия одного байта

ser адресация только с R16-R31
я бы иначе так не извращался, сэкономить не получится  :D

0

13

Мучил вопрос, насколько Баском больше код генерит, попробовал в АВР Студии тот же код сделать, чисто на ассемблере:

Код:
;
; PinG.asm
;
; Created: 21.07.2018 13:10:25
; Author : RDW
;


          ldi r16, 0b00000001 ; настраиваем на выход всего лишь ножку PA0
          out ddra, r16

          clr r0
          dec r0
          clr r2
Start:
          out Porta , r1
          eor r1, r0
L00:
          dec r2
          brne L00
          rjmp Start


В общем получил 20 байт!  :rofl:
Работает.

зы: для attiny84а

0

14

С какой частотой мигает?

Отредактировано Пётр (2018-07-21 15:56:17)

0

15

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

С какой частотой мигает?


С такой же как на Баскоме (выше):

http://sh.uploads.ru/UiI5s.gif

0


Вы здесь » Программирование ATMEL в BASCOM. » Световые эффекты » На перевес ардуинщикам предлагаю написать моргалку как можно короче