Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: среда программирования Keil uVision 4
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
NightVamp
Здравствуйте! Пишу программу для мк АТ89С51RC в Keil uVision 4, впервые работаю в этой среде программирования, кроме того пишу программу полностью на ассемблере. Проблема в том, что не знаю с чего должна начинаться программа, с каких модулей и т.п. в это среде. Это раз. И ещё, при попытке компиляции возникает непонятная ошибка. Вот она:

Build target 'Target 1'
compiling main.c...
MAIN.C(3): error C129: missing ';' before 'EQU'
Target not created.

Дело не в переводе, никаких знаков препинания до EQU стоять не должно. Подскажите, как исправить ошибку и надо ли что-то написать в начале программы.
Палыч
Цитата(NightVamp @ Jan 8 2012, 14:55) *
compiling main.c...
MAIN.C(3): error C129: missing ';' before 'EQU'

Ваша программа находится в файле main.c ?
Расширение файла .с зарезервировано за файлами на языке Си. Keil пытается применить к Вашему файлу транслятор Си. Для ассемблера - расширение .а51
barabek
Цитата(NightVamp @ Jan 8 2012, 20:55) *
Здравствуйте! Пишу программу для мк АТ89С51RC в Keil uVision 4, впервые работаю в этой среде программирования, кроме того пишу программу полностью на ассемблере. Проблема в том, что не знаю с чего должна начинаться программа, с каких модулей и т.п. в это среде. Это раз. И ещё, при попытке компиляции возникает непонятная ошибка.

Во-первых, на асме коментарии не как на Си, а ";".

Во-вторых, возьмите любой пример из examples и на базе его стройте.


NightVamp
Цитата(Палыч @ Jan 8 2012, 19:11) *
Ваша программа находится в файле main.c ?
Расширение файла .с зарезервировано за файлами на языке Си. Keil пытается применить к Вашему файлу транслятор Си. Для ассемблера - расширение .а51


Я так и думала, что надо было сразу поменять расширение...Благодарю за помощь. Ещё один момент: не подскажете, как вставить в программу таблицу символов для клавиш клавиатуры и связать её с программой?
kovigor
Цитата(NightVamp @ Jan 8 2012, 14:22) *
Я так и думала, что надо было сразу поменять расширение...Благодарю за помощь. Ещё один момент: не подскажете, как вставить в программу таблицу символов для клавиш клавиатуры и связать её с программой?


Посмотрите в примерах, поставляемых с КЕЙЛом, как там объявляются массивы констант.

P.S. Вот только зачем это на АСМе писать ? Пишите на Си, если можно, сэкономите уйму времени и сил ...

P.P.S. А еще у КЕЙЛа help есть, там это расписано. К сожалению, КЕЙЛ у меня не установлен, помочь не могу. Да и не писал я ничего на асме для x51 в КЕЙЛе. Для 80x86 массивы байтовых констант объявляются посредством директивы "db" ...
Палыч
Цитата(NightVamp @ Jan 8 2012, 15:22) *
как вставить в программу таблицу символов для клавиш клавиатуры и связать её с программой?

Попробуйте перефразировать вопрос: внятно и понятно для других...
NightVamp
Цитата(barabek @ Jan 8 2012, 19:21) *
Во-первых, на асме коментарии не как на Си, а ";".

Во-вторых, возьмите любой пример из examples и на базе его стройте.


Насчёт комментариев, я знаю, что на асме комменты начинаются с ; Однако решила попробовать ставить //, удобнее мне так. Как оказалось, не суть важно. За знаком // и в асм воспринимаются как комментарии, и ещё вариант: /*...*/, это наксколько знаю для делфи, но здесь тоже годится.

Цитата(kovigor @ Jan 8 2012, 19:39) *
Посмотрите в примерах, поставляемых с КЕЙЛом, как там объявляются массивы констант.

P.S. Вот только зачем это на АСМе писать ? Пишите на Си, если можно, сэкономите уйму времени и сил ...

P.P.S. А еще у КЕЙЛа help есть, там это расписано. К сожалению, КЕЙЛ у меня не установлен, помочь не могу. Да и не писал я ничего на асме для x51 в КЕЙЛе. Для 80x86 массивы байтовых констант объявляются посредством директивы "db" ...


Так нелязя на Си, на асм надо именно! Это программа для курсового проекта, на Си никак не примут.
Вот-вот, у меня в прикреплённом файле, в программе эта db и используется для таблицы знакогенератора семисегментных индикаторов! Возможно ли эту директиву снова использовать, но уже для клавиатуры?
kovigor
Цитата(NightVamp @ Jan 8 2012, 15:40) *
Вот-вот, у меня в прикреплённом файле, в программе эта db и используется для таблицы знакогенератора семисегментных индикаторов! Возможно ли эту директиву снова использовать, но уже для клавиатуры?


Не можно, а нужно !

Эту директиву можно использовать хоть 1000 раз в одной и той же программе, всякий раз задавая байтовые константы. Можно задать как один байт, так и массив байтов. Кстати, для задания 16-разрядных слов используется "dw" ...

P.S. И вообще, зачем вам Кейл для АСМа ? Там с головой хватает компилятора командной строки:

http://www.atmel.com/dyn/products/tools_ca...ubfamily_id=770

просто для интереса открыл архив с компилятором для Windows. Внутри Help в виде PDFки, а в нем - описание db и еще много-много чего ...
Палыч
Цитата(kovigor @ Jan 8 2012, 15:39) *
...объявляются массивы констант.
У ТС в программе объявлен массив констант, вероятно, требуется что-то другое...
Почему-то, только некоторые вопрошающие формулируют "правильно" вопросы. Остальные надуются на телепатов... Или сами не понимают: что им нужно? Хорошо сформулированный вопрос - половина решения!
NightVamp
Цитата(Палыч @ Jan 8 2012, 19:45) *
Попробуйте перефразировать вопрос: внятно и понятно для других...


Перефразирую: В микроЭВМ есть клавиатура. На ней набираются некоторые значения, вообщем цифры. Для того, чтобы клавиша работала, "зажигалась", нужно присвоить ей свой код. Иначе говоря, эти коды клавиш или таблица символов нужны для взаимодействия с микроконтроллером. Так же как есть у меня в программе таблица символов для 7-сегментных индикаторов, должна быть похожая таблица и для клавиш. Я имела ввиду, как программно организовать включение клавиш, вот и всё.

Ну, если вам так не понятно, я не знаю как ещё описать такое вроде простое явление, как присутсвие клавиатуры в устройстве!

Создала всё как надо, и вылезла куча ошибок! Программа взята из книжки, в основном, так что код не может быть неправильный. Хотя, конечно, я кое-что добавила ещё. Если возможно, пробегитесь по программе, скажите, что там не так?
Build target 'Target 1'
assembling main.a51...
main.a51(1): error A68: UNKNOWN CONTROL OR BAD ARGUMENT(S)
main.a51(20): error A8: ATTEMPT TO DEFINE AN ALREADY DEFINED LABEL
main.a51(51): error A45: UNDEFINED SYMBOL
main.a51(51): error A45: UNDEFINED SYMBOL
main.a51(54): error A45: UNDEFINED SYMBOL
main.a51(59): error A45: UNDEFINED SYMBOL
main.a51(60): error A45: UNDEFINED SYMBOL
main.a51(61): error A45: UNDEFINED SYMBOL
main.a51(62): error A45: UNDEFINED SYMBOL
main.a51(63): error A45: UNDEFINED SYMBOL
main.a51(64): error A45: UNDEFINED SYMBOL
main.a51(67): error A45: UNDEFINED SYMBOL
main.a51(68): error A45: UNDEFINED SYMBOL
main.a51(69): error A22: EXPRESSION TYPE DOES NOT MATCH INSTRUCTION
main.a51(70): error A22: EXPRESSION TYPE DOES NOT MATCH INSTRUCTION
main.a51(71): error A45: UNDEFINED SYMBOL
main.a51(72): error A22: EXPRESSION TYPE DOES NOT MATCH INSTRUCTION
main.a51(73): error A22: EXPRESSION TYPE DOES NOT MATCH INSTRUCTION
main.a51(83): error A45: UNDEFINED SYMBOL
main.a51(84): error A45: UNDEFINED SYMBOL
main.a51(86): error A45: UNDEFINED SYMBOL
main.a51(93): error A45: UNDEFINED SYMBOL
main.a51(114): error A45: UNDEFINED SYMBOL
main.a51(134): error A48: DATA-ADDRESS EXPECTED
main.a51(152): error A45: UNDEFINED SYMBOL
main.a51(153): error A45: UNDEFINED SYMBOL
main.a51(157): error A45: UNDEFINED SYMBOL
main.a51(159): error A45: UNDEFINED SYMBOL
main.a51(179): error A38: NUMBER OF OPERANDS DOES NOT MATCH INSTRUCTION
main.a51(179): error A9: SYNTAX ERROR
main.a51(180): error A45: UNDEFINED SYMBOL
Target not created
Палыч
Цитата(NightVamp @ Jan 8 2012, 16:52) *
Ну, если вам так не понятно, я не знаю как ещё описать такое вроде простое явление, как присутсвие клавиатуры в устройстве!

Н-да... Если Вы научитесь "хорошо" формулировать вопросы, то работа пойдёт гораздо быстрее и плодотворнее...

"Таблица" (массив) констанд на ассемблере определяется как-то так (для байтовых констант):
Метка: .db константа1, константа2, константа3, ... ,константаN
kovigor
Цитата(NightVamp @ Jan 8 2012, 16:01) *
Создала всё как надо, и вылезла куча ошибок! Программа взята из книжки, в основном, так что код не может быть неправильный. Хотя, конечно, я кое-что добавила ещё. Если возможно, пробегитесь по программе, скажите, что там не так?


См. help КЕЙЛа. Если даже все так, то каждая среда имеет особенности в оформлении проекта. Например, вот как нужно оформлять проект для компилятора командной строки (пример в архиве):

http://www.atmel.com/dyn/products/tools_ca...ubfamily_id=770
NightVamp
Цитата(Палыч @ Jan 8 2012, 21:05) *
Н-да... Если Вы научитесь "хорошо" формулировать вопросы, то работа пойдёт гораздо быстрее и плодотворнее...

"Таблица" (массив) констанд на ассемблере определяется как-то так (для байтовых констант):
Метка: .db константа1, константа2, константа3, ... ,константаN


Интересно...человек просит помощи, пытается объяснить, пусть даже не обладает отличным техническим языком...а вы в остроумии упражняетесь. Заметьте, kovigor, понял почему-то моё первое сообщение про эти коды клавиш и сазу написал про массив констант в хелпе кейла.

Раз мне смогли здесь ответить кроме вас, значит не так уж и плохо я формулирую вопросы.
Однако, всё равно, благодарю вас за помощь. Надеюсь, в следующем вашем сообщении не увижу сарказма.
Палыч
Цитата(NightVamp @ Jan 8 2012, 17:22) *
...не обладает отличным техническим языком...а вы в остроумии упражняетесь.
Не упражняюсь я в остроумии!
Уж так меня научили: если есть какая-то техническая проблема, то нужно грамотно её сформулировать. Это позволит: 1) найти решение самому 2) поручить решение этой проблемы подчиненному 3) попросить помощи у других. Это всегда срабатывает! Этого (как мне кажется) не хватает многим вопрошающим... Пытаясь "правильно" сформулировать вопрос, Вы, зачастую, находите возможные пути решения; проблема из "размытой" становиться вполне конкретной (по меньшей мере - поставлен вопрос будет с использованием "правильных" технических терминов).
Цитата(NightVamp @ Jan 8 2012, 17:22) *
...в следующем вашем сообщении не увижу сарказма
Вовсе я над Вами не смеюсь! Я пытаюсь Вам помочь.
NightVamp
Цитата(Палыч @ Jan 8 2012, 22:45) *
Не упражняюсь я в остроумии!
Уж так меня научили: если есть какая-то техническая проблема, то нужно грамотно её сформулировать. Это позволит: 1) найти решение самому 2) поручить решение этой проблемы подчиненному 3) попросить помощи у других. Это всегда срабатывает! Этого (как мне кажется) не хватает многим вопрошающим... Пытаясь "правильно" сформулировать вопрос, Вы, зачастую, находите возможные пути решения; проблема из "размытой" становиться вполне конкретной (по меньшей мере - поставлен вопрос будет с использованием "правильных" технических терминов).
Вовсе я над Вами не смеюсь! Я пытаюсь Вам помочь.


Ладно, ладно, я поняла, что вы не хотели меня обидеть. Но и вы поймите, что уж я то точно знаю и понимаю, что мне нужно. Может просто не могу с первого раза очень правильно это сформулировать и донести до кого-либо по причине отсутствия технического опыта. вот и всё.
kovigor
Цитата(NightVamp @ Jan 8 2012, 18:03) *
Ладно, ладно, я поняла, что вы не хотели меня обидеть. Но и вы поймите, что уж я то точно знаю и понимаю, что мне нужно. Может просто не могу с первого раза очень правильно это сформулировать и донести до кого-либо по причине отсутствия технического опыта. вот и всё.


Так получилось или нет ? sm.gif
редактор
При работе в Кейле можно сделать хитрую штуку. Написать весь код на Си, и откомпилировать с получением асемблерного модуля (галочками выставляется) Быстро и дешево для курсового.
Палыч
Цитата(NightVamp @ Jan 8 2012, 17:01) *
Создала всё как надо, и вылезла куча ошибок! Программа взята из книжки, в основном, так что код не может быть неправильный. Хотя, конечно, я кое-что добавила ещё. Если возможно, пробегитесь по программе, скажите, что там не так?

В сообщениях об ошибках в скобочках - номера строк с ошибкой

20 - "bufT" был уже определен в строке 13. Скорее всего здесь должно быть "buf" (без буквы Т) - см.стр.114
51,54 - регистр ноль (не буква о) ro заменить на r0
60,61,83,84 - регистры THC и TLC - это, вероятно, TH0 TL0
69,70,72,73 - команда ADD - первым аргументом должен быть аккумулятор (например ADD A,R0); коммнда RR - аргумент только аккумулятор (RR A)
114 - ошибка уйдёт, если исправить в стр.20
134 - вместо команды inc должна быть что-то другое
179 - пропущена точка - должно быть "acc.7"

Транслировал Вашу программу из поста №1. Остальные ошибки мой транслятор не выдаёт...
NightVamp
Цитата(kovigor @ Jan 9 2012, 02:20) *
Так получилось или нет ? sm.gif

Ещё не пробовала, завал учебный =) Как попробую, напишу о рузультатах =)

Цитата(редактор @ Jan 10 2012, 15:15) *
При работе в Кейле можно сделать хитрую штуку. Написать весь код на Си, и откомпилировать с получением асемблерного модуля (галочками выставляется) Быстро и дешево для курсового.

Написать подобную программу на Си для меня невозможно, тем более он сложнее асм! В асм я могу понять каждую строчку, даже если программа не моя, а вот в Си не каждую.

Цитата(Палыч @ Jan 10 2012, 16:54) *
В сообщениях об ошибках в скобочках - номера строк с ошибкой

20 - "bufT" был уже определен в строке 13. Скорее всего здесь должно быть "buf" (без буквы Т) - см.стр.114
51,54 - регистр ноль (не буква о) ro заменить на r0
60,61,83,84 - регистры THC и TLC - это, вероятно, TH0 TL0
69,70,72,73 - команда ADD - первым аргументом должен быть аккумулятор (например ADD A,R0); коммнда RR - аргумент только аккумулятор (RR A)
114 - ошибка уйдёт, если исправить в стр.20
134 - вместо команды inc должна быть что-то другое
179 - пропущена точка - должно быть "acc.7"

Транслировал Вашу программу из поста №1. Остальные ошибки мой транслятор не выдаёт...

Спасибо, я посмотрю, исправлю =) А не скажете какие модули подключали? Ведь с них начинается программа? Напишите, если не сложно, что вы писали до первой строки моей программы, чтобы её откомпилить!
Палыч
Цитата(NightVamp @ Jan 16 2012, 21:45) *
Напишите, если не сложно, что вы писали до первой строки моей программы, чтобы её откомпилить!

Ничего
NightVamp
Цитата(Палыч @ Jan 10 2012, 15:54) *
Транслировал Вашу программу из поста №1. Остальные ошибки мой транслятор не выдаёт...

Каккой у вас транслятор, компилятор? Я имею ввиду версию.

Палыч, очень вас прошу, можете сюда скинуть полные результаты вашей трансляции программы? Буду очень признательна.
Палыч
Цитата(NightVamp @ Jan 19 2012, 13:55) *
Каккой у вас транслятор, компилятор? Я имею ввиду версию.

uVision 3 V3.62c
C Compiler V8.16

Цитата(NightVamp @ Jan 19 2012, 13:55) *
Палыч, очень вас прошу, можете сюда скинуть полные результаты вашей трансляции программы? Буду очень признательна.
Какие результаты Вас интересуют? Сообщения об ошибках? А, другого ничего и нет...
NightVamp
Цитата(Палыч @ Jan 19 2012, 17:10) *
uVision 3 V3.62c
C Compiler V8.16

Какие результаты Вас интересуют? Сообщения об ошибках? А, другого ничего и нет...

Да, действительно. просто вспомнила ваши слова, что ваш транслятор не выдаёт других ошибок, кроме вами перечисленных. Показалось почему-то, что удачно программа откомпелировалась...
Палыч
Цитата(NightVamp @ Jan 19 2012, 17:33) *
Показалось почему-то, что удачно программа откомпелировалась...

Часть ошибок исправить не сложно. Но, вот, что делать с этими?
Цитата
69,70,72,73 - команда ADD - первым аргументом должен быть аккумулятор (например ADD A,R0); коммнда RR - аргумент только аккумулятор (RR A)
134 - вместо команды inc должна быть что-то другое
Тут уж только Вы, зная логику программы, можете что-то исправить.
NightVamp
Цитата(Палыч @ Jan 19 2012, 22:14) *
Часть ошибок исправить не сложно. Но, вот, что делать с этими?

может я просто в компиляторе самом до конца не разобралась, что-то недонастроила...Я уже сдала работу на отлично, спасибо за помощь! Если нужно будет, снова сюда обращусь=))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.