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

 
 
> C8051F320, Отладочный набор
evsx1
сообщение Nov 26 2010, 11:24
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 1-11-10
Пользователь №: 60 586



Есть отладочный набор C8051F32X DEVELOPMENT KIT ,у сего девайся на порт 2 подключены на пин0 и пин1 две кнопочки и на пины 2,3 светодиоды.имею простую задачку зажигать диод при нажатии(компилятор IAR)
Код
/-----------------------------------------------------------------------------
#include <ioC8051f320.h>                    // SFR declarations
#include <intrinsics.h>
//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F32x
//-----------------------------------------------------------------------------

__sfr __no_init volatile unsigned short TMR2RL   @ 0xCA;                    // Timer2 reload value
__sfr __no_init volatile unsigned short TMR2     @ 0xCC;                    // Timer2 counter

//-----------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------

#define SYSCLK       24500000 / 8         // SYSCLK frequency in Hz

#define LED P2_bit.P22                          // LED='1' means ON
#define SW2 P2_bit.P0                          // SW2='0' means switch pressed

//-----------------------------------------------------------------------------
// Function PROTOTYPES
//-----------------------------------------------------------------------------
void SYSCLK_Init (void);
void PORT_Init (void);
void Timer2_Init (int counts);
__interrupt void Timer2_ISR (void);

//-----------------------------------------------------------------------------
// MAIN Routine
//-----------------------------------------------------------------------------
void main (void) {

   // disable watchdog timer
   PCA0MD &= ~0x40;                       // WDTE = 0 (clear watchdog timer
                                          // enable)

   SYSCLK_Init ();                        // Initialize system clock to
                                          // 24.5MHz
   PORT_Init ();                          // Initialize crossbar and GPIO
  

   while (1) {
  
    
     if (!P2_bit.P20)  {P2_bit.P22&=0x01;} else {P2_bit.P22==0x00;};
     if (!P2_bit.P21)  {P2_bit.P23&=0x01;} else {P2_bit.P23==0x00;};// код мигания
   }
}

//-----------------------------------------------------------------------------
// SYSCLK_Init
//-----------------------------------------------------------------------------
//
// This routine initializes the system clock to use the internal 24.5MHz / 8
// oscillator as its clock source.  Also enables missing clock detector reset.
//
void SYSCLK_Init (void)
{
   OSCICN = 0x80;                         // configure internal oscillator for
                                          // its lowest frequency
   RSTSRC = 0x08;                         // enable missing clock detector
}


void PORT_Init (void)
{
   XBR0     = 0x00;                      
   XBR1     = 0x40;                      
   P2      &= 0x03;                               // настраиваем пины 0 и 1 на вход
   P2MDOUT |= 0x0C;                       // обозначаем выход для пинов на которых диоды
    P2_bit.P22&=0x00;                       //гасим загорающиеся диоды
       P2_bit.P23&=0x00;                    //гасим загорающиеся диоды
}

Однако условия не выполняются,независимо от того нажата кнопка или нет,такое ощущения что эти пины не настроились на ввод.Ошибка в коде?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Sujan
сообщение Nov 28 2010, 12:46
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 58
Регистрация: 13-02-07
Пользователь №: 25 330



Цитата(evsx1 @ Nov 27 2010, 13:26) *
Вот,в логике программы следующее:если лог ноль,то делаем x=X&1,ставлю &= не выполняет,ставлю =1,выполняет.тогда где вырождение?компилятор такое вырождение не принимает.Просто в данном конкретном примере я пока не понял разницы между &= и =,по идее нам надо установить только уровни,ну вот выполнил я побитовы и с одним битом,должн....
а вот теперь понял(пока писал,состояние X может быть ноль и тогда я получу 0,а в данном примере так и есть)


Вы судя по всему не правильно понимаете значение оператора &.
Если кратко, то для масок &(логическое И) используют для сброса конкретного бита в 0, не затрагивая остальные, например P2&=0xFE - сбросит бит 0 а остальные биты оставит неизменными (0xFE = 1111 1110b).
Для установки конкретного бита в 1 используется оператор | (логическое или), например P2|=0x01 - установит бит 0 в 1, а осталные останутся неизменными.

Однако в вашем случае можно написать всё ещё проще: P2_bit.P22 = P2_bit.P20; // без всяких IF smile.gif

Сообщение отредактировал Sujan - Nov 28 2010, 12:48
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- evsx1   C8051F320   Nov 26 2010, 11:24
- - barabek   Цитата(evsx1 @ Nov 26 2010, 21:24) Однако...   Nov 26 2010, 12:08
|- - evsx1   Цитата(barabek @ Nov 26 2010, 15:08) В IA...   Nov 26 2010, 15:51
|- - Палыч   Цитата(evsx1 @ Nov 26 2010, 18:51) КодP2_...   Nov 26 2010, 16:57
|- - evsx1   Цитата(Палыч @ Nov 26 2010, 19:57) Наверн...   Nov 26 2010, 17:08
- - kosyak©   Цитата(evsx1 @ Nov 26 2010, 14:24) ... ...   Nov 26 2010, 16:35
|- - evsx1   Цитата(kosyak© @ Nov 26 2010, 19:35) Поче...   Nov 26 2010, 16:42
- - kosyak©   У Вас случаем компилятор этот кусок кода не выкину...   Nov 26 2010, 16:52
- - kosyak©   Код вообще не понятный. сам для х51 на ИАр никогда...   Nov 26 2010, 17:09
- - evsx1   в данном случае меня интересуют настройки порта,по...   Nov 26 2010, 17:57
|- - Палыч   Цитата(evsx1 @ Nov 26 2010, 20:57) ...исп...   Nov 26 2010, 20:22
|- - barabek   Цитата(Палыч @ Nov 27 2010, 06:22) Нужно ...   Nov 27 2010, 01:15
|- - evsx1   Цитата(Палыч @ Nov 26 2010, 23:22) Нужно ...   Nov 27 2010, 11:26
|- - Палыч   Цитата(evsx1 @ Nov 27 2010, 14:26) не пон...   Nov 27 2010, 16:38
- - kosyak©   В 51 есть возможность оперировать битами. т.е. Что...   Nov 26 2010, 18:28


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 20:36
Рейтинг@Mail.ru


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