|
siry
|
||||||
Код для at89c51 в keil uvision27.08.2013, 00:38. Показов 30373. Ответов 36
Метки нет (Все метки)
Доброго времени суток!
Я догадывался, что рано или поздно придется программировать. Этот день наступил. Необходимо написать программу для тестирования параметров данного мк. Писать решил на ассемблере. До этого писал пару программок в паскале аля п ничего не писал. Хочу спросить, будет ли работать то, что я написал (это кусок того, что надо сделать)? Если нет, то какие ошибки здесь есть (то есть, это и так все одна большая ошибка..)? Здесь проверяю напряжения высоких/низких уровней... где-то.. Адреса этих "где-то" взял в файле, где sfr разные (0x80,0x8E). В чем суть. Мк ждет сигнала на одном из пинов порта 2 (0xA0). Когда фиксирует этот импульс, ищет в таклице команд нужную и переходит на выполнение этой команды в самом коде. Я уверен, что работать не будет. Возможность проверить в деле будет только через неделю. Спасибо.
|
||||||
| 27.08.2013, 00:38 | |
|
Ответы с готовыми решениями:
36
Подпрограмма для keil uvision 8051 Keil Uvision 4 , МК51
|
|
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
|
||||||
| 27.08.2013, 01:50 | ||||||
|
Пиши P0, P1, P2, P3
При работе с метками не нужно их умножать на 2 (TABLE<<1 это для AVR). Напиши своими словами алгоритм работы, найди нужные по смыслу (действию) комманды, и пиши прогу. Всё получится. Удачи!
0
|
||||||
|
siry
|
||||||
| 27.08.2013, 10:42 | ||||||
|
Если пишу Р0, Р1 и т.д, то при buyld target выдает ошибку at89c.a51(23): error A48: DATA-ADDRESS EXPECTED. Поэтому я и стал писать такие вот адреса.
TABLE<<1 - это здесь я умножаю на 2? Да, я смотрел пример для AVR и по комментариям того кода понял, что так выполняется поиск команды. JB, JNB понял же.. Если бит установлен, то выполняем код далее. И наоборот. В коде для AVR это выглядит так:
С внешнего устройства подаю импульс на пин N (на разный пин для каждого теста). МК видит этот импульс и, допустим, выставляет напряжение высокого уровня на нужных мне портах (хорошо, если можно было бы написать "если импульс там-то, то делать то-то"). После этого подает импульс обратно во внешнее устройство о выполненном действии (внешнее устройство измерило напряжение). Внешнее устройство дает команду вернуть все в исходное состояние. МК возвращает все в исходное состояние. Новая команда на пин N и так далее.. Из литературы читаю Keil Macro Assembler omd Utilities, 8051 Microsontroller Instruction Set и даташит. Ну я так понимаю, что я очень далек от истины? |
||||||
|
siry
|
||||||
| 27.08.2013, 13:00 | ||||||
|
Повторное написание алгоритма помогло. Вроде как...
Поэтому написал прогу заново. Так лучше?
Очищая бит (CLR 0x80 ;0 on port 0,), я устанавливаю напряжение низкого уровня? Как одним махом установить везде нули после выполнения команды? (Вместо попортового очищения). Я так понимаю, что JBC P2^2,Uol и тд не будет работать? Застрянет на этой строчке? Алгоритм. Т- тестер, МК- микроконтроллер. Т. Подает импульс на порт. МК. Считывает импульс. Выполняет команду. Выставляет флаг готовности на пине 1.4 Т. Ожидает флага готовности. Проводит измерение. Подает импульс на пин 1.5, чтобы... МК. Ждет импульса на пине 1.5 Очищает пин 1.4 Очищает порты, на которых выставлял параметры. Ждет новый импульс, чтобы выполнить новую команду (Uol, Uol1,Uoh, Uoh1). |
||||||
|
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
|
||||||||||||||||
| 27.08.2013, 13:54 | ||||||||||||||||
|
C какими ключами идет запуск компилятора? И какого A51.ixi или AX51.ixi ?
Если AX51 Попробуй:
[45.64 Кб] На выходе получишь сразу HEX. Запуск:
0
|
||||||||||||||||
|
siry
|
||
| 27.08.2013, 14:08 | ||
Вот что вышло: [204 байт] |
||
|
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
|
|||
| 27.08.2013, 14:12 | |||
0
|
|||
|
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
|
|
| 27.08.2013, 14:15 | |
|
Найди файл с расширением lst. Загляни в него может многое станет ясным.
0
|
|
|
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
|
|||
| 27.08.2013, 14:18 | |||
Остальное чересчур сумбурно, не понял.
0
|
|||
|
siry
|
|||
| 27.08.2013, 14:24 | |||
|
Ох сколько всего..
[1.21 Кб] |
|||
|
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
|
|||||||
| 27.08.2013, 14:29 | |||||||
0
|
|||||||
|
siry
|
||
| 27.08.2013, 15:01 | ||
а как в остальном? |
||
|
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
|
||
| 27.08.2013, 15:08 | ||
|
Здесь не надо, RET это выход из подпрограммы. Чтобы туда зайти нужно инициализировать стек. Сейчас его нет. Да и вообще одни огрызки.
Установите uVision, загрузите это, она вам все расскажет. >> siry, удалять свои посты конечно дело ТС, но непонятно на что я сейчас отвечаю?
0
|
||
|
siry
|
|
| 27.08.2013, 18:31 | |
|
Я не удалил ни одного поста.
Понятно, что это норм код, тем более, что первый раз такое делаю. Мне просто понять, будет ли работать то, что уже написано, чтобы уже ошибок в остальном коде не делать. В uvision это сижу. Все компилируется прекрасно: "Build target Target 1 assembling at89cv2.a51... linking... Prokram Size: data=8.0 xdata=0 code=84 creating hex file from "at89c"... "at89c" - 0 Error(s), 0 Warning(s)." SITB P1.4 ;Ready flag on pin 1.4. Это МК устанавливает (по крайней мере, я думаю, что он это так делает) высокий уровень, а тестер это видит и отдает команду на пин 1.5, чтобы мк все обнулил и ждал нового импульса на одном из пинов. |
|
|
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
|
||
| 29.08.2013, 12:43 | ||
Для кого комментарии, для себя или для тестера?
0
|
||
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
|||||||
| 29.08.2013, 13:07 | |||||||
Для кого комментарии, для себя или для тестера?Вы спутали два английских слова. Ready flag - это не чтение флага, а флаг готовности. Алгоритм предусматривает такой выходной сигнал. Например, в другом месте:
0
|
|||||||
|
siry
|
|||||||
| 29.08.2013, 13:31 | |||||||
Посидев еще подрехтовал программу. Думается, что работать будет.
|
|||||||
|
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
|
||||||
| 29.08.2013, 15:01 | ||||||
|
Дествительно с Ready flag ошибся.
Help у uVision очень хороший, в том числе и по ассемблеру. Там описано как создавать сегментированные переносимые программы. И структура стандартной программы давно известна. Для uVision и вашей программы она примерно такая:
P.S. У вас переменных нет, "VARS SEGMENT DATA" вам не нужен. P.P.S вы не обьяснили бы эту строку: >> CLR 0x8E ;0 on ALE
0
|
||||||
|
siry
|
||||||
| 29.08.2013, 15:28 | ||||||
value - это имя переменной? PROG SEGMENT CODE -- вместо PROG мне надо написать AT89? (в хэлпе первым словом стоит имя программы). CLR 0x8E ;0 on ALE -- я в Uoh1 выставляю на ALE высокий уровень (опять же, думается, что я так его выставлю). А после этого хочу вернуть его в ноль обратно такой вот командой. KEY0 BIT P0.0 GREEN_LED BIT P1.2 ; GREEN LED on I/O PORT P1.2 Эти строчки равнозначны же? Тогда в коде мне писать SITB KEY0? В чем принципиальная разница между вашим и моим вариантом? upd. разница в функционировании org и cseg. org для всего вообще, cseg чисто для данных, находящихся в сегменте code. upd2. Зачем после CSEG писать RSEG PROG ? Нельзя сразу RSEG PROG? Спасибо за помощь. |
||||||
|
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
|
|||||||||||
| 29.08.2013, 15:52 | |||||||||||
|
Согласен, пример очень перемудрен, я так никогда не пишу. Обьявляем сегмент данных и резервируем байтовую переменную с именем Value0. В коде обращаемся просто по имени.
>> выставляю на ALE высокий уровень - ALE это служебный строб и повлиять на его работу программными средствами не получится. >> P0.0 или KEY0 BIT P0.0...В чем принципиальная разница между вашим и моим вариантом? Принципиальной разницы нет, дело только в удобстве. Если P0.0 встречается в коде только один раз, несложно найти это место и исправить на другой пин. Если же 10 раз это уже напрягает.
0
|
|||||||||||
| 29.08.2013, 15:52 | |
|
Помогаю со студенческими работами здесь
20
Как добавить микросхему в Keil uVision 4? Ошибки про сборке проекта в Keil uVision 5 Keil uVision. Получить частоту внешнего генератора Программирование арифметических операций (i8051 Keil uVision) Keil uVision. Как просмотреть assembler code программы на Си? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|