Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Программа управления светодиодным индикатором


Автор: KyKy 22.10.2010, 11:47
Может мой вопрос покажется очень банален, помоги разобраться с синтаксисом и работой самой программы.



Код

#include "io78f9222.h"    

// Определение байта конфигурации  (Option Byte)
#pragma location = "OPTBYTE"
__root const unsigned char optbyte = 0x9A; 

int main( void )
{
unsigned i, j;
unsigned char n = 1;

// отключить сторожевой таймер
  WDTM = 0x70;           
  
PM2 = 0; PMC2 = 0; PM3 = 0; PM4 = 0; PM12 = 0;

while(1)
{
for(i = 0; i < 6500; i++)
for(j = 0; j < 1000; j++);

// LED4
P12 = (n & 0x01) ? P12 & ~0x08 : P12 | 0x08;
  /*  if(n & 0x01)
        P12 &= ~0x08;
      else
        P12 |= 0x08;
*/
// LED3
P4 = (n & 0x02) ? P4 & ~0x20 : P4 | 0x20;

// LED2
P13 = (n & 0x04) ? P13 & ~0x01 : P13 | 0x01;

// LED1
P2 = (n & 0x08) ? P2 & ~0x08 : P2 | 0x08;

n <<= 1;
if(n == 0x10)
n = 1;
}
return 0;
}



что значат шестнадцатеричные коды и логические операции &, &= кто из них кто, простите С вообще не помню или дайте ссылочку почитать. Спасибо.
Код

P12 = (n & 0x01) ? P12 & ~0x08 : P12 | 0x08;
  /*  if(n & 0x01)
        P12 &= ~0x08;
      else
        P12 |= 0x08;
*/

Автор: UniBomb 22.10.2010, 12:47
Цитата(KyKy @  22.10.2010,  12:47 Найти цитируемый пост)
шестнадцатеричные коды

А что могут значить шестнадцатиречиные коды? Это просто представление чисел. Самый простой способ перевести из 16 сс в 10 сс надо открыть обычный виндовый калькулятор, перевести его в инженерный вид. Далее нажать F5, ввести число, нажать F6 и увидите это же число в десятеричной сс.


Цитата(KyKy @  22.10.2010,  12:47 Найти цитируемый пост)
операции &, &=

& - это логический оператор И. Таблица истинности для него выглядит следующим образом:

Код

a b &
0 0 0
0 1 0
1 0 0
1 1 1


Иными словами, если ему скормить два числа, то на выходе будет число, единичные биты которого будут на тех местах, где они были единичными в обоих иходных числах.

запись P12 &= ~0x08; эквивалентна записи P12 =P12 & (~0x08);



Автор: Mazzi 27.10.2010, 13:52
Цитата(KyKy @ 22.10.2010,  11:47)
... С вообще не помню или дайте ссылочку почитать.

Вот тебе хороший http://chipmarket.in.ua/zip/c.zip.
Цитата
что значат... логические операции &= 


P12 &= ~0x08; это всё равно что P12 = P12 &(~0x08);


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)