0% found this document useful (0 votes)
18 views

Pic16f887 Programs

Uploaded by

ROHITH KANNAN
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views

Pic16f887 Programs

Uploaded by

ROHITH KANNAN
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 58

EMBEDDED PROGRAMS

1 .LED

#include<pic.h>
void delay(unsigned int a)
{
while(a--);
}
void main()
{
TRISA=0X00;
PORTA=0X00;
ANSEL=0X00;
ANSELH=0X00;
while(1)
{
PORTA=0X01;
delay(1000);
PORTA=0X00;
delay(1000);
}
}
2 . SWITCH / PUSH BUTTON

#include<pic.h>
#define SWITCH1 RA0
#define SWITCH2 RA1
#define LED1 RB0
#define LED2 RB1
void main()
{
TRISA=0X03;
PORTA=0X00;
TRISB=0X00;
PORTB=0X00;
ANSEL=0X00;
ANSELH=0X00;
while(1)
{
if(SWITCH1==1)
{
RB0=1;
}
else
{
RB0=0;
}
if(SWITCH2==1)
{
RB1=1;
}
else
{
RB1=0;
}
}
}
3. SINGLE SEGMENT
#include<pic.h>
#define SEGMENT PORTB
int segment_array[11]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X3F};

int iter;
void delay(unsigned int a)
{
while(a--);
}
void main()
{
TRISB=0X00;
PORTB=0X00;
ANSEL=0X00;
ANSELH=0X00;
while(1)
{
for(iter=0;iter<=10;iter++)
{
SEGMENT= segment_array[iter];
delay(25000);
}
}
}
4. DOUBLE SEGMENT

#include<pic.h>
int s[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
int A=97;
int A1,A2;
void delay(unsigned int a)
{
while(a--);
}
void main()
{
TRISC=0X00;
PORTC=0X00;
TRISD=0X00;
PORTD=0X00;
ANSEL=0X00;
ANSELH=0X00;

while(1)
{
A1=A/10;
A2=A%10;
RC0=1;RC1=0;
PORTD=s[A1];
delay(5000);

RC0=0;RC1=1;
PORTD=s[A2];
delay(5000);
}
}

5. FOUR SEGMENT

#include<pic.h>
int input,firstDigit,secondDigit,thirdDigit,fourthDigit;
int segment[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
void delay(unsigned int a)
{
while(a--);
}

void main()
{
TRISC=0X00;
PORTC=0X00;
TRISB=0X00;
PORTB=0X00;
ANSEL=0X00;
ANSELH=0X00;

input = 1234;
fourthDigit=input%10;
input/=10;
thirdDigit=input%10;
input/=10;
secondDigit=input%10;
firstDigit=input/10;

while(1)
{
RC0=1, RC1=0, RC2=0, RC3=0;
PORTB = segment[firstDigit];
delay(3000);

RC0=0, RC1=1, RC2=0, RC3=0;


PORTB = segment[secondDigit];
delay(5000);

RC0=0, RC1=0, RC2=1, RC3=0;


PORTB = segment[thirdDigit];
delay(3000);

RC0=0, RC1=0, RC2=0, RC3=1;


PORTB = segment[fourthDigit];
delay(5000);
}
}

6. KEYPAD

#include<pic.h>
#define R1 RB0
#define R2 RB1
#define R3 RB2
#define R4 RB3
#define C1 RB4
#define C2 RB5
#define C3 RB6
#define SEGMENT PORTD

int SEG[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
void delay(unsigned int a)
{
while(a--);
}
void main()
{
TRISB=0X70;
PORTB=0X00;
TRISD=0X00;
PORTD=0X00;
ANSEL=0X00;
ANSELH=0X00;

while(1)
{
R1=1;R2=0;R3=0;R4=0;
if(C1==1)
{
SEGMENT=SEG[1];
while(C1==1);
}
if(C2==1)
{
SEGMENT=SEG[2];
while(C2==1);
}
if(C3==1)
{
SEGMENT=SEG[3];
while(C3==1);
}
R1=0;R2=1;R3=0;R4=0;
if(C1==1)
{
SEGMENT=SEG[4];
while(C1==1);
}
if(C2==1)
{
SEGMENT=SEG[5];
while(C2==1);
}
if(C3==1)
{
SEGMENT=SEG[6];
while(C3==1);
}
R1=0;R2=0;R3=1;R4=0;
if(C1==1)
{
SEGMENT=SEG[7];
while(C1==1);
}
if(C2==1)
{
SEGMENT=SEG[8];
while(C2==1);
}
if(C3==1)
{
SEGMENT=SEG[9];
while(C3==1);
}
}
}
7.LCD DISPLAY

#include<pic.h>
#define LCD PORTD
#define LCD_ENABLE RE0
#define READ_WRITE RE1
#define REGISTER_SELECT RE2
void DELAY(int COUNT)
{
while(COUNT--);
}
void LCD_PULSE()
{
LCD_ENABLE=1;
DELAY(1000);
LCD_ENABLE=0;
DELAY(1000);
}
void LCD_TYPE()
{
READ_WRITE=0;
REGISTER_SELECT=0;
LCD=0X38;
LCD_PULSE();
}
void LCD_ON()
{
READ_WRITE=0;
REGISTER_SELECT=0;
LCD=0X0E;
LCD_PULSE();
}
void LCD_ADDRESS(int SET_CURSOR)
{
READ_WRITE=0;
REGISTER_SELECT=0;
LCD=SET_CURSOR;
LCD_PULSE();
}
void LCD_DATA(char LCD_DATAS)
{
READ_WRITE=0;
REGISTER_SELECT=1;
LCD=LCD_DATAS;
LCD_PULSE();
}
void main()
{
TRISD=0X00;
PORTD=0X00;
TRISE=0X00;
PORTE=0X00;

ANSEL=0X00;
ANSELH=0X00;
LCD_TYPE();
LCD_ON();
while(1)
{
LCD_ADDRESS(0X80);
LCD_DATA(‘H’);
DELAY(2000);
LCD_ADDRESS(0XC0);
LCD_DATA(‘4’);
}
}
8.TIMER0

#include<pic.h>
#define LED1 RA0
#define LED2 RA1
int count=0;
void TIMER0()
{
if(T0IF==1)
{
count++;
}
T0IF=0;
}
void main()
{
TRISA=0X00;
PORTA=0X00;
ANSEL=0X00;
ANSELH=0X00;
OPTION_REG=0X07;
while(1)
{
TIMER0();
if(count>=0 && count<=15)
{
LED1=1;
LED2=0;
}
else if(count>=16 && count<=30)
{
LED1=0;
LED2=1;
}
else if(count>=31)
{
count=0;
}
}
}
9.TIMER1

#include<pic.h>
#define LED1 RA0
#define LED2 RA1
int count=0;

void timer()
{
if(TMR1IF==1)
{
count++;
}
TMR1IF=0;
}
void main()
{
TRISA=0X00;
PORTA=0X00;
ANSEL=0X00;
ANSELH=0X00;

T1CON=0X31;
while(1)
{
timer();
if(count>0&&count<=30)
{
LED1=1;
LED2=0;
}
if(count>30&&count<=60)
{
LED1=0;
LED2=1;
}
if(count>60&&count<=90)
{
LED1=0;
LED2=0;
}
if(count>90)
{
count=0;
}
}
}
10.TIMER2

#include<pic.h>
#define LED1 RA0
#define LED2 RA1
int count=0;
void timer()
{
if(TMR2IF==1)
{
count++;
}
TMR2IF=0;
}
void main()
{
TRISA=0X00;
PORTA=0X00;
ANSEL=0X00;
ANSELH=0X00;
T2CON=0X7F;
while(1)
{
timer();
if(count>0&&count<=15)
{
LED1=1;
LED2=0;
}
if(count>15&&count<=30)
{
LED1=0;
LED2=1;
}
if(count>30&&count<=45)
{
LED1=0;
LED2=0;
}
if(count>45)
{
count=0;
}
}
}
11.ADC

#include<pic.h>
#define EN RE0
#define RW RE1
#define RS RE2
#define LCD PORTB

int sum_of_bits=0,LSB=0,MSB=0,first=0,second=0,third=0,fourth=0,modulus1=0,
modulus2=0;
void delay(unsigned int count)
{
while(--count);
}
void pulse()
{
EN=1;
delay(1000);
EN=0;
delay(1000);
}
void type()
{
RW=0;
RS=0;
LCD=0X38;
pulse();
}
void on()
{
RW=0;
RS=0;
LCD=0X0E;
pulse();
}
void address(int cursor)
{
RW=0;
RS=0;
LCD=cursor;
pulse();
}
void data(int data_lcd)
{
RW=0;
RS=1;
LCD=data_lcd;
pulse();
}
void ADC()
{
ADCON0=0X83;
ADCON1=0X80;
while(GO);

LSB=ADRESL;
MSB=ADRESH;

if(MSB==0)
{
sum_of_bits=LSB+0;
}
if(MSB==1)
{
sum_of_bits=LSB+256;
}
if(MSB==2)
{
sum_of_bits=LSB+512;
}
if(MSB==3)
{
sum_of_bits=LSB+768;
}
first=sum_of_bits/1000;
modulus1=sum_of_bits%1000;
second=modulus1/100;
modulus2=modulus1%100;
third=modulus2/10;
fourth=third%10;
address(0x80);
data(first+0X30);
address(0x81);
data(second+0X30);
address(0x82);
data(third+0X30);
address(0x83);
data(fourth+0X30);
}
void main()
{
TRISA=0X01;
PORTA=0X00;

TRISE=0X00;
PORTE=0X00;
TRISB=0X00;
PORTB=0X00;

ANSEL=0X01;
ANSELH=0X00;

type();
on();
address(0X80);
while(1)
{
ADC();
}
}
12.UART

#include<pic.h>
#define LCD PORTD
#define EN RE0
#define RW RE1
#define RS RE2
void delay(int count)
{
while(count--);
}
void pulse()
{
EN=1;
delay(1000);
EN=0;
delay(1000);
}
void type()
{
RW=0;
RS=0;
LCD=0X38;
pulse();
}
void on()
{
RW=0;
RS=0;
LCD=0X0E;
pulse();
}
void address(int cursor)
{
RW=0;
RS=0;
LCD=cursor;
pulse();
}
void data(char value)
{
RW=0;
RS=1;
LCD=value;
pulse();
}
void display(char *string)
{
while(*string)
{
RS=1;
RW=0;
LCD=*string;
string++;
pulse();
}
}
void transmiter(char TX)
{
address(0X80);
data(TX);
TXREG=TX;
while(TXIF==0);
TXIF=0;
}
void receiver()
{
while(RCIF==0);
int RX=RCREG;
address(0XC0);
data(RX);
RCIF=0;
}
void main()
{
TRISC=0X80;
PORTC=0X00;
TRISD=0X00;
PORTD=0X00;
TRISE=0X00;
PORTE=0X00;
ANSEL=0X00;
ANSELH=0X00;
TXSTA=0X26;
RCSTA=0X90;
SPBRG=25;
type();
on();
while(1)
{
for (char iter ='A';iter<='Z';iter++)
{
transmiter(iter);
receiver();
}
}
}

13. SPI

MASTER CODING

#include<pic.h>
#define LCD PORTD
#define LCD_ENABLE RE0
#define READ_WRITE RE1
#define REGISTER_SELECT RE2
void DELAY(int COUNT)
{
while(COUNT--);
}
void LCD_PULSE()
{
LCD_ENABLE=1;
DELAY(1000);
LCD_ENABLE=0;
DELAY(1000);
}
void LCD_TYPE()
{
READ_WRITE=0;
REGISTER_SELECT=0;
LCD=0X38;
LCD_PULSE();
}
void LCD_ON()
{
READ_WRITE=0;
REGISTER_SELECT=0;
LCD=0X0E;
LCD_PULSE();
}
void LCD_ADDRESS(int SET_CURSOR)
{
READ_WRITE=0;
REGISTER_SELECT=0;
LCD=SET_CURSOR;
LCD_PULSE();
}
void LCD_DATA(char LCD_DATAS)
{
READ_WRITE=0;
REGISTER_SELECT=1;
LCD=LCD_DATAS;
LCD_PULSE();
}
void MASTER(char VALUE)
{
SSPBUF = VALUE;
LCD_ADDRESS(0x80);
LCD_DATA(VALUE);
while(SSPIF==1);
SSPIF=0;
}
void main()
{
TRISC=0X10;
PORTC=0X00;
TRISD=0X00;
PORTD=0X00;
TRISE=0X00;
PORTE=0X00;

ANSEL=0X00;
ANSELH=0X00;

SSPSTAT=0XC0;
SSPCON=0X20;

LCD_TYPE();
LCD_ON();
while(1)
{
MASTER('7');
}
}

SLAVE CODING :

#include<pic.h>
#define LCD PORTD
#define LCD_ENABLE RE0
#define READ_WRITE RE1
#define REGISTER_SELECT RE2
int RECEIVED_DATA;
void DELAY(int COUNT)
{
while(COUNT--);
}
void LCD_PULSE()
{
LCD_ENABLE=1;
DELAY(1000);
LCD_ENABLE=0;
DELAY(1000);
}
void LCD_TYPE()
{
READ_WRITE=0;
REGISTER_SELECT=0;
LCD=0X38;
LCD_PULSE();
}
void LCD_ON()
{
READ_WRITE=0;
REGISTER_SELECT=0;
LCD=0X0E;
LCD_PULSE();
}
void LCD_ADDRESS(int SET_CURSOR)
{
READ_WRITE=0;
REGISTER_SELECT=0;
LCD=SET_CURSOR;
LCD_PULSE();
}
void LCD_DATA(char LCD_DATAS)
{
READ_WRITE=0;
REGISTER_SELECT=1;
LCD=LCD_DATAS;
LCD_PULSE();
}
void SLAVE()
{
while(SSPIF==0);
RECEIVED_DATA=SSPBUF;
LCD_ADDRESS(0X80);
LCD_DATA(RECEIVED_DATA);
SSPIF=0;
}
void main()
{
TRISC=0X18;
PORTC=0X00;
TRISD=0X00;
PORTD=0X00;
TRISE=0X00;
PORTE=0X00;

ANSEL=0X00;
ANSELH=0X00;

SSPSTAT=0X40;
SSPCON=0X25;

LCD_TYPE();
LCD_ON();
while(1)
{
SLAVE();
}
}
14. SPI MULTI SLAVE
MASTER CODING :
#include<pic.h>
#define LCD PORTD
#define CHIP_SELECT_PIN1 RB0
#define CHIP_SELECT_PIN2 RB1
#define RS RE2
#define RW RE1
#define EN RE0
void delay(int count)
{
while(count--);
}
void pulse()
{
EN=1;
delay(1000);
EN=0;
delay(1000);
}
void type()
{
RS=0;
RW=0;
LCD=0X38;
pulse();
}
void on()
{
RS=0;
RW=0;
LCD=0X0E;
pulse();
}
void address(int cursor)
{
RS=0;
RW=0;
LCD=cursor;
pulse();
}
void display(char value)
{
RS=1;
RW=0;
LCD=value;
pulse();
}
void master(char *string)
{
while(*string)
{
SSPBUF=*string;
display(*string);
delay(1000);
string++;
}
while(SSPIF==0);
SSPIF=0;
}
void main()
{
TRISD=0X00;
PORTD=0X00;
TRISE=0X00;
PORTE=0X00;
TRISC=0X10;
PORTC=0X00;
TRISB=0X00;
PORTB=0X00;
ANSEL=0X00;
ANSELH=0X00;
SSPSTAT=0XC0;
SSPCON=0X20;
type();
on();
while(1)
{
CHIP_SELECT_PIN1=0;CHIP_SELECT_PIN2=1;
address(0x80);
master("IPCS");
delay(50000);

CHIP_SELECT_PIN1=1;CHIP_SELECT_PIN2=0;
address(0xC0);
master("GLOBAL");
delay(50000);
}
}

SLAVE :
#include<pic.h>
#define LCD PORTD
#define EN RE0
#define RW RE1
#define RS RE2
char receive;
void delay(int count)
{
while(count--);
}
void pulse()
{
EN=0;
delay(1000);
EN=1;
delay(1000);
}
void type()
{
RW=0;
RS=0;
LCD=0X38;
pulse();
}
void on()
{
RW=0;
RS=0;
LCD=0X0E;
pulse();
}
void address(char cursor)
{
RW=0;
RS=0;
LCD=cursor;
pulse();
}
void slave()
{
while(SSPIF==0);
receive=SSPBUF;
SSPIF=0;
RW=0;
RS=1;
LCD=receive;
pulse();
}
void main()
{
TRISA=0X20;
PORTA=0X00;
TRISC=0X18;
PORTC=0X00;
TRISD=0X00;
PORTD=0X00;
ANSEL=0X00;
TRISE=0X00;
PORTE=0X00;
ANSELH=0X00;
SSPSTAT=0X80;
SSPCON=0X34;
type();
on();
address(0X80);
while(1)
{
slave();
}
}
15.I2C

#include<pic.h>
#define LCD PORTD
#define EN RE0
#define RW RE1
#define RS RE2
char Read[5];
char iter;
void delay(unsigned int count)
{
while(count--);
}
void pulse()
{
EN=1;
delay(1000);
EN=0;
delay(1000);
}
void type()
{
RS=0;
RW=0;
LCD=0X38;
pulse();
}
void on()
{
RS=0;
RW=0;
LCD=0X0E;
pulse();
}
void address(int curser)
{
RS=0;
RW=0;
LCD=curser;
pulse();
}
void data(char value)
{
RS=1;
RW=0;
LCD=value;
pulse();
}
void check_bus_status()
{
while(SSPIF==0);
SSPIF=0;
}
void start_enable()
{
SEN=1;
check_bus_status();
}
void send(unsigned char TX)
{
ACKSTAT=1;
SSPBUF=TX;
while(ACKSTAT==1);
check_bus_status();
}
void repeated_ start_enable()
{
RSEN=1;
check_bus_status();
}
void stop_enable()
{
PEN=1;
check_bus_status();
}
unsigned char received(unsigned char iter_1)
{
char temp;
if(iter_1==6)
{
ACKDT=1;
}
else
{
ACKDT=0;
}
while(BF==0);
temp=SSPBUF;
SSPOV=0;
SSPIF=0;
ACKEN=1;
return(temp);
}
void RTC(unsigned char array[])
{
address(0X80);

data(((array[2] & 0XF0)>>4)+ 0X30);


data((array[2] & 0X0F)+0X30);
data(':');

data(((array[1] & 0XF0)>>4)+ 0X30);


data((array[1] & 0X0F)+0X30);
data(':');

data(((array[0] & 0XF0)>>4)+ 0X30);


data((array[0] & 0X0F)+0X30);
data(':');

address(0XC0);

data(((array[4] & 0XF0)>>4)+ 0X30);


data((array[4] & 0X0F)+0X30);
data(':');
data(((array[5] & 0XF0)>>4)+ 0X30);
data((array[5] & 0X0F)+0X30);
data(':');

data(((array[6] & 0XF0)>>4)+ 0X30);


data((array[6] & 0X0F)+0X30);
data(':');
}
void main()
{
TRISC=0X18;
PORTC=0X00;
TRISD=0X00;
PORTD=0X00;
TRISE=0X00;
PORTE=0X00;

ANSEL=0X00;
ANSELH=0X00;

SSPSTAT=0x80;
SSPCON=0x28;
SSPCON2=0x00;
type();
on();
address(0X80);
while(1)
{
start_enable();
send(0XD0);//SLAVE ADDRESS
send(0X00);//REGISTER ADDRESS
repeated_start_enable();
send(0XD1);
for(iter=0;iter<7;iter++)
{
RCEN=1;//RECEIVER ENABLE BIT
Read[iter]=received(iter);
}
stop_enable();
RTC(Read);
}
}
16. INTERRUPTS:
#include<pic.h>
#define led1 RD0
#define led2 RD1
//#define pb RB0
void delay(unsigned int a)
{
while(a--);
}
void interrupt ext()
{
if(INTF==1)
{
led2=1;
delay(65535);
led2=0;
delay(65535);
INTF=0;
}
}
void main()
{
PORTB=0X00;
TRISB=0X01;
PORTD=0X00;
TRISD=0X00;
ANSEL=0X00;
ANSELH=0X00;
INTCON=0XD0;
while(1)
{
led1=1;
delay(65000);
led1=0;
delay(65000);
}
}
}
17.EEPROM

#include<pic.h>
#define lcd PORTC
#define RS RE0
#define RW RE1
#define EN RE2
char d,e,f;
void delay(unsigned int z)
{
while(z--);
}
void command(unsigned char X)
{

RS=0;
RW=0;
PORTC=X;

EN=1;
delay(100);
EN=0;
delay(100);
}
void data(unsigned char Y)
{

RS=1;
RW=0;
PORTC=Y;
EN=1;
delay(100);
EN=0;
}
void init()
{
command(0x38);
command(0x0c);
command(0x01);
command(0x06);
}
void main()
{
TRISC=0X00;
PORTC=0X00;
TRISE=0X00;
PORTE=0X00;
ANSEL=0X00;
ANSELH=0X00;
unsigned int i;
init();
eeprom_write(0,'V');
eeprom_write(1,'A');
eeprom_write(2,'B');
d=eeprom_read(0);
e=eeprom_read(1);
f=eeprom_read(2);
while(1)
{
command(0x80);
data(d);
delay(1000);
data(e);
delay(1000);
data(f);
delay(1000);
}
}
HARDWARE :

__CONFIG(0X2CE4);
#define _XTAL_FREQ 4000000

You might also like