pavel1979 писал(а):СПЕЦИАЛЬНО ДЛЯ WiseLord КОТОРЫЙ НИХРЕНА НЕ ПОНЯЛ ИСХОДНИК
Лично я Ваш код прекрасно понял, хотя никогда на бейсике под AVR не писал. Имхо, это не тот язык, на котором для микроконтроллеров пишут. Я лишь указал на то, что в Вашем коде (хотя изначально речь шла не о нём, а о коде eduardo) используются "магические числа", которые отсылаются по шине, и для того, чтобы понять, что они значат, нужно лезть в даташит.
RDA5807 я знаю практически "от и до" и знаю, какой регистр за что отвечает, поэтому проблем с пониманием даже такого кода лично у меня нет. Но у других вполне могут возникнуть. У меня в
проекте она используется лишь как маленькая незначительная часть
всего кода. И если бы я этот проект писал в
таком же стиле, он бы не стал тем, чем стал, затормозившись на полпути из-за запутанности кода.
pavel1979 писал(а):я у вас вообще не понимаю-какието define,include
Это директивы препроцессора C.
#include - не что иное как включение другого файла в исходник. #define - дать удобное имя константе (на самом деле, возможности #define выше, но пока и такое объяснение сойдёт).
Попытаюсь привести аналог на том языке, что у Вас (бейсик, как я понимаю).
pavel1979 писал(а):Код: Выделить всё
I2cwbyte &B00100000 'ЗАПИСЬ В РДА-адрес RDA5807,читай даташит
I2cwbyte &B11010010 '02H байт-читай даташит
I2cwbyte &B00000101 '02L байт-читай даташит,его же не просто так писали
В этом-то и проблема, что код заставляет лезть в даташит, чтобы понять эти магические числа с потолка.
Почему бы не сделать как-то так (я бейсиков не умею, так что попытаюсь пояснить принцип, синтаксически могут быть ошибки):
Код: Выделить всё
Config RDA5807_I2C_ADDR = &B00100000
'02H
Config RDA5807_DHIZ = &B10000000 'В языке C это было бы 0b10000000, или, лучше, (1<<7) - единица, сдвинутая на 7
Config RDA5807_DMUTE = &B01000000 ' Аналогично - (1<<6) - шестой бит 02H
Config RDA5807_BASS = &B00010000' Аналогично - (1<<4)
Config RDA5807_SEEKUP = &B00000010
'02L
Config RDA5807_NEW_METHOD = &B00000100
Config RDA5807_ENABLE = &B00000001
'Аналогично описать и другие регистры, а потом...
I2cwbyte RDA5807_I2C_ADDR 'ЗАПИСЬ В РДА-адрес RDA5807, даташит читать не нужно - и так всё понятно
I2cwbyte (RDA5807_DHIZ And RDA5807_DMUTE And RDA5807_BASS And RDA5807_SEEKUP) '02H байт - и без даташита понятно
I2cwbyte (RDA5807_NEW_METHOD And RDA5807_ENABLE) '02L - и тут, как ни странно, всё понятно. И без даташита
Естественно, всю эту конфигурацию в начале естественным будет хранить в отдельном файле, не загромождая исходник. Для этого в C есть #include, в бейсике что-то подобное должно быть то же. Потому что хороший читабельный код не пишется в одном файле, а разбивается на удобные блоки, которые включаются в нужном месте.