Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15584
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение BOB51 »

Этот вопрос про наличие софта касался jenia_ov.
8)
Реклама
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение Zhuk72 »

А-а-а, ясно.

Посмотрел схему, предсказуемо и логично.
СпойлерИзображение
Ногодрыг в зависимости от уровня входного сигнала и заданной кнопками программы.

Добавлено after 1 hour 16 minutes 23 seconds:
А это видео работы.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Реклама
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение Zhuk72 »

От нечего делать (вернее от нежелания побороть лень) накидал показательный вариант индикатора уровня по последнему обсуждению. Это только заготовка, болванка. К сожалению дальнейшее написание требует наличия железа, т.к. Протеус почему-то не хочет симулировать обе линейки светодиодов, ошибку выдает. Плюс отсутствие АЦП и в 12 раз медленнее по сравнению с STC15 (АТ89С51 все-таки старик), приходится в программе константы подделывать.

Может автор вопроса пожелает дополнить самостоятельно. Или кто-то другой допишет привязку уровней входных сигналов (они уже измеряются) к индексу матрицы. Ну и кнопку еще надо обработать.

Архив для желающих поковыряться прилагаю.
STC_Level.zip
(212.54 КБ) 248 скачиваний
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Alex932406
Родился
Сообщения: 4
Зарегистрирован: Сб янв 14, 2017 08:39:12

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение Alex932406 »

Здравствуйте. Помогите с решением задачи.
Считать с параллельного порта байт данных (двоично-десятичный
код), на одноразрядный семисегментный индикатор вывести сумму тетрад, если
результат больше числа 9, на индикатор вывести "0".
Заранее спасибо.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение Zhuk72 »

Асм или С?
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Реклама
Alex932406
Родился
Сообщения: 4
Зарегистрирован: Сб янв 14, 2017 08:39:12

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение Alex932406 »

Ассемблер
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15584
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение BOB51 »

СТУДЕНТ...
давненько я с 51-й не практиковал...
примерно так:

Код: Выделить всё

mov r7,port_n ; читаем порт в буфер
mov a,#0x0F ; маска младшей тетрады в АСС
anl a,r7 ; выделяем младшую тетраду
xch a,r7 ; исходный код в АСС, мл. тетрада в r7
anl a,#0xF0 ; выделяем старшую тетраду
swap a ; разворот тетрад
add a,r7 ; сложили
da a ; десятичная коррекция при сложении (поставит АС=1 при переносе
     ; в старшую тетраду
jnb AC,pt_0 ; анализ результата
clr a ; если результат более 9 сброс АСС в 0
pt_0: inc a
movc a,@a+pc ; позиция +1 байт - обход команды ret
ret ; возврат из подпрограммы обработки
segment_table:
 .db ....... ; генератор сегментной комбинации
ежли где не обшибси...
:dont_know:
Alex932406
Родился
Сообщения: 4
Зарегистрирован: Сб янв 14, 2017 08:39:12

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение Alex932406 »

Спасибо
WaL97
Потрогал лапой паяльник
Сообщения: 342
Зарегистрирован: Чт июн 30, 2011 10:10:23
Откуда: лютая Россия
Контактная информация:

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение WaL97 »

Всем привет!
Начинаю осваивать AT89C51 (заставляют в институте :))) )
Программирую на C, установил Keil.

Подскажите пожалуйста, как мне запустить таймер, длительностью скажем, 1мс (кварц,допустим, 12мгц). И при его переполнении выполнять какой-то код?
Годной инфы не нашел, а где нашел - как-то слишком мудрено все расписано и сделать мне это не получается.
[b]— Да не боись, всего двенадцать вольт… и восемьсот ампер.[/b]
petrenko
Друг Кота
Сообщения: 5327
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение petrenko »

WaL97 писал(а):.. (заставляют в институте )
..
.. Годной инфы не нашел, а где нашел - как-то слишком мудрено ...
Раз не можете понять, как выполнять подпрограмму по переполнению таймера, и вообще настроить таймер - то лучше увольтесь из института - и никто не будет заставлять.

Подсказывают тем, кто сам хоть что-нибудь пытается понять и сделать - Вы пытались ?
Если утверждаете, что пытались, то поведайте нам, что Вы уже знаете о таймерах м.к. и прерываниях
(, а пустословию место или в "МЯУ!" или в "Сделайте за меня задание" - там за $ помогают .. ) :(
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
salang
Грызет канифоль
Сообщения: 273
Зарегистрирован: Вт янв 18, 2011 19:32:48
Откуда: Мск

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение salang »

WaL97 писал(а):слишком мудрено все расписано
вроде несложно
WaL97
Потрогал лапой паяльник
Сообщения: 342
Зарегистрирован: Чт июн 30, 2011 10:10:23
Откуда: лютая Россия
Контактная информация:

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение WaL97 »

salang писал(а):
WaL97 писал(а):слишком мудрено все расписано
вроде несложно
Ну опять же, там в основном теория, принцип работы - это я примерно знаю. А примеры кода на асме.

Добавлено after 11 minutes 11 seconds:
petrenko писал(а):Раз не можете понять, как выполнять подпрограмму по переполнению таймера, и вообще настроить таймер - то лучше увольтесь из института - и никто не будет заставлять.

Подсказывают тем, кто сам хоть что-нибудь пытается понять и сделать - Вы пытались ?
Если утверждаете, что пытались, то поведайте нам, что Вы уже знаете о таймерах м.к. и прерываниях
(, а пустословию место или в "МЯУ!" или в "Сделайте за меня задание" - там за $ помогают .. ) :(
Да ладно вам. задание куда сложнее, а учить этому меня будут только ближе к лету. Имел небольшой опыт с авр, вот и взялся попробовать. ладно, не буду разглагольствовать.

вот инициализация прерывающей процедуры:

Код: Выделить всё

void mProcIntT0 () interrupt TF0_VECTOR { 
TR0 = 0; // Останов таймера.
TH0 = ~mKodTime >>8;  // Загрузка на отсчет
TL0 = ~mKodTime;//  заданного времени.
TR0 = 1; // Пуск таймера.
mFlagTik =1; // Установка флажка тиков.
mCountTik++; // Счет системных“тиков”.
// Здесь при необходимости можно выполнять и другие действия.
}
Процедуру нужно вызывать в самом начале программы, ведь так?

Код: Выделить всё

void main(void) 
{
	 mProcIntT0();
...
}
Но тогда Keil не компилирует код, выдавая мне ошибку

Код: Выделить всё

kursach.c(52): error C205: can't call an interrupt function
Добавлено after 6 minutes 10 seconds:
еще небольшой вопрос по кейлу. учитывая, что процессор выполняет каждую команду за 12 тактов, то на частоте в 12 мгц каждая команда выполняется за 1мкс.

в книге предлагается такой макрос:
#definemDelay1mks {_asm nop _endasm;}
кейл _asm не понимает. понимает он #pragma asm, но таким макаром макрос с нопами не написать. Это можно реализовать как-то иначе?
Последний раз редактировалось WaL97 Вс фев 12, 2017 10:09:36, всего редактировалось 1 раз.
[b]— Да не боись, всего двенадцать вольт… и восемьсот ампер.[/b]
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15584
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение BOB51 »

С ассемблером подсказать можно.
8)
Под Си - это СИшника поискать надо...
:roll:
В принципе... примеры можно подчерпнуть из документации к китайским STC15xxxxxxx...
В отношении примеров для программирования это своеобразные учебники.
То же касается и описания синтаксиса и директив компиляторов ассемблера и СИ в спецразделе в конце каждого даташита.
К примеру вот тут:
STC15F204EA-series-english.pdf
(3.46 МБ) 301 скачивание
:beer:
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение Zhuk72 »

Я не знаю особенности AT89C51, но STC по сравнению с классическим 8051 работает несколько иначе, начиная от однотактных команд, и заканчивая иным режимом 0 таймера (16 бит), если ограничиться тактированием.

В часах я делал инициализацию Т0 так:
Спойлер

Код: Выделить всё

void  t0set(void)
{
// Timer0 @ 11.0592Mhz /\ 0.0904us*12(PSC)*256*18=5ms - Led display refresh period
// 0xEE до 00 тикает 18 раз, т.е. 16-разрядный счетчик 0хЕЕ00 будет тикать до переполнения 4608 раз.
// 									ВАЖНО:
// После каждого переполнения пары (THx:TLx) в соответствии с заданным режимом работы (Mode 0)
// регистры TLх и THх будут автоматически заряжаться до указанных значений из "зеркальных" 
// регистров RL_TLx и RL_THx. При остановленном таймере (TRх = 0) запись в TLх и THх автоматически 
// запишет те же значения и в регистры RL_TLx и RL_THx. 
// Если же таймер запущен (TRx = 1), запись в TLх и THх изменит 
// значения ТОЛЬКО "зеркальных" регистров RL_TLx и RL_THx.
	TMOD = 0;	  // T0 and T1 both 16-bit auto-reload timer mode
	AUXR = 0;		// T0 and T1 uses SysClk/12 (8051 compatibility mode).
	INT_CLKO = 0;
	TL0 = 0;
	TH0 = 0xEE;	// 18*256=4608
	TF0 = 0;		// Clear T0 interrupt flag, TCON,5
	TR0 = 1;		// Timer0 start, TCON,4
	ET0 = 1;    // Enable Timer0 interrupt
}
А прерывание вообще никаких остановок и перезагрузок не требует. Таймер при переполнении сам загружает начальные значения из "зеркальных" регистров в основные и начинает считать.
Спойлер

Код: Выделить всё

void timer0_isr (void) interrupt 1 using 1
{
//********************************************
// В прерывание по Т0 мы попадаем каждые 5 мс.
//********************************************

//******** Вывод на индикатор ********
	anode |= 0x3C;				// Р3[5:2] - set anode pins to switch off LEDs
	cathode = filldisplay(row, digit, Led[row][digit]);	// Преобразование числа в символ индикатора dbuf.
	anode &= ~(1 << (digit + 2));	// Включаем разряд.
	if (++digit > 3) digit = 0;	// Следующий разряд.
	if (abc_ena) t1set();  // Если автояркость активна, запускаем таймер для псевдо-ШИМ:  
} // End of T0 interrupt
Это работает в Keil.
Пересчитайте под свои потребности. С такими комментариями и наличии ДШ разобраться будет легко.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
WaL97
Потрогал лапой паяльник
Сообщения: 342
Зарегистрирован: Чт июн 30, 2011 10:10:23
Откуда: лютая Россия
Контактная информация:

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение WaL97 »

Zhuk72
Спасибо!
Сейчас глупый вопрос конечно же, но...
вот я объявляю эти две функции

Код: Выделить всё

void  t0set(void)
{

}

Код: Выделить всё

void timer0_isr (void) interrupt 1 using 1
{

}
затем идет основная

Код: Выделить всё

void main(void) 
{
	while(1) 
		{ 
			
		}
}
в какой части и как мы их должны вызвать?
Спрашиваю, чтоб знать, что хотя бы в этом не накосячить и разбираться только с инициализацией таймера\прерываний
[b]— Да не боись, всего двенадцать вольт… и восемьсот ампер.[/b]
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение Zhuk72 »

Объявлять нужно только одну в виде

Код: Выделить всё

void  t0set(void);
Прерывания в теле программы не вызывают, поэтому и объявлять не требуется.
Вызвать настройку таймера нужно тогда, когда он должен начать работу, например в main, так:

Код: Выделить всё

t0set();
Кроме того, чтобы работали прерывания, их нужно глобально разрешить.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
salang
Грызет канифоль
Сообщения: 273
Зарегистрирован: Вт янв 18, 2011 19:32:48
Откуда: Мск

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение salang »

WaL97 писал(а):А примеры кода на асме
в asm нет ничего плохого, особенно в условиях ограниченных ресурсов. А 89С51 поддерживается Вашим компилятором?
WaL97
Потрогал лапой паяльник
Сообщения: 342
Зарегистрирован: Чт июн 30, 2011 10:10:23
Откуда: лютая Россия
Контактная информация:

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение WaL97 »

salang писал(а):
WaL97 писал(а):А примеры кода на асме
в asm нет ничего плохого, особенно в условиях ограниченных ресурсов. А 89С51 поддерживается Вашим компилятором?
Дело в том, что хотелось бы понимать, что делает каждая строка в коде. А всю программу написать на ассемблере уж точно не смогу.
Поэтому использую си. Мой любимый cvAVR х51 контроллеры не поддерживает, после гуглений нашел Keil C51.
подключаю at89x51.h, затем портами управлять у меня получается. Так что наверное да, поддерживается :)))

Update
Всем спасибо! Удалось реализовать! Наконец порт "замигал". Дальше уже все что нужно сделаем.
[b]— Да не боись, всего двенадцать вольт… и восемьсот ампер.[/b]
salang
Грызет канифоль
Сообщения: 273
Зарегистрирован: Вт янв 18, 2011 19:32:48
Откуда: Мск

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение salang »

мне казалось, что 128байт для организации стека мало и требуется мин. 1Кб. Видимо, был неправ
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15584
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Сообщение BOB51 »

Для 51-й или кейл или SDCC где-то отсюда ссыль была:
http://stcmicro.com/rjxz.html
есть правда еще производители софта... да уж там больно "платные" IDE... :cry:
Ответить

Вернуться в «Разные вопросы по МК»