Взято из видео какого-то недопрограммиста...
httpТыц://www.youtube.com/watch?v=38HLruh4SK8
Ну чО, попробуем написать свою моргалку?
Программирование ATMEL в BASCOM. |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » Программирование ATMEL в BASCOM. » Световые эффекты » На перевес ардуинщикам предлагаю написать моргалку как можно короче
Взято из видео какого-то недопрограммиста...
httpТыц://www.youtube.com/watch?v=38HLruh4SK8
Ну чО, попробуем написать свою моргалку?
Ну его нафиг. Руки тоже синими станут.
https://habr.com/post/151544/
https://habr.com/post/151544/#comment_17497283
Отредактировано Пётр (2018-07-17 19:16:38)
553 байта в баскоме.... кто меньше?
553 байта в баскоме.... кто меньше?
Чисто спортивный интерес:
f МК = 20 Мгц
f выхода = f МК / 2 = 10 МГц
Bascom 2.0.7.1, размер исходника 108 byte
Симуляция - скачать
Отредактировано sasha_1973 (2018-07-18 03:57:35)
'компактное моргало )))
$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 байт. Кто меньше?
асм... не спортивно... 
А существует ли где-нибудь информация, сколько занимает в памяти та или иная команда (оператор) Bascom и за сколько тактов она выполняется ?
Если не прибегать к листанию report'ов и сторонним замерам ?
Только дизассемблером узнаешь.
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 байт.

Что-то ещё доп компилятор генерит, если взять для МК без ОЗУ, то ещё меньше:
$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-ы под МК.
Отредактировано RDW (2022-02-23 10:55:50)
clr r0
dec r0
равно ser r0 --- Экономия одного байта 
равно ser r0 --- Экономия одного байта
ser адресация только с R16-R31
я бы иначе так не извращался, сэкономить не получится 
Мучил вопрос, насколько Баском больше код генерит, попробовал в АВР Студии тот же код сделать, чисто на ассемблере:
;
; 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 байт! 
Работает.
зы: для attiny84а
Отредактировано RDW (2022-02-23 10:55:22)
С какой частотой мигает?
Отредактировано Пётр (2018-07-21 15:56:17)
С какой частотой мигает?
С такой же как на Баскоме (выше):

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