Professional Documents
Culture Documents
Expt No: 7a Date:19.3.2015 Led Interfacing Aim
Expt No: 7a Date:19.3.2015 Led Interfacing Aim
Date:19.3.2015
LED INTERFACING
AIM:
To design and set up a circuit to interface an LED with PIC 16F877A
SOFTWARE USED:
MPLAB_IDE_8_40
COMPONENTS REQUIRED:
Microcontroller: PIC16F877A
led
ALGORITHM
1. Start
2. Set PORT B as output port
3. Begin infinite loop
a. Begin
i. Assign H 0F to PORT B
ii Call delay
iii toggle the value of PORT B
iv call delay
b. End
4. Stop
THEORY
An LED is connected to RB0 pin of Port B. This pin has built-in internal pull-up which
can source a current of up to 25mA. The circuit diagram is shown as follows
PORTB is an 8-bit wide, bi-directional port. The corresponding data direction register
is TRISB. Setting a TRISB bit (= 1) will make the corresponding PORTB pin an input (i.e., put
the corresponding output driver in a Hi-Impedance mode). Clearing a TRISB bit (= 0) will make
the corresponding PORTB pin an output (i.e., put the contents of the output latch on the selected
pin). TRISB register belongs to register bank1 and PORTB belongs to bank 0
PROGRAM IN ASSEMBLY
INCLUDE "P16F877.INC" ; Header File
ORG 0000H
; Specify the memory location
CLRF PCLATH
GOTO START
; Reserve the memory locations from 0000H to 0020H for
ISR
ORG 0020H
DELAY: MOVLW H'09'
; invoke delay routine
MOVWF 20H
; move the content of working register to location 20H
Z2:
MOVLW H'09'
; immediately load data FFH to working register.
MOVWF 21H
Z1:
DECFSZ 21H
GOTO Z1
DECFSZ 20H
GOTO Z2
RETURN
START: BCF STATUS, RP1 ; BANK1 select
BSF STATUS, RP0
CLRF TRISB
; Configure port B output
BCF STATUS, RP0 ; BANK0 select
L1:
MOVLW H'F0'
MOVWF PORTB
; move content of working register (F0) to PORTB
CALL DELAY
MOVLW H'0F'
; move content of working register [ie 0F] to PORTB
MOVWF PORTB
CALL DELAY
GOTO L1
END
PROGRAM IN C
#include<pic.h>
void delay(long g)
{
int i,j;
for(i=0;i<=g;i++)
{
for(j=0;j<255;j++);
}
}
// main progam
void main()
{
TRISB=0x00;
while(1)
{
PORTB=0XF0;
delay(300);
PORTB=~PORTB;
delay(300);
}
}
PROGRAM WINDOW
IN ASSEMBLY
IN C
INTERFACING DIAGRAM
RESULT
LED was interfaced successfully to PIC16F877A.
Expt No: 7 b
Date:21.3.2015
7 SEGMENT DISPLAY INTERFACING
AIM:
To design and setup a circuit to interface PIC microcontroller with 7 segment display.
SOFTWARE USED:
MPLAB_IDE_8_40
COMPONENTS REQUIRED
Microcontroller: PIC16F877A
7 segment display [common anode]
ALGORITHM
1. Start
2. Assign {0X03,0X9F,0X25,0X0D,0X99,0X49,0XC1,0X1F,0X01,0X19}to character array a[]
3. Set PORT B as output port
4. Begin Infinite loop
a. Begin
i. for value of K upto 10
1. Begin
a. Assign a[k] to PORT B
b. Call delay
2. End
b. END
5. Stop
THEORY
The segments in a 7-segment display are arranged to form a single digit from 0 to F. We
can display a multi-digit number by connecting additional displays. Even though LCD displays
are more comfortable to work with, 7-segment displays are still standard in the industry. This is
due to their temperature robustness and visibility.
Segments are marked with non-capital letters: a, b, c, d, e, f, g and dp , where dp is the decimal
point. The 8 LEDs inside each display can be arranged with a common cathode or common
anode. With a common cathode display, the common cathode must be connected to the 0V rail
and the LEDs are turned on with a logic one. Common anode displays must have the common
anode connected to the +5V rail. The segments are turned on with a logic zero. 7-segment
displays come in different colors, including: red, orange, and green.
1 Interfacing :
1- Use a display driver such as the 7447 IC which convert the BCD number to it's seven segment
code with the PIC (number of pins used is 4).
2- Alternatively displays can be driven by a micro-controller (number of pins used is 7 plus the
decimal point).
3- Use 7447 with a decade counter (counter counts from 0 to 9) with the microcontroller (uses
one pin but is not so fast)
DESIGN
PROGRAM
#include<pic.h>
void delay(long g)
{
int i,j;
for(i=0;i<=g;i++)
{
for(j=0;j<255;j++);
}
}
void main()
{
int i,a[10]={0x03,0x9F,0x25,0x0D,0x99,0x49,0xC1,0x1F,0x01,0x19};
TRISB=0x00;
TRISA=0x00;
PORTA=0xFF;
while(1)
{
for(i=0;i<=9;i++)
{
PORTB=a[i];
delay(100);
}
}
}
PROGRAM WINDOW
INTERFACING DIAGRAM
RESULT
7 Segment display was interfaced successfully to PIC16F877A.
Expt No: 7c
Date:21.3.2015
THEORY
Liquid Crystal Display (LCD) is very commonly used electronic display module and having a
wide range of applications such as calculators, laptops, mobile phones etc. 162 character lcd
display is very basic module which is commonly used in electronics devices and projects. It can
display 2 lines of 16 characters. Each character is displayed using 57 or 510 pixel matrix.
PROGRAM
// LCD interfacing
#include <pic.h>
void delay(long lcd_g)
{
int lcd_i,lcd_j;
for(lcd_i=0;lcd_i<=lcd_g;lcd_i++)
{
for(lcd_j=0;lcd_j<250;lcd_j++) ;
}
}
// lcd command mode
void lcd_cmd(char lcd_k)
{
RE0=0;
RE1=0;
//write mode
PORTD=lcd_k;
RE2=1;
delay(1);
RE2=0;
}
// lcd data mode
void lcd_data(char lcd_c)
{
RE0=1;
RE1=0;
//write mode
PORTD=lcd_c;
RE2=1;
delay(1);
RE2=0;
}
// send character of a string to LCD one by one.
void print_lcd(const char *ptr){
while(*ptr != 0){ lcd_data(*ptr); ptr++;
}
}
void lcd_initiltn()
{
ADCON1=0X02;
TRISE0=0;
TRISE1=0;
TRISE2=0;
TRISD=0;
delay(15);
lcd_cmd(0x30);
//initialize
delay(5);
lcd_cmd(0x30);
delay(1);
lcd_cmd(0x30);
delay(1);
lcd_cmd(0x38);
lcd_cmd(0x0c);
//cursor off
lcd_cmd(0x06);
//move right
lcd_cmd(0x01);
//clear
lcd_cmd(0x80);
}
void main()
{
lcd_initiltn();
lcd_cmd( 0x86);
lcd_cmd( 0xc4);
while(1);
}
PROGRAM WINDOW
INTERFACING DIAGRAM
RESULT
LCD display was successfully to PIC16F877A
Expt No: 7d
Date:26.3.2015
DC MOTOR INTERFACING
AIM
To design and setup a circuit to interface PIC microcontroller with DC motor.
SOFTWARE USED:
MPLAB_IDE_8_40
COMPONENTS REQUIRED
Microcontroller: PIC16F877A
150 RPM DC motor
Motor Driver IC: L293D
ALGORITHM
1. Start
2. Set Port B as output port and port D as input port
3. Begin infinite loop
a. check if RD0=0 & RD1=0
i.assign RB0=1 & RB1=0 for clock wise rotation
b. Check if RD0=1 &RD1=1
i. assign RB0=0 & RB1=1for anti clock wise rotation
c. else
i. assign RB0=0 & RB1=0
4. Stop
THEORY
DC motor are simple two lead, electrically controlled devices that convert electrical power into
mechanical power through the interaction of 2 magnetic fieldstone field is usually produced by a
stationary permanent magnet and the other field is produced by an electric current flowing in the
motor coil. Rotation of motor can be reversed by simply flipping the terminals of the DC power
supply.
DESIGN
DIRECTION CONTROL
SW1
SW2
MOTOR
ON
ON
CLOCKWISE
ON
OFF
STOP
OFF
ON
STOP
OFF
OFF
ANTICLOCKWISE
PROGRAM:
#include<pic.h>
void delay(long g)
{
int i,j; for(i=0;i<=g;i++)
{
for(j=0;j<255;j++);
}
}
void main()
{
unsigned int k;
TRISB=0x00;
TRISD=0XFF;
while(1)
{
if (RD0==0&&RD1==0)
{
RB0=1;
RB1=0;
}
else if ( RD0==1&&RD1==1)
{
RB0=0;
RB1=1;
}
Else
{
RB0=0;
RB1=0;
}
}
}
PROGRAM WINDOW
INTERFACING DIAGRAM
RESULT
DC motor was interfaced successfully to PIC16F877A
Expt No: 8
Date:26.3.2015
i. Assign RC$=0
9. Stop
THEORY
The interrupt is triggered by an input on RB0, either as the signal goes from 0 to 1, called rising
edge, or as falling edge. This sets the interrupt flag ,and if the interrupt is enabled the
microcontroller goes to the interrupt subroutine ,The use of the RB0/Into to manage interrupt
externally generated requires the setting of a couple of registers of the PIC microcontroller that
are INTCON and OPTION_REG.
PROGRAM
#include<pic.h>
bit flag=0;
void interrupt intt()
{
INTF=0;
if(flag==1)
{
RC4=1;
// LED ON
flag=0;
}
else
{
RC4=0;
flag=1;
}
}
void main()
{
// LED OFF
TRISC4=0;
TRISB0=1;
RBPU=0;
INTE=1;
ADCON1=0X07;
while(1);
}
PROGRAM WINDOW
INTERFACING DIAGRAM
RESULT
LED is interfaced to PIC16F877A and controlled using external interrupt
Expt No: 9
Date:28.3.2015
Receiver
1. Start
2. Assign RC7 as RX input
3. Enable reception bits
4. Enable all interrupt bits
5, Set Baud rate to 9600 by assigning SPBRG =129
6 .Initialize LCD registers
7. Check if RCIF=1 and go to interrupt ()
a. Clear RCIF
b. Assign b=RCREG
c. Display the value of b in LCD
8. Stop
THEORY
USART (Universal Synchronous Asynchronous Receiver transmitter)located within the
PIC is universal communication component, which can be used as transmitter or as receiver. in
this experiment we will set USART in order to allow communication between PC to PIC or
between PIC to PC. If switch SW1 at the transmitter is closed, it continuously transmit the word
ASIET
PROGRAM
TRANSMITTER
#include<pic.h>
char a[6]="ASIET";
void delay(long g)
{
int i,j; for(i=0;i<=g;i++)
{
for(j=0;j<255;j++);
}
}
void data(char k)
{
TXREG=k;
while(TRMT==0);
// delay function
void main()
{
TRISD=0xFF;
TRISC=0;
TX9=0;
// 9th bit
TXEN=1;
SYNC=0;
BRGH=1;
SPBRG=129;
SPEN=1;
while(1)
{
if (RD0==0)
{
for(int i=0;i<6;i++)
{
data(a[i]);
delay(300);
}
}
}
// baud rate=9600
PROGRAM WINDOW
INTERFACING DIAGRAM
RECIEVER
PROGRAM:
#include<pic.h>
void delay(long g)
{
int i,j;
for(i=0;i<=g;i++)
{
for(j=0;j<255;j++);
}
}
void lcd_cmd(char lcd_k)
{
RE0=0;
RE1=0;
PORTD=lcd_k;
RE2=1;
delay(1);
RE2=0;
}
void lcd_data(char lcd_c)
{
RE0=1;
RE1=0;
PORTD=lcd_c;
RE2=1;
delay(1);
RE2=0;
}
void lcd_initiltn()
{
ADCON1=0X82;
TRISE0=0;
TRISE1=0;
TRISE2=0;
TRISD=0;
delay(15);
lcd_cmd(0x30);
delay(5);
lcd_cmd(0x30);
delay(1);
lcd_cmd(0x30);
delay(1);
lcd_cmd(0x38);
lcd_cmd(0x0c);
lcd_cmd(0x06);
lcd_cmd(0x01);
lcd_cmd(0x80);
}
void interrupt reception()
{
char b;
RCIF=0;
b=RCREG;
lcd_data(b);
}
void main()
{
TRISC7=1;
RX9=0;
SYNC=0;
BRGH=1;
SPBRG=129;
SPEN=1;
CREN=1;
lcd_initiltn();
// baudrate=9600
PROGRAM WINDOW
INTERFACING DIAGRAM
RESULT
USART was interfaced successfully to PIC16F877A.
Expt No: 10
Date:28.3.2015
ii Assign a=100
d. Assign TMR0=0X3C
10. Stop
THEORY
PIC 16F877 has 3 different timers PIC Timer0, PIC Timer1, PIC Timer2.We can use
these timers for various important purposes. So for we used delay procedure to implement
some delay in the program, that was counting up to a specific value, before the program could
be continued. Delay procedure had two disadvantages. Now using Timers we can build a very
precise time delays which will be based on the system clock and allow us to achieve our desired
time delay well known in advance PIC Timer Timer 0.
Design
PROGRAM
#include<pic.h>
unsigned int a;
void interrupt time()
{
TMR0IF=0;
a=a-1;
if (a==0)
{
PORTB=~PORTB;
a=100;
}
TMR0=0x3c;
counter whenever the overflow occurs
}
void main()
{
a=100;
TRISB=0x00;
T0CS=0;
T0SE=0;
PSA=0;
PS2=1;
PS1=2;
PS0=1;
GIE=1;
// Interrupt enable
PEIE=1;
TMR0IE=1;
PORTB=0xFF;
TMR0=0x3c;
10mS.
while (1);
}
PROGRAM WINDOW
INTERFACING DIAGRAM
OUTPUT WINDOW
RESULT
Square wave is generated using PIC16F877A with time period 20ms