320 likes | 457 Views
C Summary. Wilmer Arellano. References. Excerpts from the book: Predko, Myke. (2005). 123 PIC MICROCONTROLLER EXPERIMENTS FOR THE EVIL GENIOUS. USA: McGraw-Hill. ISBN: 0-07-145142-0. Variable Declaration Statements. int VariableName; VariableName is a label and can start with any:
E N D
C Summary Wilmer Arellano
References • Excerpts from the book: • Predko, Myke. (2005). 123 PIC MICROCONTROLLER EXPERIMENTS FOR THE EVIL GENIOUS. USA: McGraw-Hill. ISBN: 0-07-145142-0
Variable Declaration Statements • int VariableName; • VariableName is a label and can start with any: • upper- or lowercase letter or • the underscore character. • After the starting character, the rest of the label can be any letter, number, or underscore character. Blank characters cannot be used in a label. • int time;
For standard variables, two options exist that you should be aware of. The first is the ability to initialize the variable when it is declared. By adding an equal sign and a constant value, you can set your variable to: • int sample = 47; • Another option that is available to the declaration statement is the const keyword, which converts the declared value from a variable to a constant: • const int sampleConstant = 47;
Variable Declaration Statements • Please try to make an effort to make them representative of what they are being used for. • PWMV1 is much better than XEG4 • Variable types are important because of limited RAM
Variable Declaration Statements • Be careful when passing data among variables • C-style casts can be used to convert any type into any other type, potentially with unsafe results (such as casting an integer into a pointer type). • i = (Type)j; • double result = (double)4/5;
void main() { PORTB = 0; U1MODE = 0x8400; ADPCFG = 0xFFFF; TRISB = 0x49; while(1) // Loop Forever { if ((PORTB & (1 << 3))==0) PORTB = '3'; else PORTB = 4; } } void main() { PORTB = 0; U1MODE = 0b1000010000000000; ADPCFG = 0b1111111111111111; TRISB = 0b0100 1001 ; while(1) // Loop Forever { if (PORTBbits.RB3==0) PORTB = 0b00110011; else PORTB = 0b000100; } } Constant Formatting
Standard C or C++ • // Will not take 0b prefix, 0x will work and 0# is for octal; • #include <iostream> • using namespace std; • int main() • { • int x = 0x01; • x = x << 3; • cout << x; • system("pause"); • }
Assignment Statements • VariableName = Expression; • Although C is somewhat tolerant of assigning different data types, you should always try to make sure that the expression’s type is the same as the variable’s, and if it isn’t, make sure you understand any potential issues.
Assignment Statements • int i; // Unitialized Variable Declaration • int j = 23; // Variable Declared with Initial • // value assignment (Initialization) • main() • { • i = 47; // The variable "i" assigned (or loaded • // with) the constant value 47 • i = j; // The variable "i" assigned contents of • // of "j". • i = j = 1; // "i" and "j" assigned the same value. • i = i + 1; • }
Expressions • int i, j; • main() • { • i = 3; // "3" is the Expression • j = i; // "i" is the Expression • i = j * 11; // Simple Arithmetic Expression • i = j * 0x0B; // Multiply by a Hex Value • i = j * 0b00001011; // Multiply by a Binary Value • i = '0' + j; // Load i with ASCII "3“ • // ASCII “O” IS 48; 48 + 3 =51; ASCII “3” IS 51
Expressions • j = 12; • i = (j - 5) % 7; // Complex Arithmetic Expression • // Involving Two Operations • // and Forced Order of Operations • // i = (j - 5) % 7 • // = (12 - 5) % 7 • // = 7 % 7 • // = 0
Expressions • i = j - 5 % 7; // Same As previous but no • // Forced Order of Operations • // i = j - 5 % 7 • // = 12 - 5 % 7 • // = 12 - 5 (5 % 7 = 5) • // = 7 • i = (j = i / 6) * 2; // Embedded assignment: • // j = i / 6 • // = 7 / 6 • // = 1 • // i = (i / 6) * 2 • // = j * 2 • // = 2
Bitwise Operators • The four basic bitwise operators are as follows: • & bitwise AND. When two values are ANDed together, each bit in the result is loaded with the AND value of the corresponding bits in the two values (set if both the bits are set). • A = 0b00001111; • B = 0B00001001; • A&B = ? • bitwise (inclusive) OR. When two values are ORed together, each bit in the result is loaded with the OR value of the corresponding bits in the two values (set if either hit is set). • A = 0b00001111; • B = 0B01001001; • A | B = ?
Bitwise Operators • ^ bitwise XOR. When two values are exclusively ORed together. each bit in the result is loaded with the XOR value of the corresponding hits in the two values (set if only one of the two parameter bits is set). • A = 0b00001111; • A ^ 0x0A = ?
Bitwise Operators • ~ bitwise negation. This operator will return the negated or complementary value for each bit of the single input parameter (invert each bit). This operator must never be confused with the logical operator, which will he shown to invert the logical value, not the hitwise value. • B = 0B01001001; • ~ B = ?
Bitwise Operators • char i, j, k; // Use 8 Bit Variables • main() • { • i = 47; // Initialize Values • j = 137; • k = i & j; // AND Values together • k = i | j; // OR Values together
Bitwise Operators • k = i ^ j; // XOR Values together • k = ~j; // Invert the Bits in "j" • k = (i * 2) - j + (1 << 7); // Mix Binary // Operators with • // Arithmetic
Logical Expression • i = 0xl234 * (j > 4) // if (j > 4) is True, then 1 returned • which is equivalent to: • if (j > 4) • i = 0x1234; • else • i = 0;
Conditional Execution Using the If Statement • if (Expression) // Test to see if “Expression” is Not Zero • Statement // Statement executed if “Expression” <> 0 • else // Optional “else” Statement which Statement // Executes if Expression is Zero
Conditional Execution Using the If Statement • if ((j/ 3) != 0) // Execute following statement • // if “j / 3” is not zero • if (j / 3) // Execute following statement • // if “j / 3” is not zero.
Conditional Execution Using the If Statement • if (Expression) // Test if “Expression” is • // Not Zero • {// Opening Brace to Collect Statements • // Multiple Statements that • // Execute if Expression • // is Not Zero • Statement; • Statement; • Statement; • } • // Closing Brace to End true “statement”
Conditional Execution Using the If Statement • main() • { • if (I == 44) // "i" equals a constant • { • n = n + 1; // Increment "n" if "i" == 44 • k = 23; • } • else • { • n = n - 1; // Decrement if Not Equals • k = 0; • } • }
Conditional Execution Using the If Statement • if ((j = (i / 3)) == 7) • { • j = j + 1; • k = 2; • } • if (k = i) // "i" equals contents of Variable • n = n + 1; // Increment "n" if "i" == "k" • else if (j = i) // "i" equals contents of another Variable • n = n - 1; // Note that there is a single statement, • // so no braces required.
Nested Conditional Statements • if (i > j) • { • if (k < n) • { • // Statement(s) Executed if “i > j” and “k < n” • } • else • { • // Statement(s) Executed if “i > j” and “k >= n” • } • } • if ((i > j) && (k < n)) • { • // Statement(s) Executed if “1 > j” and “k < n” • } • else if (i > j) • { • // Statement(s) Executed if “i > j” and “k >= n” ) • } // fi
for loop • for(initial cond.; test cond.;increment) • Isntruction • for(initial cond.; test cond.;increment) • { • Isntructions • }
for loop • int x = 0, i, j = 5; • for(i = 1; i < j; i = i + 1) • { • x = x + i; • } • for(i = 1; i < j; i++)
while loop • int x = 0, i = 1, j = 5; • while(i < j) • { • x = x + i; • i++; • }
do while loop • int x = 0, i = 1, j = 5; • do • { • x = x + i; • i++; • } while(i < j);