Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 641 • Страница 29 из 33<  1 ... 26  27  28  29  30  31  32  33  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 25.11.2007
Привет!!! Вот и я вернулся - сессия то близится :weep:
Цитата:
1010202
Простой вариант:
- Последовательность нот и интервалы для каждой ноты - во таблицу (во флешке можно расположить или EEPROM, а можно и принимать по UART);
- По данным из таблицы программируются 2 таймера, один из которых либо непосредственно занимается формированием нужной частоты, либо обеспечивает прерывание для этого (тут надо документацию детально почитать), а второй - отсчитывает интервал.
Более сложный вариант - можно поизвращаться с ЦАПами :).
P.S. Чтение документации/написание кода меня как-то не сильно вдохновляет :).


Вот что смогли написать, посмотрите пожалуйста:
Код:
include (aduc 812.def)
zum EQU P3.2
org 0000h
Start:
mov R0, #2500000
A1: mov R1, #50000000
B1: setb zum
djnz R!, B1
clr zum
djnz R0, A1
mov R0, #50000000

A2: mov R1, #50000000
B2: setb zum
djnz R1, B2
clr zum
djnz R0, A2
mov R0, #250000


И в итоге чисто даже на слух проигрывает в бесконечном цикле одну ноту... :(
Есть подсказки :?:

_________________
Huananzhi X99-F8, Xeon E5-2678v3, Tanbassh DDR4 4x16Gb, M2.NVMe Goldenfir 256Gb, ZOTAC GTX 1080Ti, DeepCool DN-650



Партнер
 

Member
Статус: Не в сети
Регистрация: 04.10.2004
1010202 писал(а):
Есть подсказки
Загляните для начала в систему команд x51 :). Может тогда будет понятно, что числа 2500000 (50000000) плохо совмещаются с обычными регистрами :).


 

Member
Статус: Не в сети
Регистрация: 25.11.2007
Цитата:
Загляните для начала в систему команд x51 :). Может тогда будет понятно, что числа 2500000 (50000000) плохо совмещаются с обычными регистрами :).

Понял. А как с ноты на ноту переходить не подскажите?

_________________
Huananzhi X99-F8, Xeon E5-2678v3, Tanbassh DDR4 4x16Gb, M2.NVMe Goldenfir 256Gb, ZOTAC GTX 1080Ti, DeepCool DN-650


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
1010202 писал(а):
как с ноты на ноту переходить не подскажите?

maco писал(а):
Последовательность нот и интервалы для каждой ноты - во таблицу
Написать цикл, который будет обрабатывать элементы соответствующей таблицы :).


 

Member
Статус: Не в сети
Регистрация: 15.01.2010
Откуда: Запорожье
привет всем.
вобщем препод подумал что мы гении ассемблера и можем писать на нем любую программу.
цель программы сделать загрузчик, в этом же загрузчике записать код программ(они есть), после чего запустить с дискеты и показать как они работают.
проблема в том, что не пойму в чем)
вот код загрузчика:
Код:
#MAKE_BOOT#                           
           INCLUDE 'EMU8086.INC'     
           ORG    7C00H               
           JMP    START               
MSG        DB     'WELCOME TO MICRO-OS', 13, 10,
           DB     'LOADING...', 0
START:
           MOV    AX, 07C0H           
           MOV    SS, AX
           MOV    SP, 03FEH           
           PUSH   CS                 
           POP    DS
           MOV    AH, 00H             
           MOV    AL, 03H
           INT    10H
           LEA    SI, MSG             
           CALL   PRINT_STRING

           MOV    DL, 0               
           MOV    AH, 02H             
           MOV    AL, 10             
           MOV    CH, 0               
           MOV    CL, 2               
           MOV    DH, 0               
           MOV    BX, 0800H         
           MOV    ES, BX
           MOV    BX, 0
           INT    13H               
           JMP    0800H:0000H       
           DEFINE_PRINT_STRING
           END

программы будут вида такого:
Код:
ORG    100H
           LEA    SI, MSG             
           CALL   PRINT_ME
           RET                       

PRINT_ME   PROC
NEXT_CHAR:
           CMP  B.[SI], 0             
           JE   STOP                 
           MOV  AL, [SI]             
           MOV  AH, 0EH               
           INT  10H                   
           ADD  SI, 1                 
           JMP  NEXT_CHAR             
STOP:
           RET                       
PRINT_ME   ENDP
MSG        DB   'HELLO WORLD!', 0     
END


все это происходит в среде emu8086. надеюсь на вашу помощь.

_________________
Человек создан для счастья, как рыба для полета.


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
в конце первого блока (512 байт) обязательно должны стоять байты 0x55 0xAA, иначе сектор не будет считаться загрузочным
http://en.wikipedia.org/wiki/Boot_sector


 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
Igorzp писал(а):
JMP 0800H:0000H

Почему 0000H?, ведь загружаемая прога работает со смещением 100h (COM-формат). Если бы в загружаемой было org 0h, тогда да...


 

Member
Статус: Не в сети
Регистрация: 13.06.2007
Откуда: UK/Glasgow
Фото: 0
Кто может объяснить что дают команды in и out? Для чего они нужны и как их применять?

_________________
-=AMD POWER FAN CLUB=-


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
SwiPTorrent
это ввод-вывод через порты. Необходимо для работы с у-вами (LPT, COM, USB и пр.). Нужно только под DOS, т.к. Windows/Linux не дают прямого доступа к оборудованию. В них нужно писать спец. драйвер, в котором эти команды можно использовать, т.к. драйверу предоставляется необходимый уровень привилегий. А прикладное ПО должно вызывать соответствующие функции драйвера.

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
ты забыл пояснить, что порты - это не физические порты:) это средство общения с устройствами, которые подключены к серверному/южному мосту через шину pci - в том числе и видеокарты, и сетевые, и даже сами мосты


 

Member
Статус: Не в сети
Регистрация: 13.06.2007
Откуда: UK/Glasgow
Фото: 0
Вот ещё вопросик
Видео режим 0A000h - это просто тупо поточечный вывод через функции, а 0B800h - прямой вывод на видеоадаптер? Я прав?

_________________
-=AMD POWER FAN CLUB=-


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
SwiPTorrent писал(а):
Видео режим 0A000h - это просто тупо поточечный вывод через функции, а 0B800h - прямой вывод на видеоадаптер?
Это не видеорежимы, а адреса :).
Почитайте внимательно о работе видеоадаптера.


 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
to SwiPTorrent
У каждого видеорежима свои адреса видеобуфера. При "прямой" записи в видео буфер запись производится в зависимости от режима.
графика - поточечно, поточечно в нескольких битовых областях.
текстовые режимы - парами цвет/символ.
Для каждого режима нужно изучать организацию видеобуффера.
Справочников и инфы гугль выдаст море...


 

Member
Статус: Не в сети
Регистрация: 13.06.2007
Откуда: UK/Glasgow
Фото: 0
Кто подскажет, как рисовать в режиме 12h (640x480x16)? Я освоил 11h и 13h, а про этот инфу не могу найти

_________________
-=AMD POWER FAN CLUB=-


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
Функция 0Ch не работает :)?
Или лень привести неработающий кусок программы с прямым выводом?


 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
SwiPTorrent писал(а):
Кто подскажет, как рисовать в режиме 12h (640x480x16)? Я освоил 11h и 13h, а про этот инфу не могу найти

Не помню чё за 11h, но 13h это 320*240*8bit цвет-> тупо пишем в память индексы палитры, как в двумерный массив.
12h этот уже юзает битовые плоскости для формирования 4-битного цвета, и расположены они в разных кусках памяти.
С такими режимами лучше пользовать bios-функции рисования (как уже было подсказано) - меньше гемора IMXO

З.Ы. освежил память режим 11h- "640х480 монохромный графический, только VGA". Одна битовая плоскость, один бит на цвет (проблем нет с переключением плоскостей ;) )


 

Member
Статус: Не в сети
Регистрация: 13.06.2007
Откуда: UK/Glasgow
Фото: 0
Всё спасибо, разобрался. Хотя слышал, что 0Ch - крайне медленная вещь..

_________________
-=AMD POWER FAN CLUB=-


 

member+
Статус: Не в сети
Регистрация: 16.01.2004
Откуда: Estonia,Tallinn
SwiPTorrent писал(а):
слышал, что 0Ch - крайне медленная вещь

Так и есть, если его использует профи, но 99% людей не смогут написать более быструю альтернативу и в их случае это будет наоборот быстрая вещь

_________________
X99-TF/E5-2678v3+Evo212/2x16Gb-DDR4-Gloway-TYPE-a@2133-12-13-13-26/GTX1070TI/KINGSTON-SNV2S1000G


 

Member
Статус: Не в сети
Регистрация: 13.06.2007
Откуда: UK/Glasgow
Фото: 0
Вообщем, нужно нарисовать квадрат, который можно было бы передвигать клавишами WASD. Cделать нужно в режиме 640х480х16.
Вообщем принцип такой: Рисуем сначала квадрат, потом ждём клавишу, и если нажата, допустим 'D', то полностью закрасить квадрат чёрным цветом и перерисовать его изначальным цветом, но уже на 1 пиксель правее. Я с этим заданием справился, но всё жутко тормозит и видна перерисовка (где-то секунду идёт закраска чёрным и смещение на 1 пиксель). Как можно это исправить?

_________________
-=AMD POWER FAN CLUB=-


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
SwiPTorrent писал(а):
то полностью закрасить квадрат чёрным цветом и перерисовать его изначальным цветом, но уже на 1 пиксель правее.
Весь мир насилья мы разрушим
До основания
А затем — мы наш
Мы новый мир построим

Две линию толщиной в один пиксель автору явно тяжелее перерисовать :D.

Страницы.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 641 • Страница 29 из 33<  1 ... 26  27  28  29  30  31  32  33  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  

Лаборатория














Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan