Radiohobby Forum

Интернет конференция журнала "Радиохобби"

Вы не вошли.

Объявление

Подписка на новые материалы от Николая Сухова - ролики, схемы, модели, онлайн конференции, консультации, чат.

Внимание! Почта в доменах Яндекс и Mail.ru не будет работать в профилях форумчан, из-за введённых правительством Украины санкций против этих компаний. Всем, кто ранее использовал подобную почту, для сохранения прежней функциональности форума, рекомендуется её поменять.

Огромная просьба, заливать тематические картинки и файлы в личные файловые каталоги на форуме, чтобы они не потерялись, со временем!

Ссылка "Загрузки" находится справа внизу формы набора сообщения.

Подписка на журнал "Радиохобби" прекращена. Подробности. Форум же - продолжает свою работу.

#11 25.07.2006 18:26:29

Liv
Ветеран
Откуда: Минск
Здесь с 08.02.2004
Сообщений: 1,233

Re: MCS-51 для "чайников"

Можно и так. Работая на Си почти всё равно, какая платформа. Я вот тоже к старости ленивый стал, раньше писал всё на асме, а сейчас последние проекты все на Си sad

Вне форума

#12 25.07.2006 18:45:22

Dmitry
Забанен
Откуда: Запорожье
Здесь с 03.02.2004
Сообщений: 3,105
Сайт

Re: MCS-51 для "чайников"

Ну вот! Не успел Уго Чавес похвалить батьку Лукашенко за успехи в ненависти к "всемирной империи зла", как Лив на старость начал косить и на пенсию проситься. wink


Почему когда мы нарушаем, нас штрафуют, а когда всё делаем правильно, с нас берут налоги?....

Вне форума

#13 25.07.2006 19:19:12

Liv
Ветеран
Откуда: Минск
Здесь с 08.02.2004
Сообщений: 1,233

Re: MCS-51 для "чайников"

██████
██████
██████

Отредактировано Liv (26.07.2006 10:20:18)

Вне форума

#14 25.07.2006 21:11:50

Матроскин
Ветеран
Откуда: Краснодар
Здесь с 06.02.2006
Сообщений: 2,022

Re: MCS-51 для "чайников"

2 Liv. Один добрый человек дал мне AVRStudio. Кроме того, что он добрый, он еще и умный, жаль тока у нет времени (а может и желания) учить меня, идиота...
Можем попытаться ветку переименовать smile
Еще я прочитал ссылку, которую вы давали, чего-то там avr123. Блин, это ж надо так напряжно писать!!! У меня после первой страницы заболела голова. Даже даташиты вражеские легче читаются.
Но вернемся к нашим баранам. Как я и говорил, вопросы остались. Те же самые. Да кроме того добавились еще. AVR имеет другую систему команд, но тут ладно, разберемся. Я совершенно не знаком с ассемблером как таковым. Насколько я понимаю, имеются три важных вещи. 1 - команды самого МК, 2 - директивы ассемблера и 3 - какие-то псевдооператоры (жуть...). При написании программы при помощи директив объявляются сегменты кода, данных и т.д. Для чего это нужно?? Не нужно отвечать "для резервирования в памяти места под данные" (к примеру) путано и нифига не ясно, для чего это может пригодиться в реальности. Хотелось бы видеть пример какой-нибудь простой програмки (типа той, чтоя выше писал), но написанной по всем правилам, чтоб компилятор не давал ошибок. А то у меня ругается даже на .CSEG, говорит неверный синтаксис, хотя пишу один к одному как в хелпе.
Через тернии в дебри, как говориться...
Буду признателен, если поможете....


......There is someone in my head, but it's not me.......

Вне форума

#15 25.07.2006 23:25:10

Liv
Ветеран
Откуда: Минск
Здесь с 08.02.2004
Сообщений: 1,233

Re: MCS-51 для "чайников"

Вот набросал программку и проверил на железе, всё работает. Постарался продемонстрировать все основные моменты. Хотя местами дурной стиль (типа явных констант, а не вычисленных препроцессором), но в качестве первой программы сойдет.

;----------------------------------------------------------------------------

;Программа мигания светодиодом
;Микроконтроллер: AT90S2313
;Частота кварца: 10 МГц

;----------------------------------------------------------------------------

.include "2313def.inc"		;подключаем файл описания регистров

;----------------------------------------------------------------------------

;Константы:

.equ	LED_DEL	= 76		;значение задержки в интервалах таймера 0

;----------------------------------------------------------------------------

;Определение портов:

.equ	LED_PORT = PORTB	;светодиод будет на порту B
.equ	LED_PIN  = PB0		;светодиод подключен к выводу PB0

;----------------------------------------------------------------------------

;Глобальные регистровые переменные:

.def	temp	= r16		;временный регистр temp

;----------------------------------------------------------------------------

.DSEG	;сегмент данных, будем описывать переменные в ОЗУ

LedTmr:	.byte 1			;программный таймер светодиода (1 байт)

;----------------------------------------------------------------------------

.CSEG	;дальше идет программа, переходим в сегмент кода

;----------------------------------------------------------------------------

;Векторы прерываний:

.org	0			;по адресу 0 вектор сброса
	rjmp	Init		;переход на основную программу

.org	OVF0addr		;по адресу OVF0addr вектор прерывания по
	rjmp	Timer		;переполнению таймера 0

;----------------------------------------------------------------------------
;----------------------------------------------------------------------------

;Программа начинает выполняться отсюда:
;Здесь пишем всякую инициализацию, которая должна
;выполняться один раз при старте программы.

Init:	ldi	temp,RAMEND	;константа RAMEND определена в 2313def.inc
	out	SPL,temp	;инициализируем стек

;Настройка портов:
	
	ldi	temp,0xFF	;загружаем в temp FF	
	out	DDRB,temp	;настраиваем порт B на вывод
	out	DDRD,temp	;настраиваем порт D на вывод

;Инициализация переменных:

	ldi	temp,LED_DEL
	sts	LedTmr,temp	;загружаем в переменную значение LED_DEL

;Настройка оборудования:

	ldi	temp,(1<<CS02)	;предделитель таймера CK/256
	out	TCCR0,temp	;записываем в регистр TCCR0
	ldi	temp,(1<<TOIE0)	;бит TOIE0 равен единице, остальные нули
	out	TIMSK,temp	;разрешаем прерыв. по переполн. таймера 0

	sei			;общее разрешение прерываний
	
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------

;Основной цикл программы:
;То, что написано в этом цикле, будет выполняться
;до бесконечности:
	
Main:	lds	temp,LedTmr	;загружаем в temp переменную LedTmr
	tst	temp		;проверяем значение
	brne	NoDeal		;если не ноль, то все пропускаем
	rcall	Toggle		;если ноль, то вызываем Toggle
	ldi	temp,LED_DEL	;и
	sts	LedTmr,temp	;перезагружаем LedTmr
NoDeal:	rjmp 	Main		;цикл

;----------------------------------------------------------------------------
;----------------------------------------------------------------------------

;Всё, дальше идут всякие подпрограммы.

;----------------------------------------------------------------------------

;Подпрограмма переключения состояния светодиода:

Toggle:	sbis	LED_PORT,LED_PIN ;проверяем состояние порта светодиода
	rjmp	On		 ;если был выключен, переход на включение
Off:	cbi	LED_PORT,LED_PIN ;выключение светодиода
	rjmp	TglRet		 ;переход на ret
On:	sbi	LED_PORT,LED_PIN ;включение светодиода
TglRet:	ret
	
;----------------------------------------------------------------------------

;Обработчик прерывания таймера 0:
;Таймер 0 имеет разрядность 8 бит, т.е. переполнение происходит
;каждые 256 тактов. Учитывая то, что предделитель таймера
;мы запрограммировали на CK/256, то таймер будет переполняться
;каждые 65536 периодов частоты кварца. Если частота кварца
;10 МГц (период 0.1 мкс), то период переполнений таймера равен
;6.5536 мс. Это значение, умноженное на число, загружаемое в
;LedTmr даст время полупериода мигания светодиода.
	
Timer:	push	temp		;сохранение регистра temp
	in	temp,SREG	;temp <- SREG
	push	temp		;сохранение SREG

	lds	temp,LedTmr	;загружаем в temp переменную LedTmr
	tst	temp		;проверяем значение
	breq	Ovf		;если ноль, ничего не делаем
	dec	temp		;иначе temp - 1
	sts	LedTmr,temp	;сохраняем новое значение
		
Ovf:	pop	temp		;восстановление SREG
	out	SREG,temp	;SREG <- temp
	pop	temp		;восстановление регистра temp
	reti			;выход из обработчика и разрешение прерываний

;----------------------------------------------------------------------------

;Типа всё.

Вне форума

#16 26.07.2006 07:00:00

Матроскин
Ветеран
Откуда: Краснодар
Здесь с 06.02.2006
Сообщений: 2,022

Re: MCS-51 для "чайников"

Ой, спасибо!!  Буду разбираться!  Попробую!


......There is someone in my head, but it's not me.......

Вне форума

#17 26.07.2006 08:12:43

Vasil
Ветеран
Откуда: близ Киева
Здесь с 23.01.2004
Сообщений: 1,158

Re: MCS-51 для "чайников"

Вот текущие рейтинги:
electronix.ru/forum/index.php?showtopic=449&st=0
electronix.ru/forum/index.php?showtopic=15289&st=0
electronix.ru/forum/index.php?showtopic=447
А вообще то  в "Радиохобби" был цикл статей  по AVR + WinAVR

Отредактировано Vasil (26.07.2006 08:17:28)

Вне форума

#18 26.07.2006 12:34:56

Liv
Ветеран
Откуда: Минск
Здесь с 08.02.2004
Сообщений: 1,233

Вне форума

#19 26.07.2006 13:03:15

Jaxon
радиолюбовник
Откуда: Николаев
Здесь с 22.01.2004
Сообщений: 3,018

Re: MCS-51 для "чайников"

а книжка по Микрокапу-7 есть где?, а тоя чета не нашол....

Вне форума

#20 26.07.2006 18:31:16

Матроскин
Ветеран
Откуда: Краснодар
Здесь с 06.02.2006
Сообщений: 2,022

Re: MCS-51 для "чайников"

Кто-нибудь знает, как сбросить AVRStudio на установки по умолчанию?? Я поппытался поменять шрифт, теперь курсор находиться не в том месте, где вводиться символ, а несколько впереди, причем чем правее по строке тем это расстояние увеличивается. Слова друг на друга налезают, появляются какие-то левые символы... работать невозможно. Раньше все было ок. Переустановка не помогает.


......There is someone in my head, but it's not me.......

Вне форума

Сейчас в этой теме пользователей: 0, гостей: 1
[Bot] ClaudeBot

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.035 сек, 7 запросов выполнено - Использовано памяти: 626.42 Кбайт (Пик: 676.79 Кбайт) ]