Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Задачка по мк51

Вт ноя 15, 2011 21:12:29

разработать программу, формирующую в регистре 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 #######

Подскажите возможные ошибки или предложите свою прогу.Заранее спасибо.

Re: Задачка по мк51

Вт ноя 15, 2011 21:17:44

Щас придет МитяРа и разрулит. Терпение. :)

Re: Задачка по мк51

Вт ноя 15, 2011 23:29:07

alyarma писал(а):Подскажите возможные ошибки
Код:
MOV A,#ECH ;первый байт кода в аккумуляторе
Компилятор «законно» ругается, т.к. шестнадцатеричные числа не могут начинаться с буквы - правильно может быть так ( ….в зависимости от компилятора) #0ECH, #0xEC, #$EC
alyarma писал(а):....предложите свою прогу.
..т.е. сделать все за Вас ? :))

Re: Задачка по мк51

Ср ноя 16, 2011 03:42:30

Дополнительный код -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(и не только). Посмотрите. Есть бета версия прошивки для этой конструкции часов (кое-что переписано и исправлено, добавлены мелодии) - это если понадобится кому-то, выложу
Вложения
progx051.rar
(408.08 KiB) Скачиваний: 1206

Re: Задачка по мк51

Ср ноя 16, 2011 05:51:03

Проблема с 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

Re: Задачка по мк51

Ср ноя 16, 2011 08:56:38

Мяу всем..

Странно, у мя не ругается:
Код:
                       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, благодарю за протекцию.. :))

Re: Задачка по мк51

Ср ноя 16, 2011 09:04:01

МитяРа писал(а):Мяу всем..

Странно, у мя не ругается:
Код:
                       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, благодарю за протекцию.. :))

Поставил,без изменений.
Компиляция и у меня проходит без ошибок.Ругается именно ассемблер,когда пытаешься запустить прогу.

Re: Задачка по мк51

Ср ноя 16, 2011 09:43:43

alyarma писал(а):Компиляция и у меня проходит без ошибок.Ругается именно ассемблер,когда пытаешься запустить прогу.
Давай в начале с терминологией разберёмся..
Компилятор и есть ассемблер..
Запустить программу ты можешь в симуляторе или в отладчике..

После компиляции программы в машинный код ты что запускаешь?

P.S. не цитируй предыдущий пост если сразу за ним отвечаешь, или цитируй только часть, на которую отвечаешь..

Re: Задачка по мк51

Ср ноя 16, 2011 10:34:05

скорее всего латиница-кирилица где-то прермешались
"Error in 4: Undefined label: ECH
MOV A,#ECH ;первый байт кода в аккумуляторе"
в данном случае #ech воспиринято как имя метки (сгенерирован по ошибке почему-то код 7400), при том,
что в других случаях компилятор отработал верно (MOV A,#78H = 7478)
перепиши внимательно заново текст исходника :beer:
брр... оффтоп... :oops:
пользуйтесь компиляторами с хорошо изученными иописаниями...

Re: Задачка по мк51

Ср ноя 16, 2011 11:58:34

Что-то мне подсказывает, что у топик-стартера задача заключается не в подсчете на калькуляторе дополнительного кода числа 5000 и отправке его (зачем?) в ячейку внешней памяти по адресу 1000h. А именно в том, чтобы вычислить программно этот код и поместить в dptr:
alyarma писал(а):разработать программу, формирующую в регистре DPTR дополнительный код числа минус 5000 (двухбайтовый формат);
Это может выглядеть так, вариант:
Код:
org 0
   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
Проверено в Keil µVision4:
Код:
Build target 'Target 1'
linking...
Program Size: data=8.0 xdata=0 code=16
"irr1" - 0 Error(s), 0 Warning(s).

Re: Задачка по мк51

Пн ноя 21, 2011 10:54:14

alyarma писал(а):разработать программу, формирующую в регистре DPTR дополнительный код числа минус 5000 (двухбайтовый формат);
Осмелюсь поинтересоваться, а что у Вас с программой? Столько народу советы давали, получилось запустить (сдать)?

Задачка по мк51.Требуется помощ магистров!

Чт ноя 24, 2011 13:38:44

Задача:Карта опроса 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   

Скриншот ошибки.
111.JPG
(94.74 KiB) Скачиваний: 1606

Re: Задачка по мк51.Требуется помощ магистров!

Чт ноя 24, 2011 14:03:16

Очень смущает вот эти строчки:
Код:
   JC M3
M3:   MOV P1,A

Re: Задачка по мк51.Требуется помощ магистров!

Чт ноя 24, 2011 14:05:12

Во-первых: второй цикл сделан не правильно - R3 забыли уменьшать, и метка M2 должна быть на следующей строке после присвоения R3 количества проходов.
Во-вторых МитяРа написал.

PS: И лучше не хранить информацию в P1, а использовать регистр, и в конце программы вывести его значение в порт.

Re: Задачка по мк51.Требуется помощ магистров!

Чт ноя 24, 2011 14:13:18

Engineer_Keen писал(а):информацию в P1, а использовать регистр,
Например B..

P.S. alyarma, а чё, с виндовыми симуляторами напряг?

Re: Задачка по мк51.Требуется помощ магистров!

Чт ноя 24, 2011 14:14:56

P.P.S. Только щас вспомнил, alyarma, ты зачем ещё одну тему создал? У тя-же уже есть одна: viewtopic.php?t=58472

Re: Задачка по мк51.Требуется помощ магистров!

Чт ноя 24, 2011 14:20:34

МитяРа писал(а):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   
Вложения
222.JPG
(94.66 KiB) Скачиваний: 1296
Последний раз редактировалось alyarma Чт ноя 24, 2011 14:25:39, всего редактировалось 1 раз.

Re: Задачка по мк51.Требуется помощ магистров!

Чт ноя 24, 2011 14:24:37

alyarma писал(а):Просто эта тема про мк51
А там про што была? Про мк52 что-ли? :)))

Re: Задачка по мк51.Требуется помощ магистров!

Чт ноя 24, 2011 14:26:11

МитяРа писал(а):
alyarma писал(а):Просто эта тема про мк51
А там про што была? Про мк52 что-ли? :)))

мк48:)
И R3 я не забыл уменьшать.Оно уменьшается в метке M3,где происходит зацикливание.

Re: Задачка по мк51.Требуется помощ магистров!

Чт ноя 24, 2011 14:33:26

alyarma писал(а):Поправил,теперь код выглядит вот так
:cry:
Повторю: поясни назначение вот этих двух строчек:
Код:
   JC M3
M3:   INC R0


alyarma писал(а):мк48:)
Мя понимаю, что у них мнемоника команд практически одинакова, но название темы-то было про МК51.. :))
Ответить