Страница 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
:dont_know:
дайте глянуть оба хекса

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Кб. Эхх... а дальше :dont_know: .
Скажите, в HD44780 встроен знагокенератор или его загружать надо, а то я читал даташит на него а он на англицком :))

Re: AT89C4051 -> 2051. Помогите уменьшить программу

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

Re: AT89C4051 -> 2051. Помогите уменьшить программу

Добавлено: Пн фев 21, 2011 15:58:41
Alexey_N
Спасибо. Будем идти в этом направлении :))