Консультация № 187148
05.02.2013, 09:27
134.80 руб.
05.02.2013, 14:26
0 23 1
Здравствуйте! У меня возникли сложности с таким вопросом: Можете мне помочь написать прогу Microsoft Visual C++ 6?

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


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

Обсуждение

Неизвестный
05.02.2013, 12:25
общий
05.02.2013, 12:26
>> Microsoft Visual C++ 6
тут точно не пойдет
Это алгоритм управления каким-то двигателем с энкодером (поворот на заданный угол), причем весьма странный.
И судя по "переменным" подразумевается какой-то AVR а может и 51, так как включаем низким уровнем...
Схему бы посмотреть.
давно
Посетитель
7438
7205
05.02.2013, 12:26
общий
Значительно лучше
Еще бы пару слов, о чем идет речь?
Что такое вот эти KH3, PD.x, PB.x, rab, ugol ?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
05.02.2013, 12:29
общий
Согласен с vladisslav-ом, похоже на AVR...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
05.02.2013, 12:32
общий
Считываем PinD = rab, как это? Должно быть наоборот, rab = PinD
Разве нет?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
05.02.2013, 12:35
общий
PinD - явно не 51 AVR однозначно
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
05.02.2013, 13:10
общий
Впрочем, может быть, Вы хотите смоделировать работу алгоритма на MVC++ 6?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
05.02.2013, 13:40
общий
Я [q=7438][/q] Да это АVR . Да я хочу смоделировать работу алгоритма на MVC++ .Испавьте пожалуйста вместо Microsoft Visual C++ 6 на MVC++ 6. Меня попросили. Я тонкости AVR плохо знаю. Если поможете,буду очень благодарен. Ассемблер подойдет?
давно
Посетитель
7438
7205
05.02.2013, 14:02
общий
Так Вам на MVC++ 6 или на Ассемблере?
Впрочем, можно сделать по-разному: и на AVR C, AVR asm, MVC++ 6, на асме 86
Как скажете
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
05.02.2013, 14:14
общий
[q=7438][/q] Широкий выбор На ассеблере.
давно
Посетитель
7438
7205
05.02.2013, 14:25
общий
Ну тогда я переношу вопрос в рассылку по Ассемблеру
И делаем программку на Асемблере 86 (Дос, tasm)
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
05.02.2013, 15:13
общий
это ответ
Здравствуйте, Питулин Александр Михайлович!
В связи с пожеланиями, программа на ассемблере 86, под tasm, формат com

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

Если что непонятно, спрашивайте, отвечу на все Ваши вопросы...
[code h=200]
.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[/code]
Версия программы, когда порты AVR отображаются на ячейки памяти.
Так удобнее отлаживать алгоритм работы...
[code h=200]
.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[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
05.02.2013, 15:19
общий
Хм, я вот подумал, что было бы удобнее считать портами ячейки памяти...
Чтобы можно было их менять... Если что, скажите, переделаю
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
05.02.2013, 15:38
общий
Я добавил версию программы, где порты AVR считаются ячейками памяти.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
05.02.2013, 15:43
общий
[q=7438][/q]Хорошо,приду домой после работы .Попробую разобраться.Если мне будет непонятно,обязательно спрошу.Спасибо
Неизвестный
07.02.2013, 11:43
общий
[q=7438][/q] У меня не устанавливается прога Borland Turbo Assembler . Из за не совместимости с 64 разрядной версией Windows.
давно
Посетитель
7438
7205
07.02.2013, 11:50
общий
Лады, как переделать? Под masm32 ? Или таки под MVC++6 ?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
07.02.2013, 13:42
общий
[q=7438][/q] давайте под MVC++6.
давно
Посетитель
7438
7205
07.02.2013, 14:23
общий
Прошу...
[code h=200]unsigned char PORTD;
unsigned char PORTB;
unsigned char Ugol;


int main(void)
{
unsigned char rab;
unsigned char a;

//инициализация
Ugol = 0; //проинициируем угол
PORTD = 0xff; //все выключено
PORTB = 0xff;

while (1) //основной бесконечный цикл
{
do //считываем состояние КН3
{
a = PORTD;
}while (a & 0x20); //ждем PD.5=0

a = PORTB; //считываем PB.0
if (a & 0x01) //PB.0 = 0 ?
{ //нет
do
{
a = PORTD; //считываем PD.1
}while (a & 0x02); //ждем PD.1= 0
PORTD &= 0xe7; //PD.3 = 0, PD.4 = 0
}
else //PB.0 = 0
{
do
{
rab = PORTD; //считываем rab = PIND
rab >>= 2; //rab = rab>>2
}while (rab == 0); //ждем rab != 0 (т.е. PD7-PD2 не 0)

do
{
a = PORTD; //считываем PD.0
}while (a & 0x01); //ждем PD.0 = 0

PORTD &= 0xeb; //PD.2 = 0, PD.4 = 0

while(1) //бесконечный цикл, пока Ugol < rab
{
do
{
a = PORTB; //считываем PB.1
}while (a & 0x02); //ждем PB.1 = 0

Ugol++; //Ugol = Ugol + 1

if (Ugol < rab) //проверяем
{
do
{
a = PORTB; //считываем PB.1
}while (0 == (a & 0x02)); //ждем PB.1 = 1
//и на повтор
}
else
break; //если Ugol >= rab, то выходим из цикла while(1)
}

PORTD |= 0x04; //выключаем PD.2

do
{
a = PORTD; //считываем PD.1
}while (a & 0x02); //ждем PD.1 = 0

PORTD &= 0xf7; //включаем PD.3
}

do
{
a = PORTB; //считываем PB.0
}while (a & 0x01); //ждем PB.0 = 0

PORTD |= 0x18; //выключаем PD.3, PD.4
} //на бесконечный основной цикл

return(0);
}[/code]
Кстати, когда пишите сообщение, то выбирайте адресата не как цитировать, а из списка "Кому:" .
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
08.02.2013, 09:16
общий
Адресаты:
К сожалению, опять наткнулся на проблемы . Прогу MVC++6 не могу найти в интернете
давно
Посетитель
7438
7205
08.02.2013, 11:45
общий
Да можно использовать любую среду, хоть студию от MS, хоть любую другую...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
09.02.2013, 21:26
общий
Адресаты:
установил .. Посмотрел.Никаких результатов..Просто черный экран
давно
Посетитель
7438
7205
10.02.2013, 03:17
общий
Смотреть-то надо под отладчиком...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
14.03.2013, 09:16
общий
Адресаты:
вРОДЕ НИ ВЫДАЕТ НИКАКИЕ ОШИБКИ. Можь подскажите как программа работает, я в электронике полный лузер . что нужно типа вводить какое то значение,цифры?
Форма ответа