Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Коцюрбенко Алексей aka Жерар
Статус: Профессор
Рейтинг: 3174
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2596
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2078
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1496
Дата выхода:13.12.2011, 22:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:184 / 63
Вопросов / ответов:1 / 1

Консультация # 184719: Здравствуйте! У меня возникли сложности с таким вопросом:Нужно написать программу для учебного лабораторного комплекса SDK-1.1, обеспечивающую поочередное «зажигание» светодиодов через один и их «гашение» в том же порядке, с частотой 1Гц. Процессор 8051.Буду очень вам благодарен,если вы сумеете мне помочь. ...


Консультация # 184719:

Здравствуйте! У меня возникли сложности с таким вопросом:Нужно написать программу для учебного лабораторного комплекса SDK-1.1, обеспечивающую поочередное «зажигание» светодиодов через один и их «гашение» в том же порядке, с частотой 1Гц. Процессор 8051.Буду очень вам благодарен,если вы сумеете мне помочь.

Дата отправки: 08.12.2011, 21:48
Вопрос задал: Дмитрий (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Дмитрий!
Вот Вам программа.
Для отработки поочередного «зажигания» и «гашения» использовал табличное задание данных.

Код :
#include	<ADuC812.h>
NAME	Primer_10
SV	EQU	7h	; адрес порта светодиодов в ПЛИС
PROG_WM	SEGMENT CODE
PROG_T0	SEGMENT CODE
BITVAR	SEGMENT BIT
STACK	SEGMENT IDATA

RSEG	STACK
	DS	10H	; 16 Bytes Stack

; Обработчик прерывания при перезагрузки МК
CSEG	AT	0h
	jmp	START

; Вектор прерывания от таймера 0
CSEG	AT	0Bh
	jmp	Timer0

; Вектор прерывания от таймера 0 в пользовательской таблице SDK
CSEG	AT	200Bh
	jmp	Timer0

; Подпрограмма обработчика прерывания от таймера 0
RSEG	PROG_T0
Timer0: push	PSW
	djnz	r4,Timer0ret		;20*50мс = 1сек
	mov	r4,#20			;заряжаем на отсчет следующей 1 сек
	setb	IRQ_T0			;взводим флаг
Timer0ret:
	clr	tr0			;остановим таймер
	mov	th0,#high(0ffffh-50000)	;заряжаем таймер на 50000 мкс
	mov	tl0,#low(0ffffh-50000)
	setb	tr0			;запускаем таймер
	pop	PSW
	RETI

; Основная программа
CSEG	AT	2100h
	USING	0
START:	mov	SP,#STACK-1	; инициализация стека
; Настройка таймера 0 как 16-разрядного в режиме автоперезагруз-ки
	mov	tmod,#00000001b		;таймер 0 - 16-битный счетчик
	mov	th0,#high(0ffffh-50000)	;заряжаем таймер на 50000 мкс
	mov	tl0,#low(0ffffh-50000)
	mov	r4, #20			;счетчик прерываний таймера 20*50 = 1 сек
	setb	tr0			;запускаем таймер
	setb	ea			;разрешаем все прерывания
	setb	et0			;разрешаем прерывание от таймера 0

	mov	R1,#SV			;адрес регистра светодиодов
	mov	R7,#0fh			;индекс в таблице, после +1 и and 0fh будет 0
	mov	dptr,#table		;адрес таблицы
	
wait:	jnb	IRQ_T0,wait		;ждем бит
	clr	IRQ_T0			;сбросим его
	
	mov	a,r7			;индекс
	inc	a			;на следующий
	anl	a,#0fh			;оставим 4 мл бита (0-0fh), у нас 16 значений
	mov	r7,a			;сохраним
	
	movc	a,@a+dptr		;читаем из таблицы значение
	call	Wr_Max			;и на светодиоды!

	jmp	wait			;ждем 1 секунду

;данные для индикации на светодиодах
table:	db	00000001b, 00000101b, 00010101b, 01010101b
	db	01010100b, 01010000b, 01000000b, 00000000b
	db	00000010b, 00001010b, 00101010b, 10101010b
	db	10101000b, 10100000b, 10000000b, 00000000b
	 
; Подпрограмма работы с регистрами ПЛИС (Запись в рег. ПЛИС)
RSEG	PROG_WM
; R1 - адрес регистра ПЛИС, ACC - записываемое значение
Wr_Max: mov	R3,DPP			;сохраним старое значение
	mov	DPP,#8h			;перейдем в банк 8
	movx	@R1,A			;пишем в регистр
	mov	DPP,R3			;восстановим банк
	RET

; Переменные в битовой области
RSEG	BITVAR
IRQ_T0:	DBIT	1			;бит для отработки в основном цикле

	END

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 09.12.2011, 01:59
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное