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

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


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

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

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

Асмик Гаряка
Статус: Советник
Рейтинг: 11015
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4028
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 1791
∙ повысить рейтинг »

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

Номер выпуска:1535
Дата выхода:08.02.2013, 10:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:65 / 22
Вопросов / ответов:1 / 1

Консультация # 187148: Здравствуйте! У меня возникли сложности с таким вопросом: Можете мне помочь написать прогу Microsoft Visual C++ 6? Блок схема есть Нужно типа написать программные коды .Мне это очень интересно.Поможете? ...


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

Здравствуйте! У меня возникли сложности с таким вопросом: Можете мне помочь написать прогу Microsoft Visual C++ 6?

Блок схема есть


Нужно типа написать программные коды .Мне это очень интересно.Поможете?

Дата отправки: 05.02.2013, 09:27
Вопрос задал: Питулин Александр Михайлович (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


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

Здравствуйте, Питулин Александр Михайлович!
В связи с пожеланиями, программа на ассемблере 86, под tasm, формат com

PinD = rab изменено на rab = PinD. Так будет правильнее...

Если что непонятно, спрашивайте, отвечу на все Ваши вопросы...

Код :
	.model	tiny

;Будем считать, что PORTD - это порт 400h, а PORTB - 500h
PORTD	equ	400h
PORTB	equ	500h

	.code
	.286
	.startup
				;инициализация
	mov	cl, 0		;Ugol = 0
	mov	dx, PORTD	;начинаем работать с портом D
wait_pd5_0:
	in	al, dx		;считываем состояние КН3
	test	al, 00100000b	;PD.5 = 0?
	jnz	wait_pd5_0	;ждем 0

	mov	dx, PORTB
	in	al, dx		;считываем PB
	test	al, 00000001b	;проверяем бит 0
	jz	get_rab		;=0 - считываем rab

	mov	dx, PORTD	;!=0
wait_pd1_0:
	in	al, dx		;считываем PD
	test	al, 00000010b	;проверяем PD.1
	jnz	wait_pd1_0	;ждем 0

	in	al, dx
	and	al, 11100111b	;PD.3=0, PD.4=0
	out	dx, al
	jmp	get_pb0		;на считывание PB.0

get_rab:			;считываем rab
	mov	dx, PORTD	;с порта PD
wait_rab:
	in	al, dx		;rab = PORTD
	shr	al, 2		;rab = rab >> 2
	test	al, al		;rab == 0 ?
	jz	wait_rab	;ждем не 0

	mov	ah, al		;сохраним ah=rab

wait_pd0_0:
	in	al, dx		;считываем PD
	test	al, 00000001b	;проверяем PD.0
	jnz	wait_pd0_0	;ждем 0

	in	al, dx
	and	al, 11101011b	;PD.2=0, PD.4=0
	out	dx, al

	mov	dx, PORTB	;PB
wait_pb1_0:			
	in	al, dx		;считываем PB.1
	test	al, 00000010b	;ждем 0
	jnz	wait_pb1_0

	inc	cl		;Ugol = Ugol + 1

	cmp	cl, ah		;Ugol < rab
	jae	pd2_off		;нет - на выключение pd.2

wait_pb1_1:
	in	al, dx		;считываем PB.1
	test	al, 00000010b	;ждем  1
	jz	wait_pb1_1
	jmp	wait_pb1_0	;на ожидание PB.1 = 0

pd2_off:			;выключение PD.2
	mov	dx, PORTD
	in	al, dx		;считываем PD
	or	al, 00000100b	;PD.2 = 1
	out	dx, al
	
wait_pd1_0_2:
	in	al, dx		;считываем PD.1
	test	al, 00000010b	;ждем 0
	jnz	wait_pd1_0_2

	and	al, 11110111b	;включаем PD.3 = 0
	out	dx, al

get_pb0:
	mov	dx, PORTB
wait_pb0_0:
	in	al, dx		;считываем PB.0
	test	al, 00000001b	;ждем 0
	jnz	wait_pb0_0

	mov	dx, PORTD	;включаем PD.3 = 1, PD.4 = 1
	in	al, dx
	or	al, 00001100b
	out	dx, al

	jmp	wait_pd5_0	;на основной цикл (считывание состояния КН3, т.е. PD.5) 

	end

Версия программы, когда порты AVR отображаются на ячейки памяти.
Так удобнее отлаживать алгоритм работы...
Код :
	.model	tiny

	.data
PORTD	db	?
PORTB	db	?

	.code
	.286
	.startup
				;инициализация
	mov	cl, 0		;Ugol = 0
wait_pd5_0:
	mov	al, PORTD	;считываем состояние КН3
	test	al, 00100000b	;PD.5 = 0?
	jnz	wait_pd5_0	;ждем 0

	mov	al, PORTB	;считываем PB
	test	al, 00000001b	;проверяем бит 0
	jz	get_rab		;=0 - считываем rab

				;!=0
wait_pd1_0:
	mov	al, PORTD	;считываем PD
	test	al, 00000010b	;проверяем PD.1
	jnz	wait_pd1_0	;ждем 0

	mov	al, PORTD
	and	al, 11100111b	;PD.3=0, PD.4=0
	mov	PORTD, al
	jmp	get_pb0		;на считывание PB.0

get_rab:			;считываем rab
	mov	al, PORTD	;rab = PORTD
	shr	al, 2		;rab = rab >> 2
	test	al, al		;rab == 0 ?
	jz	get_rab		;ждем не 0

	mov	ah, al		;сохраним ah=rab

wait_pd0_0:
	mov	al, PORTD	;считываем PD
	test	al, 00000001b	;проверяем PD.0
	jnz	wait_pd0_0	;ждем 0

	mov	al, PORTD
	and	al, 11101011b	;PD.2=0, PD.4=0
	mov	PORTD, al

wait_pb1_0:			
	mov	al, PORTB	;считываем PB.1
	test	al, 00000010b	;ждем 0
	jnz	wait_pb1_0

	inc	cl		;Ugol = Ugol + 1

	cmp	cl, ah		;Ugol < rab
	jae	pd2_off		;нет - на выключение pd.2

wait_pb1_1:
	mov	al, PORTB	;считываем PB.1
	test	al, 00000010b	;ждем  1
	jz	wait_pb1_1
	jmp	wait_pb1_0	;на ожидание PB.1 = 0

pd2_off:			;выключение PD.2
	mov	al, PORTD	;считываем PD
	or	al, 00000100b	;PD.2 = 1
	mov	PORTD, al
	
wait_pd1_0_2:
	mov	al, PORTD	;считываем PD.1
	test	al, 00000010b	;ждем 0
	jnz	wait_pd1_0_2

	and	al, 11110111b	;включаем PD.3 = 0
	mov	PORTD, al

get_pb0:
	mov	al, PORTB	;считываем PB.0
	test	al, 00000001b	;ждем 0
	jnz	get_pb0

	mov	al, PORTD
	or	al, 00001100b	;включаем PD.3 = 1, PD.4 = 1
	mov	PORTD, al

	jmp	wait_pd5_0	;на основной цикл (считывание состояния КН3, т.е. PD.5) 

	end

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

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


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

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

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



В избранное