|
|
|
|
ты хоть в аску вечером зайди. часов в 20 00 |
|
|
electric: а как сделать так как на асме делалось: bsf TRISB,2 bcf TRISC,5 и т.д TRISB2=1; TRISC5=0; Тоже все очень просто, смотри соответствующий файл контроллера *.h |
|
|
ring() { clr_lcd(); temp_lcd=0b11000011; lcd_com(); word5(); temp_lcd=0x20; lcd_char(); word4(); { // effect(); if (RB5!=1); // up(); if (RB4!=1); // no_calls(); { RA2=1; clr_lcd(); temp_lcd=0b11000011; lcd_char(); word9(); temp_lcd=0x20; lcd_char(); word10(); for (i=0; i500; i++); //отрегулировать на 0.7 сек clr_lcd(); temp_lcd=0b11000110; lcd_com(); word11(); temp_lcd=0b10011000; lcd_com(); word15(); temp_lcd=0x3a; lcd_char(); // time(); // функция подщета времени { clr_lcd(); temp_lcd=0b11000011; lcd_com(); word12(); temp_lcd=0x20; lcd_char(); word13(); for (i=0; i500; i++); // отрегулировать на 3 сек clr_lcd(); temp_lcd=0b11000010; lcd_com(); word15(); temp_lcd=0x20; ..... первый вопрос: вот там где кнопка проверяеся как мне сделать чтоб зациклить вектор там? второй вопрос: вот на диспл я отсылаю данные так, сначала в темп потом макрос соответствующей функции, можно ли проще?? lcd_char() { RB1=1; PORTD=temp_lcd; RB0=1; #asm nop #endasm RB0=0; { for (i=0; i100; i++); } return; }
lcd_com() { RB1=0; PORTD=temp_lcd; RB0=1; #asm nop #endasm RB0=0; { for (i=0; i100; i++); } return; } это те макросы. |
|
|
и еще вопрос как мне написат вот такой код?: забэкапить число вычесть из числа 100 пместить результат в рег result проверить бит переноса a++ если нет то в $-3 поместить result в temp вычесть из temp 10 пместить результат в рег result проверить бит переноса b++ если нет то в $-3 поместить result в temp вычесть из temp 1 пместить результат в рег result проверить бит переноса c++ если нет то в $-3 короче прога должна раскидать восьмибитное число по регистрам - сотни , десятки , еденицы
|
|
|
я так делаю: d1 = temp / 100 d2 = temp / 10 Mod 10 d3 = temp Mod 10 правда это в бейсике, но принцип я думаю понятен: восьмибитное число temp раскидывается по декадам, где d1-сотни, d2-десятки, d3-единицы
|
|
|
Мне кажется большим извращением писать программу на ассемблере используя для этого синтаксис языка C. electric: прога должна раскидать восьмибитное число по регистрам - сотни , десятки , еденицы x - заданное число; a,b,c - соответственно сотни, десятки, единицы. В стандартном C это будет выглядеть примерно так: a=0; b=0; c=x; while (c>=100) {a++; c-=100;} while (c>=10) {b++; c-=10;} Можно ещё нахождением остатка от деления, но мне кажется на пике это будет дольше выполняться. |
|
|
спасибо попробую. а вот пост перед этим где число раскидывается подскажите. |
|
|
работает. последовал примеру SAK'а а в чем фишкА? a=0; b=0; c=x; вот a понятно,b понятно ,а с = х зачем? объясните как рабоает прога??я просто не понял. |
|
|
Очень просто работает: в "c" записывается исходное число и пока значение этой переменной больше или равно 100 из него вычитаем 100 и увеличиваем счётчик сотен на единицу при каждом вычитании. Затем также поступаем с десятками. После этого в переменной "c" останутся единицы и с ними уже ничего делать не надо. electric: с = х зачем? Ну так кто просил: забэкапить число Исходная переменная "x" при вычислениях не изменяется, поэтому и не портебуется его "бэкапить" |
|
|
electric сегодня, 10:25 ring() { clr_lcd(); temp_lcd=0b11000011; lcd_com(); word5(); temp_lcd=0x20; lcd_char(); word4(); { // effect(); if (RB5!=1); // up(); if (RB4!=1); // no_calls(); { RA2=1; clr_lcd(); temp_lcd=0b11000011; lcd_char(); word9(); temp_lcd=0x20; lcd_char(); word10(); for (i=0; i500; i++); //отрегулировать на 0.7 сек clr_lcd(); temp_lcd=0b11000110; lcd_com(); word11(); temp_lcd=0b10011000; lcd_com(); word15(); temp_lcd=0x3a; lcd_char(); // time(); // функция подщета времени { clr_lcd(); temp_lcd=0b11000011; lcd_com(); word12(); temp_lcd=0x20; lcd_char(); word13(); for (i=0; i500; i++); // отрегулировать на 3 сек clr_lcd(); temp_lcd=0b11000010; lcd_com(); word15(); temp_lcd=0x20; ..... первый вопрос: вот там где кнопка проверяеся как мне сделать чтоб зациклить вектор там? второй вопрос: вот на диспл я отсылаю данные так, сначала в темп потом макрос соответствующей функции, можно ли проще?? lcd_char() { RB1=1; PORTD=temp_lcd; RB0=1; #asm nop #endasm RB0=0; { for (i=0; i100; i++); } return; } lcd_com() { RB1=0; PORTD=temp_lcd; RB0=1; #asm nop #endasm RB0=0; { for (i=0; i100; i++); } return; } это те макросы. это то обясните плиззз |
|
|
|
|