Desert _Eagl.5

Переключение С Помощью 1 Одной Кнопки, At89C51

5 сообщений в этой теме

Здраствуйте

Немогу понять как реализовать следующий алгоритм: есть кнопка, она замыкает пин контроллера на землю, этот же пин подтянут к + через резистор. Вообщем хочу сделать структуру CASE, которая будет управляться этой кнопкой. Так вот как можно реализовать такое?

Опрос кнопки делаю так

m1:
setb p1.0
mov c, p1.0
jc m2
call функция
jmp m1
m2:
 call функция
 jmp m1

И есть вот такая реализация вышеописанного алгоритма, которая не работает из за того что некоторые функции непонимает Keil c51

 mov	 ax,I
 cmp	 ax,0		 ; проверка на 0
 jne	 not0
 call	 case0
 jmp	 endcase
not0: cmp	 ax,1		 ; проверка на 1
 jne	 not1
 call	 case1
 jmp	 endcase
not1: cmp	 ax,2		 ; проверка на 2
 jne	 not2
 call	 case2
not2:
endcase:

еще более лучший вариант

 mov	 bx,I
 shl	 bx,1	

 jmp	 cs:jump_table[bx]	

jump_table		 dw foo0,foo1,foo2 ; таблица переходов
foo0: call	 case0
 jmp	 endcase
foo1: call	 case1
 jmp	 endcase
foo2: call	 case2
 jmp	 endcase

Изменено пользователем Desert _Eagl.5

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 640

Ну и "намутили"!

Делается одной строчкой:

perekluychenie:
  CPL C  ' С- любой прямоадресуемый бит
RETI

Подпрограмму вызывать по прерыванию по фронту импульса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

дак у меня несколько подпрограмм( до 30 штук), с одной подпрограммой и без прерывания сделать можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Cobban    124

Вполне можно использовать инструкцию jnb:

   jnb   p1.0, m2
  call   функция
  jmp   m1
m2:
  call функция
  jmp   m1

А два последних примера из 1-го поста скорее для x86, а не x51.

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вообщем применил cjne

LoopMain:
m1:
setb p1.0
mov c, p1.0
jc m2
inc r4

q:
cjne r4, #1, w
тут код какойто
jmp start

w:
cjne r4, #2, t
тут код какойто
jmp start
t:
.
.
.

qqq:
cjne r4, #254, ee
тут код какойто
jmp start

ee:
jmp start
m2:

jmp m1
sjmp LoopMain

в итоге имеем case на 255 ячеек...

всем спасибо за участие

Изменено пользователем Desert _Eagl.5

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • Самая частая неисправность в подобных ушах - обрыв проводников в кабеле, обычно в районе ввода в наушник, у регулятора громкости или у джека. Без тестера или хоть простейшей "прозвонки" нечего тут делать.
    • по просьбам телезрителей  , возвращаются в сборку платы Буфер-лимитера + стабы УНА для трешки... НО! делать буду только под заказ. + платы БП (стабы) на Буфер-лимитер  + будут по запросу рассмотрены варианты продажи нижних по снимку плат дискретных ВЫХЛОПОВ  ДЛЯ двухчиповых ЦАП ( только не токовых выходов!)
    • Яхты, виллы, дорогие автомобили...
      А у тебя какой календарь висит в туалете?
    • Расслабься, Валера, меня не интересуют твои игры с интерфейсом форума. Можешь игнорить кого угодно, я слишком хорошо знаю таких как ты клованов. Читают, млять.... Да и не для тебя сие пишу, есличо. По поводу Валериных фотонных пучков прямых. Дело даже не в точности его мультиметров. Если ВАХ диода пересекаются, то что из этого следует? Да ничего кроме ошибочности исходной модели рассмотрения. Поэтому нет никакого интереса копаться в глупом кухонном эксперименте с биметаллами.   Что толку из такого сообщения. Сейчас начни выяснять, что персонаж понимает под теплопередачей и выяснится, что ВСЕ ЧТО УГОДНО.  Приведи в пример ЛБВ - у него электромагнитная волна в замедляющей системе превратиться в эту теплопередачу. Приведи в пример усилитель в криотермостате, где кристалл полевого арсенид-галлиевого транзистора находится при температуре жидкого азота, но не теряет усиления - выяснится, что электрическое поле затвора - это тоже теплопередача. Я же говорю, - шулер. У него теплопередача - это не электромагнитное излучение определенного спектрального диапазона, а какое то свое понятие. Причем произвольно изменяемое по обстоятельствам.  
    • Если по 2 в плече смело можно поднимать до 160 ампериев. Обратите внимание на сигналы с драйверов, ну и охлаждение.
    • У меня в чёрном списке 4 члена форума. Verrick Kotosob my504 Yon