57
MICROCONTROLLE R 16F877A USING C LANGUAGE (MIKROC VER. 8.0) CONT…

Chapter2 2014 cont

Embed Size (px)

DESCRIPTION

chapter 2 (cont.), microcontroller (dae 32203)

Citation preview

Page 1: Chapter2 2014 cont

MICROCONTROLLER 16F877A

USING C LANGUAGE(MIKROC VER. 8.0)

CONT…

Page 2: Chapter2 2014 cont

MICROCONTROLLER

• The microprocessor can provide, in a simplified form, all the main elements of the conventional microprocessor system on one chip.

• Used to control a small system.

Page 3: Chapter2 2014 cont

INPUT /OUTPUT PORTS

• Each microcontroller has one or more registers (called ports) connected to the microcontroller pins.

• Why input/output? Because you can change a pin function as you wish.

• For example, suppose you want your device to turn on/off three signal LEDs and simultaneously monitor the logic state of five sensors or push buttons.

• Some of the ports need to be configured so that there are three outputs (connected to LEDs) and five inputs (connected to sensors).

• It is simply performed by software, which means that a pin function can be changed during operation.

Page 4: Chapter2 2014 cont

INPUT /OUTPUT PORTS

• For practical reasons, many I/O pins have two or three functions. If a pin is used as any other function, it may not be used as a general purpose input/output pin; and

• Every port has the corresponding TRIS register: TRISA, TRISB, TRISC etc. which determines performance, but not the contents of the port bits.

By clearing some bit of the TRIS register (bit=0), the corresponding port pin is configured as output. Similarly, by setting some bit of the TRIS register (bit=1), the corresponding port pin is configured as input. This rule is easy to remember 0 = Output, 1 = Input.

In order pins’ operation can match internal 8-bit organization, all of them are, similar to registers, grouped into five so called ports denoted by A, B, C, D and E. They all have several features in common:

Page 5: Chapter2 2014 cont

PROGRAMMING LANGUAGE

The microcontroller executes the program loaded in its Flash memory.

A specialized program in a PC called compiler is in charge of compiling program into machine language (hex file).

The main advantage of C languages is simplicity of program writing.

Page 6: Chapter2 2014 cont

A rough illustration of what is going on during the process of compiling the program from higher to lower programming language.

Page 7: Chapter2 2014 cont

Simplify of C compared to

assembly

Same program compiled into assembly code

Page 8: Chapter2 2014 cont

THE BASICS OF C PROGRAMMING LANGUAGE

/* Text between these signs is not compiled into executable code and represents a comment. */

//This sign is used for short comments//within one program line

Page 9: Chapter2 2014 cont

MikroC Ver. 8.0 First Look

• mikroC for PIC is a full-featured ANSI C compiler for PIC devices from Microchip®.

• It is the best solution for developing code for PIC devices. It features intuitive IDE, powerful compiler with advanced optimizations, lots of hardware and software libraries, and additional tools that will help you in your work.

• Compiler comes with comprehensive Help file and lots of ready-to-use examples designed to get you started in no time. Press F1 to get help.

Page 10: Chapter2 2014 cont

Case 1 : Turn On LED

Special Function RegistersSpecial Function Registers

InfoInfo

TRISB

xxxxxxxx

PORTB

xxxxxxxx

void main()

{

TRISB = 0b00000000;

PORTB = 0b00000001;

}

C programming code to turn the LED on. LED is connected to PORTB bit 0

Page 11: Chapter2 2014 cont

Case 1 : Turn On LED

Special Function RegistersSpecial Function Registers

InfoInfo

TRISB

xxxxxxxx

PORTB

xxxxxxxx

void main()

{

TRISB = 0b00000000;

PORTB = 0b00000001;

}

As soon as the microcontroller is turned on, it will execute the main() function

Page 12: Chapter2 2014 cont

Case 1 : Turn On LED

Special Function RegistersSpecial Function Registers

InfoInfo

TRISB

00000000

PORTB

xxxxxxxx

void main()

{

TRISB = 0b00000000;

PORTB = 0b00000001;

}

Set all bits TRISB register to 0. This makes the whole bit of PORTB as output.

* 0 = Output, 1 = Input

Page 13: Chapter2 2014 cont

Case 1 : Turn On LED

Special Function RegistersSpecial Function Registers

InfoInfo

TRISB

00000000

PORTB

00000001

void main()

{

TRISB = 0b00000000;

PORTB = 0b00000001;

}

• Set binary value 00000001 to PORTB.• LED D1 lights up.

* 0 = 0Volt, 1 = 5Volt

Red indicator: 5V = Digital 1

Blue indicator: 0V = Digital 0

Page 14: Chapter2 2014 cont

Case 1 : Turn On LED

Special Function RegistersSpecial Function Registers

InfoInfo

TRISB

00000000

PORTB

00000001

void main()

{

TRISB = 0b00000000;

PORTB = 0b00000001;

}

• Program END• LED D1 light up forever•Code execution ended.

Page 15: Chapter2 2014 cont

Case 1 : Turn On LED

void main()

{

TRISB = 0b00000000;

PORTB = 0b00000001;

}

Various styles of code programming. Each of them produce the same output.

void main()

{

TRISB.F0 = 0; //Only bit 0 set as output

PORTB.F0 = 1;

}

=

#define LED PORTB.F0 //LED at PORTB bit 0

void main()

{

TRISB = 0b00000000;

LED = 1;

}

=

#define LED PORTB

void main()

{

TRISB = 0b00000000;

LED = 0b00000001;

}

=

Page 16: Chapter2 2014 cont

Software Delay

Software delay is a special function to make the flow of the system hold/pause to specific times. The delay can be set in microsecond and millisecond.

• Delay_us(10); /* 10 microseconds pause */

• Delay_ms(1000); /* 1000ms ~ 1 second pause */

List of delay function codes in MikroC:

Page 17: Chapter2 2014 cont

Case 2 : LED Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

} TRISB

xxxxxxxx

PORTB

xxxxxxxx

•Blink the LED1 and LED2 for 1 second•LED1 at PORTB bit 1•LED2 at PORTB bit 3

20Mhz

Page 18: Chapter2 2014 cont

Case 2 : LED Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

} TRISB

xxxxxxxx

PORTB

xxxxxxxx

•Define PORTB as LEDS

20Mhz

Page 19: Chapter2 2014 cont

Case 2 : LED Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

} TRISB

xxxxxxxx

PORTB

xxxxxxxx

•Execute the main() function

20Mhz

Page 20: Chapter2 2014 cont

Case 2 : LED Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

} TRISB

00000000

PORTB

xxxxxxxx

Set all bits TRISB register to 0. This makes the whole bit of PORTB as output.

* 0 = Output, 1 = Input

20Mhz

Page 21: Chapter2 2014 cont

Case 2 : LED Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

}20Mhz

TRISB

00000000

PORTB

00001010

LED1 = ONLED2 = ON

* 0 = 0V, 1 = 5V

20Mhz

Page 22: Chapter2 2014 cont

Case 2 : LED Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

}20Mhz

TRISB

00000000

PORTB

00001010

LED1 and LED2 still ONand wait for 1 second

20Mhz

Page 23: Chapter2 2014 cont

Case 2 : LED Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

} TRISB

00000000

PORTB

00000000

20Mhz

LED1 = OFFLED2 = OFF

* 0 = 0V, 1 = 5V

Page 24: Chapter2 2014 cont

Case 2 : LED Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

} TRISB

00000000

PORTB

00000000

20Mhz

LED1 and LED2 still OFF and wait for 1 second

Page 25: Chapter2 2014 cont

Case 2 : LED Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

} TRISB

00000000

PORTB

00000000

20Mhz

• After wait for 1 second the program END.• LED1 and LED2 not blink anymore• The LEDs only ON and OFF one time.

Code execution ended

Page 26: Chapter2 2014 cont

Case 2 : LED Blinking

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

}

Page 27: Chapter2 2014 cont

Case 3 : LED Always Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

Void main()

{

TRISB = 0b00000000; //All PORTB bits are output

while(1) // endless loop

{

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

}

}

TRISB

xxxxxxxx

PORTB

xxxxxxxx

20Mhz

• Make LED1 and LED2 blinking forever.

From the previous code, the LEDs only blink for 1 time. To make the LEDs always blink, add “while(1)” command to make the program looping forever.

Page 28: Chapter2 2014 cont

Case 3 : LED Always Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

while(1) // endless loop

{

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

}

}

TRISB

xxxxxxxx

PORTB

xxxxxxxx

20Mhz

•Define PORTB as LEDS

From the previous code, the LEDs only blink for 1 time. To make the LEDs always blink, add “while(1)” command to make the program looping forever.

Page 29: Chapter2 2014 cont

Case 3 : LED Always Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

while(1) // endless loop

{

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

}

}

TRISB

xxxxxxxx

PORTB

xxxxxxxx

20Mhz

Execute the main() function

From the previous code, the LEDs only blink for 1 time. To make the LEDs always blink, add “while(1)” command to make the program looping forever.

Page 30: Chapter2 2014 cont

Case 3 : LED Always Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

while(1) // endless loop

{

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

}

}

TRISB

00000000

PORTB

xxxxxxxx

20Mhz

Set all PORTB bits as output

From the previous code, the LEDs only blink for 1 time. To make the LEDs always blink, add “while(1)” command to make the program looping forever.

Page 31: Chapter2 2014 cont

Case 3 : LED Always Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

while(1) // endless loop

{

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

}

}

TRISB

00000000

PORTB

xxxxxxxx

20Mhz

The condition of while is always 1 (true). So this is an infinite loop.

From the previous code, the LEDs only blink for 1 time. To make the LEDs always blink, add “while(1)” command to make the program looping forever.

Page 32: Chapter2 2014 cont

Case 3 : LED Always Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

while(1) // endless loop

{

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

}

}

TRISB

00000000

PORTB

00001010

20Mhz

LED1 = ONLED2 = ON

* 0 = 0V, 1 = 5V

20Mhz

From the previous code, the LEDs only blink for 1 time. To make the LEDs always blink, add “while(1)” command to make the program looping forever.

Page 33: Chapter2 2014 cont

Case 3 : LED Always Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

while(1) // endless loop

{

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

}

}

TRISB

00000000

PORTB

00001010

20Mhz

LED1 and LED2 still ONand wait for 1 second

20Mhz

From the previous code, the LEDs only blink for 1 time. To make the LEDs always blink, add “while(1)” command to make the program looping forever.

Page 34: Chapter2 2014 cont

Case 3 : LED Always Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

while(1) // endless loop

{

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

}

}

TRISB

00000000

PORTB

00000000

20Mhz20Mhz

LED1 = OFFLED2 = OFF

* 0 = 0V, 1 = 5V

From the previous code, the LEDs only blink for 1 time. To make the LEDs always blink, add “while(1)” command to make the program looping forever.

Page 35: Chapter2 2014 cont

Case 3 : LED Always Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

while(1) // endless loop

{

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

}

}

TRISB

00000000

PORTB

00000000

20Mhz20Mhz

Wait for 1 second

From the previous code, the LEDs only blink for 1 time. To make the LEDs always blink, add “while(1)” command to make the program looping forever.

Page 36: Chapter2 2014 cont

Case 3 : LED Always Blinking

Special Function RegistersSpecial Function Registers

InfoInfo

#define LEDS PORTB

main()

{

TRISB = 0b00000000; //All PORTB bits are output

while(1) // endless loop

{

LEDS = 0b00001010; //D1 and D2 light up.

Delay_ms(1000); //Pause for 1 sec

LEDS = 0b00000000;

Delay_ms(1000);

}

}

TRISB

00000000

PORTB

00001010

From the previous code, the LEDs only blink for 1 time. To make the LEDs always blink, add “while(1)” command to make the program looping forever.

20Mhz

• After wait for 1 second, program goes to loop and start

again to light up the LEDs.

Page 37: Chapter2 2014 cont

• As a result, the two led flashes all the time.

• The use of while(1) is essential for the continuation of the program.

Case 3 : LED Always Blinking“Animated Gif”

Page 38: Chapter2 2014 cont

Various styles of code programming. Each of them produce the same output.

Case 3 : LED Always Blinking

#define LEDS PORTBmain(){ TRISB = 0b00000000; //All PORTB bits are output while(1) // endless loop { LEDS = 0b00001010; //D1 and D2 light up. Delay_ms(1000); //Pause for 1 sec LEDS = 0b00000000; Delay_ms(1000); //Pause for 1 sec }}

#define LED1 PORTB.F1#define LED2 PORTB.F3main(){ TRISB = 0b00000000; //All PORTB bits are output while(1) // endless loop { LED1 = 1; //D1 ON LED2 = 1; //D2 ON Delay_ms(1000); //Pause for 1 sec LED1 = 0; //D1 OFF LED2 = 0; //D2 OFF Delay_ms(1000); //Pause for 1 sec }}

=

Page 39: Chapter2 2014 cont

Case 4 : LED Running Light

“Animated Gif”

• LED in running light with 1 second delay.

InfoInfo

Page 40: Chapter2 2014 cont

Case 5 : LED and Button

Special Function RegistersSpecial Function Registers

InfoInfo

TRISC

xxxxxxxx

PORTC

xxxxxxxx

• Press the button to light up LED and LED off when release the button.

B1 (Input) D1 (Output)

1 (5V) 0 (0V)

0 (0V) 1 (5V)

void main(){

TRISC = 0b00100000; //Bit 5 PORTC set to Input, the // rest as output

PORTC = 0b00000000; //Clear all bits of PORTC

while(1) //infinite loop

{

if (PORTC.F5 == 0) //if got 0 or 0V (button1 pressed)

{

PORTC.F2 = 1; //LED1 ON

}

else // got 1 or 5V (button1 not pressed)

{

PORTC.F2 = 0; //LED1 OFF

}

}

}

Page 41: Chapter2 2014 cont

Case 5 : LED and Button

Special Function RegistersSpecial Function Registers

InfoInfo

TRISC

00100000

PORTC

xx1xxxxx

void main(){

TRISC = 0b00100000; //Bit 5 PORTC set to Input, the // rest as output

PORTC = 0b00000000; //Clear all bits of PORTC

while(1) //infinite loop

{

if (PORTC.F5 == 0) //if got 0 or 0V (button1 pressed)

{

PORTC.F2 = 1; //LED1 ON

}

else // got 1 or 5V (button1 not pressed)

{

PORTC.F2 = 0; //LED1 OFF

}

}

}

Set PORTC bit 5 as input, the rest as output

Page 42: Chapter2 2014 cont

Case 5 : LED and Button

Special Function RegistersSpecial Function Registers

InfoInfo

TRISC

00100000

PORTC

00100000

void main(){

TRISC = 0b00100000; //Bit 5 PORTC set to Input, the // rest as output

PORTC = 0b00000000; //Clear all bits of PORTC

while(1) //infinite loop

{

if (PORTC.F5 == 0) //if got 0 or 0V (button1 pressed)

{

PORTC.F2 = 1; //LED1 ON

}

else // got 1 or 5V (button1 not pressed)

{

PORTC.F2 = 0; //LED1 OFF

}

}

}

Clear all bits at PORTC

Page 43: Chapter2 2014 cont

Case 5 : LED and Button

Special Function RegistersSpecial Function Registers

InfoInfo

TRISC

00100000

PORTC

00100000

void main(){

TRISC = 0b00100000; //Bit 5 PORTC set to Input, the // rest as output

PORTC = 0b00000000; //Clear all bits of PORTC

while(1) //infinite loop

{

if (PORTC.F5 == 0) //if got 0 or 0V (button1 pressed)

{

PORTC.F2 = 1; //LED1 ON

}

else // got 1 or 5V (button1 not pressed)

{

PORTC.F2 = 0; //LED1 OFF

}

}

}

The condition of while is always 1 (true). So this is an infinite loop.

Page 44: Chapter2 2014 cont

Case 5 : LED and Button

Special Function RegistersSpecial Function Registers

InfoInfo

TRISC

00100000

PORTC

00100000

void main(){

TRISC = 0b00100000; //Bit 5 PORTC set to Input, the // rest as output

PORTC = 0b00000000; //Clear all bits of PORTC

while(1) //infinite loop

{

if (PORTC.F5 == 0) //if got 0 or 0V (button1 pressed)

{

PORTC.F2 = 1; //LED1 ON

}

else // got 1 or 5V (button1 not pressed)

{

PORTC.F2 = 0; //LED1 OFF

}

}

}

•Check if input at bit 5 get 0 or 1, in this case button is not press. So bit 5 got 1.

Digital 1 = 5Volt

Page 45: Chapter2 2014 cont

Case 5 : LED and Button

Special Function RegistersSpecial Function Registers

InfoInfo

TRISC

00100000

PORTC

00100000

void main(){

TRISC = 0b00100000; //Bit 5 PORTC set to Input, the // rest as output

PORTC = 0b00000000; //Clear all bits of PORTC

while(1) //infinite loop

{

if (PORTC.F5 == 0) //if got 0 or 0V (button1 pressed)

{

PORTC.F2 = 1; //LED1 ON

}

else // got 1 or 5V (button1 not pressed)

{

PORTC.F2 = 0; //LED1 OFF

}

}

}

•The if command got false signal, so jump to else.

Page 46: Chapter2 2014 cont

Case 5 : LED and Button

Special Function RegistersSpecial Function Registers

InfoInfo

TRISC

00100000

PORTC

00100000

void main(){

TRISC = 0b00100000; //Bit 5 PORTC set to Input, the // rest as output

PORTC = 0b00000000; //Clear all bits of PORTC

while(1) //infinite loop

{

if (PORTC.F5 == 0) //if got 0 or 0V (button1 pressed)

{

PORTC.F2 = 1; //LED1 ON

}

else // got 1 or 5V (button1 not pressed)

{

PORTC.F2 = 0; //LED1 OFF

}

}

}

•Clear bit 2 (LED off)

Page 47: Chapter2 2014 cont

Case 5 : LED and Button

Special Function RegistersSpecial Function Registers

InfoInfo

TRISC

00100000

PORTC

00000000

void main(){

TRISC = 0b00100000; //Bit 5 PORTC set to Input, the // rest as output

PORTC = 0b00000000; //Clear all bits of PORTC

while(1) //infinite loop

{

if (PORTC.F5 == 0) //if got 0 or 0V (button1 pressed)

{

PORTC.F2 = 1; //LED1 ON

}

else // got 1 or 5V (button1 not pressed)

{

PORTC.F2 = 0; //LED1 OFF

}

}

}

•Program goes to loop and start again to check the button•This time button is pressed and bit 5 got 0 (TRUE signal)

Digital 0 = 0Volt

Page 48: Chapter2 2014 cont

Case 5 : LED and Button

Special Function RegistersSpecial Function Registers

InfoInfo

TRISC

00100000

PORTC

00000100

void main(){

TRISC = 0b00100000; //Bit 5 PORTC set to Input, the // rest as output

PORTC = 0b00000000; //Clear all bits of PORTC

while(1) //infinite loop

{

if (PORTC.F5 == 0) //if got 0 or 0V (button1 pressed)

{

PORTC.F2 = 1; //LED1 ON

}

else // got 1 or 5V (button1 not pressed)

{

PORTC.F2 = 0; //LED1 OFF

}

}

}

•PIC send 5Volt to PORTC bit 5•D1 light up.

Page 49: Chapter2 2014 cont

Case 5 : LED and Button

Special Function RegistersSpecial Function Registers

InfoInfo

TRISC

00100000

PORTC

00000100

void main(){

TRISC = 0b00100000; //Bit 5 PORTC set to Input, the // rest as output

PORTC = 0b00000000; //Clear all bits of PORTC

while(1) //infinite loop

{

if (PORTC.F5 == 0) //if got 0 or 0V (button1 pressed)

{

PORTC.F2 = 1; //LED1 ON

}

else // got 1 or 5V (button1 not pressed)

{

PORTC.F2 = 0; //LED1 OFF

}

}

}

•Program will goes to loop and start again to check the button•This process is repeated like previous.

Page 50: Chapter2 2014 cont

Case 5 : LED and Button“Animated Gif”

* LED is always ON as long as the button is pressed and OFF when the button is released.

Page 51: Chapter2 2014 cont

Various styles of code programming. Each of them produce the same output.

void main(){ TRISC = 0b00100000; //Bit 5 PORTC set to Input, //the rest as output PORTC = 0b00000000; //Clear all bits of PORTC while(1) //infinite loop { if (PORTC.F5 == 0) //if got 0 or 0V (button is pressed) { PORTC.F2 = 1; //LED1 ON } else // got 1 or 5V (button is not pressed) { PORTC.F2 = 0; //LED1 OFF } }}

#define BUTTON PORTC.F5#define LED1 PORTC.F2void main(){ TRISC = 0b00100000; //Bit 5 PORTC set to Input, //the rest as output PORTC = 0b00000000; //Clear all bits of PORTC while(1) //infinite loop { if (BUTTON==0) //if got 0 or 0V (button is pressed) { LED1 = 1; //LED1 ON } else // got 1 or 5V (button is not pressed) { LED1 = 0; //LED1 OFF } }}

=

Case 5 : LED and Button

Page 52: Chapter2 2014 cont

Case 6 : LED and Button Method 2

InfoInfo

•In this example, LED will emit light for 1 second only when button is released. After that LED will OFF.•Unlike the previous methods ,when a button is pressed, the LED lights up quickly.

Page 53: Chapter2 2014 cont

Case 7 : 2 LEDs and 2 Buttons

InfoInfo

•In this example, there are two buttons that use different circuits. B1 and B2 respectively give the values of 0 and 1 when pressed.

“Animated Gif”

Page 54: Chapter2 2014 cont

Case 8 : Relay#define RELAY PORTC.F5 //Relay at PORTC bit 5#define LED PORTB.F0 //LED1 at PORTB bit 0#define BON PORTA.F0 //Button ON at PORTA bit 0#define BOFF PORTA.F2 //Button OFF at PORTA bit 2void main(){ TRISA = 0b11111111; //Set all bits of PORTA as input ADCON1 = 0b00000110; //Set PORTA as digital input //ADCON1 is only for PORTA TRISB = 0b00000000; //Set all bits of PORTB as output PORTB = 0b00000000; //Clear all bits of PORTB TRISC = 0b00000000; //Set all bits of PORTC as output PORTC = 0b00000000; //Clear all bits of PORTC

while(1) //infinite loop { if (BON == 1) //if Button ON is pressed { RELAY = 1; LED = 1; } if (BOFF == 1) //if Button OFF is pressed { RELAY = 0; LED = 0; } } //end of while} //end of main()

“Animated Gif”

Info: Two buttons to activate and deactivate relay and LED. Relay connected to 12V lamp.

Page 55: Chapter2 2014 cont

#define sevensegment PORTBvoid main(){ TRISB = 0b00000000; //PORTB as output PORTB = 0b00000000; //Clear PORTB while(1) //infinite loop { //Using dec2bcd.Convert 8 bit decimal to binary code decimal //example: dec2bcd(13) = 00010011, dec2bcd(88) = 10001000 sevensegment = dec2bcd(1); //binary code decimal of no. 1 (00000001) Delay_ms(1000); sevensegment = dec2bcd(2); //binary code decimal of no. 2 (00000010) Delay_ms(1000); sevensegment = dec2bcd(3); //binary code decimal of no. 3 (00000011) Delay_ms(1000); }}

Case 9 : Seven Segment with decoder

“Animated Gif”

Page 56: Chapter2 2014 cont

Various styles of code programming. Each of them produce the same output.

=

Case 9 : Seven Segment with decoder

#define sevensegment PORTBvoid main(){ TRISB = 0b00000000; //PORTB as output PORTB = 0b00000000; //Clear PORTB while(1) //infinite loop { //Using dec2bcd.Convert 8 bit decimal to binary code decimal //example: dec2bcd(13) = 00010011, dec2bcd(88) = 10001000 sevensegment = dec2bcd(1); //binary code decimal of no. 1 (00000001) Delay_ms(1000); sevensegment = dec2bcd(2); //binary code decimal of no. 2 (00000010) Delay_ms(1000); sevensegment = dec2bcd(3); //binary code decimal of no. 3 (00000011) Delay_ms(1000); }}

#define sevensegment PORTBint i;void main(){ TRISB = 0b00000000; //PORTB as output PORTB = 0b00000000; //Clear PORTB while(1) //infinite loop { for (i=1;i<=3;i++) //using “for loop” { sevensegment = dec2bcd(i); Delay_ms(1000); } }}

Page 57: Chapter2 2014 cont

Interrupt