Страница 1 из 1
AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Вс фев 20, 2011 22:30:43
Alexey_N
Всем доброго вечера. Понадобился мне генератор с DDS

. Там стоит по схеме AT89C4051. Но у меня есть C2051. И вот я подумал что можно и его применить , тем более что они отличаются только объемом памяти 4k-2k. В прилагаемой программе весом примерно 3.6к надо убрать лишнее (например там килобайт занимают логотипы, которые выводяться на экран от нокии 3310). Подскажите как и что удалить чтобы программа осталась рабочей. Думаю надо удалить логотипы и вывод на экран лишней информации.
Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 03:23:40
ibiza11
логотипы занимают всего 536 байт. остальные функции так или иначе связаны с обращением к DDS генератору или LCD дисплею. имхо лучше не ипать себе (и другим!!!) мозг и купить нужную микросхему.
мне кажется, если переписать эту программу на LCD с контроллером HD44780, прога может занять значительно меньше 2КБ кода. ну если Вы не можете, в разделе "
Из лап в лапы" Вам помогут.
Лично я не знаю асм для х51 контроллеров, за сим откланиваюсь.
Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 09:50:11
Engineer_Keen
Логотипы занимают явно более 500 байт, так как там порядка 60-70 строк db, по 16 констант в каждой...
Все эти строки нужно закомментировать, а в подпрограмме LCD_Init закомментировать все после строчки setb dc и до mov dptr,#header. Тогда заставки уберутся.
Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 10:39:46
Alexey_N
ibiza11 писал(а):если переписать эту программу на LCD с контроллером HD44780, прога может занять значительно меньше 2КБ кода.
Спасибо

Наверное так и поступлю.
Еще вопросик

: при компиляции в asm51, компилятор выдает ошибку что нет файла mod4051. Подскажите где его можно найти или как его написать.
Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 10:56:24
Engineer_Keen
Alexey_N писал(а):Еще вопросик

: при компиляции в asm51, компилятор выдает ошибку что нет файла mod4051. Подскажите где его можно найти или как его написать.
Наверняка где-нибудь в интернете валяется...
Если самому, то нужно взять даташит на контроллер и из него выписать все SFR-ы вот в таком виде:
Код: Выделить всё
;MOD4051
P0 DATA 080H ;PORT 0
SP DATA 081H ;STACK POINTER
DPL DATA 082H ;DATA POINTER - LOW BYTE
DPH DATA 083H ;DATA POINTER - HIGH BYTE
...
...
...
IT0 BIT 088H ;TCON.0 - EXT. INTERRUPT 0 TYPE
IE0 BIT 089H ;TCON.1 - EXT. INTERRUPT 0 EDGE FLAG
IT1 BIT 08AH ;TCON.2 - EXT. INTERRUPT 1 TYPE
IE1 BIT 08BH ;TCON.3 - EXT. INTERRUPT 1 EDGE FLAG
...
...
...
Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 11:19:28
Alexey_N
Engineer_Keen писал(а):P0 DATA 080H ;PORT 0
В даташите такого нету. Или это для примера?
И еще. Как отличить DATA от BIT ? В даташите просто таблица и непонятно что где

Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 11:52:33
Engineer_Keen
Это для примера, я просто взял строчки из MOD51.
Все что у вас в квадратиках, это байты, то есть DATA. А вот отдельные биты в них это BIT.
В принципе в MOD51 есть больше чем в mod4051, так как он общий для всех 51-х контроллеров. Можно даже 51 переименовать в 4051. В программе все равно не должны использоваться имена которых нет в 4051.
Попробуйте переименовать.
Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 12:03:16
ChipKiller
И еще. Как отличить DATA от BIT ? В даташите просто таблица и непонятно что где
... по приведенной таблице - диапазон
АСС 0E0h-0E7h. Значит обращение к ACC.2 - 0E0h+2=
0E2h
Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 12:08:53
Alexey_N
Спасибо. Переименовал - все скомпилировалось. Только почему-то hex файл получился больше чем исходный, хотя я удалил лого. Может какие ключи надо asm51?
Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 13:55:56
Engineer_Keen
дайте глянуть оба хекса
Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 14:28:52
Alexey_N
исходная версия
Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 14:29:49
Alexey_N
Измененная версия - убран логотип как писал Engineer_Keen
Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 14:47:48
Engineer_Keen
Вы сами видите что оба эти файла абсолютно идентичны? Вы точно тот исходник компилируете? Ошибок не было при компиляции?
А, пофиг, сам перекомпилировал, килобайт убрали, но все равно 2.6кБ, в 2051 не влезет...
Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 15:01:07
Alexey_N
Ха ... и у меня наконец правильно скомпилировался. Вместо ddsfinal_modified.asm почему-то компилировался ddsfinal.asm. Переименовал - все ок. Осталось избавиться от 0.6Кб
Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 15:07:55
Engineer_Keen
asm51 просто не понимает длинные имена файлов.
А вот еще уменьшить врядли... Можно убрать строчные символы и везде писать заглавные буквы, это еще -150 байт. И все, далее нужно досконально ковырять программу и разбираться как она работает. В этом случае проще написать новую с нуля, и вряд-ли кто-то этим займется...
Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 15:14:31
Alexey_N
Спасибо. А на сколько удасться уменьшить программу если применить индикатор на HD44780. В нем знакогенератор встроенный вроде?
Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 15:19:08
Engineer_Keen
В программе встроены 128 символов, каждый занимает 5 байт, следовательно весь шрифт - 640 байт.
Кстати, если поменять все переходы с LCALL и LJMP на ACALL и AJMP, можно освободить еще порядка 100 байт, так как LCALL и LJMP все равно нужны только если переходы делаются дальше чем на 2 килобайта.
О, мысль, R7 вроде нигде не используется, а вот MOV [место назначения] ,#00h много, можно еще сократить, если вместо константы 0 использовать R7...
Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 15:30:16
Alexey_N
Замена ljmp и lcall на ajmp и acall уменьшила программу до 2.5Кб. Эхх... а дальше

.
Скажите, в HD44780 встроен знагокенератор или его загружать надо, а то я читал даташит на него а он на англицком

Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 15:41:30
Engineer_Keen
Alexey_N писал(а):Скажите, в HD44780 встроен знагокенератор или его загружать надо, а то я читал даташит на него а он на англицком

Встроенный. А английский в нашем деле нужно знать...
Re: AT89C4051 -> 2051. Помогите уменьшить программу
Добавлено: Пн фев 21, 2011 15:58:41
Alexey_N
Спасибо. Будем идти в этом направлении
