реклама на сайте
подробности

 
 
5 страниц V  « < 3 4 5  
Reply to this topicStart new topic
> Программа для микроконтроллера, Как работает код
Палыч
сообщение Jun 18 2010, 11:42
Сообщение #61


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Aleksandr_KPI @ Jun 18 2010, 15:01) *
зачем вводить два ключа,что это дает?
Как было сказано выше: создание высокого уровня на ноге при Open Drain осуществяется с помощью pullup с "большим" сопративлением. Это приводит к тому, что скорость нарастания уровня сигнала может оказаться недостаточной для некоторых случаев применения МК. Чтобы спасти ситуацию и предусмотрели возможность переключения на Push-Pull (второй ключ, обычно, просто "закорачивает" pullup).
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Jun 18 2010, 11:44
Сообщение #62


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Тоесть скорость выдачи данных через порт? А метод чтения и записи порта остается прежним?


Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 18 2010, 12:42
Сообщение #63


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Aleksandr_KPI @ Jun 18 2010, 15:44) *
А метод чтения и записи порта остается прежним?
Если под "метод чтения и записи" Вы подразумеваете "те же порты", то - да. Но, с чтением при Push-Pull, наверное ничего не выйдет (разве в МК51 есть регистр направления информации для параллельных портов?), т.е. то что выдали - то и считаете ("пересилить" высокий уровень сигнала на ноге внешним сигналом с низким уровнем без потери работоспособности выхода МК не удастся). Как я себе понимаю: Push-Pull включают только при работе порта на вывод.
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Jul 23 2010, 10:43
Сообщение #64


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Разбираю работу примера программы из пакета Silicon Laboratories IDE. Наткнулся на такой отрывок кода:

Код
; Set P1.6 (LED) as digital output in push-pull mode.  
               orl   P1MDIN, #40h    
               orl   P1MDOUT,#40h


Команда orl P1MDOUT,#40h настраивает порт в режим выхода, а зачем его настраивают на вход: команда orl P1MDIN, #40h.

Весь код:

Код
$NOMOD51
$include (c8051f020.inc)              ; Include register definition file.


                GREEN_LED      equ   P1.6           ; Port I/O pin connected to sound generator.    

               cseg AT 0
               ljmp Main          ; Locate a jump to the start of code at
                                      ; the reset vector.


Blink          segment  CODE

               rseg     Blink         ; Switch to this code segment.
               using    0             ; Specify register bank for the following
                                      ; program code.

Main:         ; Disable the WDT. (IRQs not enabled at this point.)
              ; If interrupts were enabled, we would need to explicitly disable
              ; them so that the 2nd move to WDTCN occurs no more than four clock
              ; cycles after the first move to WDTCN.

               mov   WDTCN, #0DEh
               mov   WDTCN, #0ADh

  ; Enable the Port I/O Crossbar
               mov   XBR2, #40h

  ; Set P1.6 (LED) as digital output in push-pull mode.  
               orl   P1MDIN, #40h    
               orl   P1MDOUT,#40h

              ; Initialize LED to OFF
               clr   GREEN_LED

         ; Simple delay loop.
Loop2:         mov   R7, #03h            
Loop1:         mov   R6, #00h
Loop0:         mov   R5, #00h
               djnz  R5, $
               djnz  R6, Loop0
               djnz  R7, Loop1
               cpl   GREEN_LED        ; Toggle LED.
               jmp   Loop2
END
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jul 23 2010, 15:20
Сообщение #65


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Aleksandr_KPI @ Jul 23 2010, 14:43) *
Команда orl P1MDOUT,#40h настраивает порт в режим выхода, а зачем его настраивают на вход: команда orl P1MDIN, #40h.

Чтобы в паре с верхним ключем работал Pull-up
Go to the top of the page
 
+Quote Post
Aleksandr_KPI
сообщение Jul 26 2010, 09:41
Сообщение #66


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032



Иными словами 6 вывод порта 1 настраивается в режим выхода Push-Pull, а второй нижний ключ подтягивается к единице через резистор Pull-up?

На основе этой программы написал свою.

Код
$include (c8051f020.inc)              

Port_P3       EQU       0B0H
PROGRAM    BIT      Port_P3.0      
DONE          BIT      Port_P3.1
BIPP           BIT      Port_P3.2              
  
TMP_CNT   equ      030H
BYTE_CNT  equ      031H

               cseg AT 0
               ljmp Main              ; Locate a jump to the start of code at
                                      ; the reset vector.


Blink          segment  CODE
               rseg     Blink         ; Switch to this code segment.
               using    0             ; Specify register bank for the following
                                      ; program code.
Main:          

               mov   WDTCN, #0DEh
               mov   WDTCN, #0ADh

              ; Enable the Port I/O Crossbar
               mov   XBR2, #40h

                
               orl   P3MDIN, #07h    
               orl   P3MDOUT,#05h

               CLR BIPP
                  
INIT_XILINX:
        
               JB      DONE,DONE_OK
               CLR     PROGRAM
               CALL    DELL_10MS
               SETB    PROGRAM
               CALL    DELL_100MS
               CALL    DELL_100MS
               CALL    DELL_100MS
               CALL    DELL_100MS
               JB      DONE,DONE_OK
               MOV     BYTE_CNT,#100
IXL_LOOP:
               CALL    DELL_100MS
               JB      DONE,DONE_OK
               DJNZ    BYTE_CNT,IXL_LOOP
               JMP     INIT_XILINX
DONE_OK:
               CALL    DELL_100MS
                              
               RET


DELL_100MS:
        CALL    DELL_10MS
        CALL    DELL_10MS
        CALL    DELL_10MS
        CALL    DELL_10MS
        CALL    DELL_10MS
        CALL    DELL_10MS
        CALL    DELL_10MS
        CALL    DELL_10MS
        CALL    DELL_10MS
DELL_10MS:
        CALL    DELL_1MS
        CALL    DELL_1MS
        CALL    DELL_1MS
        CALL    DELL_1MS
        CALL    DELL_1MS
        CALL    DELL_1MS
        CALL    DELL_1MS
        CALL    DELL_1MS
        CALL    DELL_1MS
DELL_1MS:
        
        MOV     TMP_CNT,#250
        DJNZ    TMP_CNT,$
        MOV     TMP_CNT,#250
        DJNZ    TMP_CNT,$
        RET
        
END


Задача программы: проверять состояние порта P3.1 и управлять сигналом разрешения начала программирования ПЛИС (порт P3.0). Правильно ли я настроил порты? Хочу прошить микроконтроллер и не охота его случайно спалить.
Go to the top of the page
 
+Quote Post
Mastercutor
сообщение Jul 26 2010, 12:01
Сообщение #67





Группа: Новичок
Сообщений: 2
Регистрация: 9-10-09
Пользователь №: 52 837



Цитата(Aleksandr_KPI @ Jul 23 2010, 13:43) *
Команда orl P1MDOUT,#40h настраивает порт в режим выхода, а зачем его настраивают на вход: команда orl P1MDIN, #40h.


У этих контроллеров биты порта могут работать как в аналоговом режиме, так и в цифровом.
Push-Pull работает только в цифровом. Поэтому, сначала устанавливают режим работы - цифровой, а затем включают Пуш-Пул.
См. даташит.

Цитата(Aleksandr_KPI @ Jul 26 2010, 12:41) *
Иными словами 6 вывод порта 1 настраивается в режим выхода Push-Pull, а второй нижний ключ подтягивается к единице через резистор Pull-up?

На основе этой программы написал свою...


Программа должна глючить.

Первое, что бросилось в глаза - в метке DONE_OK, после CALL DELL_100MS, стоит RET. Выполнив эту команду, контроллер уйдет в "свободное плавание". На время отладки тут должен быть JMP $ или еще что.


И еще.

"Минус" программы - нет выхода из цикла, если ПЛИС так и не будет загружена (например, какая-либо аппаратная неисправность).
Было бы неплохо сделать оповещение оператора в случае НЕЗАГРУЗКИ ПЛИС (даже самому потом проще будет в глюках разбираться).

Сообщение отредактировал Mastercutor - Jul 26 2010, 11:46
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jul 26 2010, 14:29
Сообщение #68


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Aleksandr_KPI @ Jul 26 2010, 13:41) *
Иными словами 6 вывод порта 1 настраивается в режим выхода Push-Pull, а второй нижний ключ подтягивается к единице через резистор Pull-up?


Цитата(Mastercutor @ Jul 26 2010, 16:01) *
У этих контроллеров биты порта могут работать как в аналоговом режиме, так и в цифровом.
Push-Pull работает только в цифровом. Поэтому, сначала устанавливают режим работы - цифровой, а затем включают Пуш-Пул.
См. даташит.

Смотрим DS:
Регистр P1MDIN при записи в его разряды единицы переводит в режим "Цифровой ввод" соответствующую ногу порта Р1. На вывод этот регистр не влияет (за исключением подключения Pull-up - если не выбран "Цифровой ввод": Pull-up остаётся отключеным). В режиме "Цифровой ввод" к ноге может быть подключен Pull-up, но - не обязательно, есть ещё ряд условий для его подключения, например, XBR2.7. В режиме Push-Pull подключение Pull-up производится только если открыт верхний ключ (если открыт нижний ключ - Pull-up - отключен - см. рис.17.1).
Go to the top of the page
 
+Quote Post
Mastercutor
сообщение Jul 27 2010, 08:11
Сообщение #69





Группа: Новичок
Сообщений: 2
Регистрация: 9-10-09
Пользователь №: 52 837



Цитата(Палыч @ Jul 26 2010, 17:29) *
Смотрим DS:
Регистр P1MDIN при записи в его разряды единицы переводит в режим "Цифровой ввод" соответствующую ногу порта Р1. На вывод этот регистр не влияет (за исключением подключения Pull-up - если не выбран "Цифровой ввод": Pull-up остаётся отключеным). В режиме "Цифровой ввод" к ноге может быть подключен Pull-up, но - не обязательно, есть ещё ряд условий для его подключения, например, XBR2.7. В режиме Push-Pull подключение Pull-up производится только если открыт верхний ключ (если открыт нижний ключ - Pull-up - отключен - см. рис.17.1).


Все верно. P1MDIN определяет режим ввода порта P1 и кроме того управлет подтяжкой.

Перевод бита этого регистра в "1" (цифровой вход) необходим для чтения состояния выхода. Если бит будет находится в "0" (аналоговый вход), то при чтении состояния выхода всегда будет возвращаться "0".

XBR2.7 - глобальное разрешение/запрещение подтяжек (Pull-up).

Сообщение отредактировал Mastercutor - Jul 27 2010, 08:13
Go to the top of the page
 
+Quote Post

5 страниц V  « < 3 4 5
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 20:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01453 секунд с 7
ELECTRONIX ©2004-2016