Форум РадиоКот https://radiokot.ru/forum/ |
|
Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только.. https://radiokot.ru/forum/viewtopic.php?f=62&t=59015 |
Страница 1 из 50 |
Автор: | alyarma [ Вт ноя 15, 2011 21:12:29 ] |
Заголовок сообщения: | Задачка по мк51 |
разработать программу, формирующую в регистре DPTR дополнительный код числа минус 5000 (двухбайтовый формат); Сделал во такую программку: MOV DPH,#10H ; MOV DPL,#00H ; MOV A,#ECH ;первый байт кода в аккумуляторе MOVX @DPTR,A ;первый байт кода в памяти программы MOV A,#78H ;второй байт кода в аккумуляторе MOVX @DPTR,A ;второй байт кода в памяти INC DPTR ;наращивание указателя памяти END Компилятор ругается вот так: 1 ;начало программы 2 0000 758310 MOV DPH,#10H ; 3 0003 758200 MOV DPL,#00H ; Error in 4: Undefined label: ECH MOV A,#ECH ;первый байт кода в аккумуляторе ^ 4 0006 7400 MOV A,#ECH ;первый байт кода в аккумуляторе 5 0008 F0 MOVX @DPTR,A ;первый байт кода в памяти программы 6 0009 7478 MOV A,#78H ;второй байт кода в аккумуляторе 7 000B A3 INC DPTR ;наращивание указателя памяти 8 000C F0 MOVX @DPTR,A ;второй байт кода в памяти 9 000D END Errors: 1 ####### Bytes: 13 # iz2 # CRC: EFC8 ####### Подскажите возможные ошибки или предложите свою прогу.Заранее спасибо. |
Автор: | pyzhman [ Вт ноя 15, 2011 21:17:44 ] |
Заголовок сообщения: | Re: Задачка по мк51 |
Щас придет МитяРа и разрулит. Терпение. |
Автор: | ChipKiller [ Вт ноя 15, 2011 23:29:07 ] |
Заголовок сообщения: | Re: Задачка по мк51 |
alyarma писал(а): Подскажите возможные ошибки Код: MOV A,#ECH ;первый байт кода в аккумуляторе Компилятор «законно» ругается, т.к. шестнадцатеричные числа не могут начинаться с буквы - правильно может быть так ( ….в зависимости от компилятора) #0ECH, #0xEC, #$ECalyarma писал(а): ....предложите свою прогу. ..т.е. сделать все за Вас ?
|
Автор: | eufs [ Ср ноя 16, 2011 03:42:30 ] | ||
Заголовок сообщения: | Re: Задачка по мк51 | ||
Дополнительный код -5000 дес = 0хEC78 Если задание поместить этот код в dptr, то тогда mov dph,#ech mov dpl,#78h и все. Если у вас задание разместить этот код в памяти по адресу 0х1000 используя dptr , то тогда вы не сильно ошиблись: mov dph,#10h mov dpl,#00h mov a,#ech movx @dptr,a inc dptr mov a,#78h movx @dptr,a inc dptr (если надо) Для компилятора пишите текст программы только маленькими буквами. Прилагаю архив, там программатор для АТ89с1051(2051,4051) схема+программа на паскале +описание , схема+прошивка+описание часов на АТ89С2051 и проект на асме вместе с компилятором для мк51(и не только). Посмотрите. Есть бета версия прошивки для этой конструкции часов (кое-что переписано и исправлено, добавлены мелодии) - это если понадобится кому-то, выложу
|
Автор: | alyarma [ Ср ноя 16, 2011 05:51:03 ] |
Заголовок сообщения: | Re: Задачка по мк51 |
Проблема с ECH устранена,действительно нужно было написать 0ECH. Прога компилируется,но сам ассемблер теперь ругается вот так: На строчке - MOVX @DPTR,A Ошибка: Trap:Undefined address:X=1000H Листинг проги: mov dph,#10h mov dpl,#00h mov a,#0ech movx @dptr,a inc dptr mov a,#78h movx @dptr,a end |
Автор: | МитяРа [ Ср ноя 16, 2011 08:56:38 ] |
Заголовок сообщения: | Re: Задачка по мк51 |
Мяу всем.. Странно, у мя не ругается: Код: 1 $NOMOD 2 $NOLIST 174 $LIST 175 $TITLE(Encoder_mini) 176 $PAGEWIDTH(132) 177 $NOPAGING 178 ;---------- 179 ; Начало программы. 180 ;---------- 0000 181 org 0h 182 ; 0000 758310 183 mov dph,#10h 0003 758200 184 mov dpl,#00h 0006 74EC 185 mov a,#0ECh 0008 F0 186 movx @dptr,a 0009 A3 187 inc dptr 000A 7478 188 mov a,#78h 000C F0 189 movx @dptr,a 190 ; 191 end VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND Может у тя ассемблек "кривой" или хочет что-бы перед программой ему что-то определили, адреса или прочее.. Попробуй написать в начале директиву ORG, как у мя написано.. Пользуюсь Металинк-асмом.. P.S. pyzh_man, благодарю за протекцию.. |
Автор: | alyarma [ Ср ноя 16, 2011 09:04:01 ] |
Заголовок сообщения: | Re: Задачка по мк51 |
МитяРа писал(а): Мяу всем.. Странно, у мя не ругается: Код: 1 $NOMOD 2 $NOLIST 174 $LIST 175 $TITLE(Encoder_mini) 176 $PAGEWIDTH(132) 177 $NOPAGING 178 ;---------- 179 ; Начало программы. 180 ;---------- 0000 181 org 0h 182 ; 0000 758310 183 mov dph,#10h 0003 758200 184 mov dpl,#00h 0006 74EC 185 mov a,#0ECh 0008 F0 186 movx @dptr,a 0009 A3 187 inc dptr 000A 7478 188 mov a,#78h 000C F0 189 movx @dptr,a 190 ; 191 end VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND Может у тя ассемблек "кривой" или хочет что-бы перед программой ему что-то определили, адреса или прочее.. Попробуй написать в начале директиву ORG, как у мя написано.. Пользуюсь Металинк-асмом.. P.S. pyzh_man, благодарю за протекцию.. Поставил,без изменений. Компиляция и у меня проходит без ошибок.Ругается именно ассемблер,когда пытаешься запустить прогу. |
Автор: | МитяРа [ Ср ноя 16, 2011 09:43:43 ] |
Заголовок сообщения: | Re: Задачка по мк51 |
alyarma писал(а): Компиляция и у меня проходит без ошибок.Ругается именно ассемблер,когда пытаешься запустить прогу. Давай в начале с терминологией разберёмся..Компилятор и есть ассемблер.. Запустить программу ты можешь в симуляторе или в отладчике.. После компиляции программы в машинный код ты что запускаешь? P.S. не цитируй предыдущий пост если сразу за ним отвечаешь, или цитируй только часть, на которую отвечаешь.. |
Автор: | BOB51 [ Ср ноя 16, 2011 10:34:05 ] |
Заголовок сообщения: | Re: Задачка по мк51 |
скорее всего латиница-кирилица где-то прермешались "Error in 4: Undefined label: ECH MOV A,#ECH ;первый байт кода в аккумуляторе" в данном случае #ech воспиринято как имя метки (сгенерирован по ошибке почему-то код 7400), при том, что в других случаях компилятор отработал верно (MOV A,#78H = 7478) перепиши внимательно заново текст исходника брр... оффтоп... пользуйтесь компиляторами с хорошо изученными иописаниями... |
Автор: | IM1 [ Ср ноя 16, 2011 11:58:34 ] |
Заголовок сообщения: | Re: Задачка по мк51 |
Что-то мне подсказывает, что у топик-стартера задача заключается не в подсчете на калькуляторе дополнительного кода числа 5000 и отправке его (зачем?) в ячейку внешней памяти по адресу 1000h. А именно в том, чтобы вычислить программно этот код и поместить в dptr: alyarma писал(а): разработать программу, формирующую в регистре DPTR дополнительный код числа минус 5000 (двухбайтовый формат); Это может выглядеть так, вариант:Код: org 0 Проверено в Keil µVision4:jmp start start: mov dptr, #5000 ; помещаем 5000 в dptr временно mov a, dpl ; мл. байт числа в аккумулятор cpl a ; инвертируем акк. mov dpl, a ; отправляем обратно mov a, dph ; ст. байт числа в аккумулятор cpl a ; инвертируем акк. mov dph, a ; отправляем обратно inc dptr ; добавляем 1 ; все, у нас в dptr дополнительный код числа 5000, что и означает -5000 или 0ec78h end Код: Build target 'Target 1'
linking... Program Size: data=8.0 xdata=0 code=16 "irr1" - 0 Error(s), 0 Warning(s). |
Автор: | IM1 [ Пн ноя 21, 2011 10:54:14 ] |
Заголовок сообщения: | Re: Задачка по мк51 |
alyarma писал(а): разработать программу, формирующую в регистре DPTR дополнительный код числа минус 5000 (двухбайтовый формат); Осмелюсь поинтересоваться, а что у Вас с программой? Столько народу советы давали, получилось запустить (сдать)?
|
Автор: | alyarma [ Чт ноя 24, 2011 13:38:44 ] |
Заголовок сообщения: | Задачка по мк51.Требуется помощ магистров! |
Задача:Карта опроса 16 датчиков (массив однобайтовых чисел без знака) записана в ОЗУ МП серии МК51 начиная с ячейки 20H. Начиная с ячейки 30Н сформировать копию массива, изменив порядок следования чисел на обратный, а минимальное значение вывести на светодиоды порта вывода Р1. Первая часть задачки реализована, а вот вторая (выделенная большим шрифтом) что-то не получается. Подскажите в чём проблема.Заранее спасибо. Код: ORG 0 MOV R0,#2FH MOV R1,#30H MOV R3,#10H MOV P1,#0FFH M1: MOV A,@R0 MOV @R1,A DEC R0 INC R1 DJNZ R3,M1 M2: MOV R3,#10H MOV A,P1 SUBB A,@R0 JC M3 M3: MOV P1,A INC R0 DJNZ R3,M2 END Скриншот ошибки. Вложение:
|
Автор: | МитяРа [ Чт ноя 24, 2011 14:03:16 ] |
Заголовок сообщения: | Re: Задачка по мк51.Требуется помощ магистров! |
Очень смущает вот эти строчки: Код: JC M3
M3: MOV P1,A |
Автор: | Engineer_Keen [ Чт ноя 24, 2011 14:05:12 ] |
Заголовок сообщения: | Re: Задачка по мк51.Требуется помощ магистров! |
Во-первых: второй цикл сделан не правильно - R3 забыли уменьшать, и метка M2 должна быть на следующей строке после присвоения R3 количества проходов. Во-вторых МитяРа написал. PS: И лучше не хранить информацию в P1, а использовать регистр, и в конце программы вывести его значение в порт. |
Автор: | МитяРа [ Чт ноя 24, 2011 14:13:18 ] |
Заголовок сообщения: | Re: Задачка по мк51.Требуется помощ магистров! |
Engineer_Keen писал(а): информацию в P1, а использовать регистр, Например B..P.S. alyarma, а чё, с виндовыми симуляторами напряг? |
Автор: | МитяРа [ Чт ноя 24, 2011 14:14:56 ] |
Заголовок сообщения: | Re: Задачка по мк51.Требуется помощ магистров! |
P.P.S. Только щас вспомнил, alyarma, ты зачем ещё одну тему создал? У тя-же уже есть одна: viewtopic.php?t=58472 |
Автор: | alyarma [ Чт ноя 24, 2011 14:20:34 ] | ||
Заголовок сообщения: | Re: Задачка по мк51.Требуется помощ магистров! | ||
МитяРа писал(а): P.P.S. Только щас вспомнил, alyarma, ты зачем ещё одну тему создал? У тя-же уже есть одна: viewtopic.php?t=58472 Ту тему забыл закрыть,сейчас закрою. Просто эта тема про мк51)Вот и создал новую) Поправил,теперь код выглядит вот так,но всё равно не записывает минимальное значение в порт P1: Код: ORG 0
MOV R0,#2FH MOV R1,#30H MOV R3,#10H MOV B,#0FFH M1: MOV A,@R0 MOV @R1,A DEC R0 INC R1 DJNZ R3,M1 MOV R3,#10H M2: MOV A,B SUBB A,@R0 JC M3 M3: INC R0 DJNZ R3,M2 MOV P1,B END
|
Автор: | МитяРа [ Чт ноя 24, 2011 14:24:37 ] |
Заголовок сообщения: | Re: Задачка по мк51.Требуется помощ магистров! |
alyarma писал(а): Просто эта тема про мк51 А там про што была? Про мк52 что-ли?
|
Автор: | alyarma [ Чт ноя 24, 2011 14:26:11 ] |
Заголовок сообщения: | Re: Задачка по мк51.Требуется помощ магистров! |
МитяРа писал(а): alyarma писал(а): Просто эта тема про мк51 А там про што была? Про мк52 что-ли? мк48:) И R3 я не забыл уменьшать.Оно уменьшается в метке M3,где происходит зацикливание. |
Автор: | МитяРа [ Чт ноя 24, 2011 14:33:26 ] |
Заголовок сообщения: | Re: Задачка по мк51.Требуется помощ магистров! |
alyarma писал(а): Поправил,теперь код выглядит вот так Повторю: поясни назначение вот этих двух строчек: Код: JC M3 M3: INC R0 alyarma писал(а): мк48:) Мя понимаю, что у них мнемоника команд практически одинакова, но название темы-то было про МК51..
|
Страница 1 из 50 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |