Engineering 1040: Mechanisms & Electric Circuits Fall 2011

1 / 20

# Engineering 1040: Mechanisms & Electric Circuits Fall 2011 - PowerPoint PPT Presentation

Engineering 1040: Mechanisms & Electric Circuits Fall 2011. Introduction to C Programming. Basic Rules When Programming in C Language. At the end of each line with instructions a semi-colon (;) has to be placed. Eg: a=a+3; There are two methods of indicating comments.

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

## Engineering 1040: Mechanisms & Electric Circuits Fall 2011

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

### Engineering 1040: Mechanisms & Electric Circuits Fall 2011

Introduction to C Programming

Basic Rules When Programming in C Language
• At the end of each line with instructions a semi-colon (;) has to be placed.

Eg: a=a+3;

• There are two methods of indicating comments.
• For single lines: //comment.
• For multiple lines:

/* This is comment 1;

This is comment 2; */.

• Functions, statements, etc., should be between { }.

Eg:

void main(void) //Function

{

}

The Structure of a C Program

#include <18f4550.h>

//Declaring variables

int a, b, c, par1, d;

charzz, s3, temp;

//Making prototypes

int calc (intp);

//Function

int calc (intp)

{

p=p+1;

return p;

}

//Main function

void main(void)

{

a=calc(3);

}

• Declaration of global variables.
• Declaration of Function Prototypes.
• Function Declaration.
• Main function.

Main function is the most important part of the C program.

Most of the time we make modifications in main function

• Header files include the standard functions that will used elsewhere in the program.
• Text from the specified file is used at this point of the compilation.
• These will call the library functions.

#include < 18f4550.h > - Functions specific to the PIC

#include < adc.h > - A/D converter functions.

#include < xlcd.h > - Functions used for display by a LCD screen.

#include < delays.h > - Delay functions in the program.

#include < stdio.h > - Standard input and output functions.

• All header files used in standard C programming is valid in microcontroller programming .
Variable types (2)
• Possible ways to give variable a the decimal value 15:

a = 15; //Decimal

a = 0b0000 1111; //Binairy

Operators (1)
• Relational operators
• Bit operators
Operators (2)
• Mathematical operators
• Increasing and decreasing:

x--; //This is the same as x = x – 1;

x++; //This is the same as x = x + 1;

• Example:

int a, b, c;

a = 19; //a 00010011

b = 6; //b 00001110

c = a & b; //c 00000010 -> 2

Statements (1)
• IF...ELSE

if (a==0) //If a is similar to 0...

{

b++; //...than increase b by 1

}

else //otherwise

{

b--; //decrease b by 1

}

• WHILE

while (a>3) //As long as a is higher than 3

{

b = b + 3; //Add 3 to b

a--; //Decrease a by 1

}

Statements (2)
• FOR

for (i = 0 ; i < 100 ; i++) //From i=0 to i=100 with step size 1

{

b++; //Increase b by 1

a--; //Decrease a by 1

}

• When a bootloader is used, a special part of code has to be included in the program, after the #include statements.

//Always use this code when using with a boot oader

#pragma code _RESET_INTERRUPT_VECTOR = 0x000800

void _reset (void)

{

_asmgoto _startup _endasm

}

#pragma code

#pragma code _HIGH_INTERRUPT_VECTOR = 0x000808

void _high_ISR (void)

{

;

}

#pragma code

#pragma code _LOW_INTERRUPT_VECTOR = 0x000818

void _low_ISR (void)

{

;

}

#pragma code

Programming Pins & Ports (1)
• If PORTB is used for writing to and reading from pins on port B.
• Writing a,
• ‘1’ to one of the bits of PORTB results in a high voltage on the output pin.
• ‘ 0’ will result in a low voltage.
• The MSB (most significant bit, the most left one) is used for pin B7, the LSB for pin B0.
Programming Pins & Ports (2)
• Declaring all the pins of a port:
• Declaring a specific pin of a port to high or low:
Programming Pins & Ports (3)
• Instead of using PORT the command LAT could also be used in declaring pins.

Example:

• LATD = 0x00; // Set all port D to low
• LATCbits.LATC0 = 0; //Set pin C0 to low
• LATCbits.LATC1 = 1; //Set pin C1 to high
Programming Pins & Ports (4)
• Declaring a port as an output port:
• Use ‘1’ for Input
• Use ‘0’ for Output

Example:

• TRISD = 0b11111111;

//Set all pins in port D as inputs

• TRISD = 0b00000000;

//Set all pins in port D as outputs

• TRISD = 0b10101010;

//Set pins 0,2,4,6 of port D as outputs

//Set pins 1,3,5,7 of port D as inputs

Coding the Wall-Following Mobile Robot Platform
• goForward(void) –go forward by 1 step.
• turnRight(int stepNum) – turn to the right side by the angle specified by the integer stepNum

Homework:

• Using the above given functions write a code in C language,
• Write a function for the robot to turn left (call this function turnLeft(int stepNum) )
• Write a function for reading the left sensor (call this function readLeftSensor (int stepNum) )
• Write a function for the robot to move forward a number of steps given by x (call this function goForwardx( (int x) )

void turnRight(int stepNum)

{

int i = 0;

while(I < stepNum)

{

rotateCW(2); // Rotate motor two by one step

rotateCW(1); // Rotate motor by one step

Delay1KTCYx(50); // Changing the argument in the delay function will change the speed at which // the motor rotates. Delay equals 1000 x 50 x 1/12 = 4.167 ms

i++;

LATD = 0x00; // Set all port D to 0

}

return;

}

void goForward(void){

rotateCCW(2); // Rotate motor two step

rotateCW(1); // Rotate motor one step

Delay1KTCYx(50); // Changing the argument in the delay function will change the // speed at which the motor rotates. Delay equals 1000 x 50 x // 1/12 = 4.167 ms

LATD = 0x00; // Set all port D to 0

}

Write a pseudo code for the “wallee” robot to follow a wall on the left hand side using the left sensor.

{

rightturn(10);

goforwardx(5);

}

{

leftturn(10);

goforwardx(5);

}

{

goforwardx(10);

}

Left

Sensor

Wall

• Write a pseudo code for the “wallee” robot to follow a wall on the left hand side using the left sensor.

If (leftsensor > 400)

{

rightturn(10);

goforwardx(5);

}

If (leftsensor < 200)

{

leftturn(10);

goforwardx(5);

}

else (leftsensor <= 400) && (leftsensor > =200)

{

goforwardx(10);

}

Left

Sensor

Wall