Формирование сигнала с помощью КР 1816ВЕ51

Тема в разделе "WASM.ELECTRONICS", создана пользователем EvilsInterrupt, 22 мар 2007.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    День добрый.

    Дано:
    t1 - длит. лог. "1" ,#30H
    t2 - длит. лог. "0", #20H
    Т - большая пауза

    Надо:
    С помощью команд этого МК сформировать сигнал след. формы:
    t1,t2,t1,t2,t1,t2, T, и т.д.

    Как я понял, для решение этой задачи я обязан сделать примерно такой код:

    Код (Text):
    1. ORG 2000H
    2.     sjmp begin
    3. ORG 2030H
    4. begin:
    5.     mov R1,#30H ; t1
    6.     mov R2,#20H ; t2
    7.     mov R3,#3
    8. repeat:
    9.     mov P1,#80H ; уровень сигнала лог."1"(Umax)
    10. loop1:  djnz R1,loop1
    11.     mov P2,#20H ; уровень сигнала лог."0"(Umin)
    12. loop2:  djnz R2,loop2
    13.     djnz R3,repeat
    14.  
    15. ; ...
    16. ; ПРОШУ ПОМОЧЬ СЮДА ВСТАВИТЬ КУСОК
    17. ; ФОРМИРОВАНИИ БОЛЬШОЙ ПАУЗЫ Т
    18. ; ...
    19.     sjmp begin
    20. END
    Но все же прошу проверить меня и помочь организовать Т.

    Я думаю что сформировать Т можно используя аккумулятор А со значением Т. Но прав ли я?
     
  2. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Для таких целей у КР1816ВЕ51 есть аж два программируемых таймера. Посмотрите здесь http://www.msclub.ce.cctpu.edu.ru/MCU_MPU/8051/start_mk51.htm Использовать циклы для задержек нехорошо.
    ЗЫ По-моему для генерации такого сигнала лучше использовать жёсткую логику, а не гонять микропроц.
     
  3. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Vov4ick
    Я там был, водку и пиво пил, по усам текло, а в рот нихрена не попало! ;)
    Окончательно решение, я сделал таковым:
    Код (Text):
    1. ORG 2000H
    2.     sjmp begin
    3. ORG 2030H
    4. begin:
    5.     mov R1,#30H ; Длит. сигнала лог."1"
    6.     mov R2,#20H ; Длит. сигнала лог."0"
    7.     mov R3,#3   ; Задаем кол-во коротких импульсов
    8. repeat:
    9.     mov P1,#80H ; уровень сигнала лог."1"(Umax)
    10. loop1:  djnz R1,loop1   ; ожидаем когда истечет время в R1
    11.     mov P2,#20H ; уровень сигнала лог."0"(Umin)
    12. loop0:  djnz R2,loop0   ; ожидаем когда истечет время в R2
    13.     djnz R3,repeat  ; проверяем необходимость повтора
    14.             ; очередного импульса
    15.     mov A,#100H ; значение большой паузы Т
    16. loopT:  djnz A,loopT    ; организации большой паузы Т
    17.     sjmp begin  ; возврат в начало программы
    18. END
    Для лабы, это самое то, думаю можно пить чай, ибо пиво пока нельзя, грипп-зараза )))
     
  4. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    Для лабы и просто да, а для перспектив и чтобы мозг далше эволюционизировал в сторону распределения машинного времени, аппаратной "многозадачности" однозначно на прерывании таймера надо + ввести флаги начало/окончание, ветвления(полярность полки), счетчики таймаутов, инициализация...