Pic16f887 Programs
Pic16f887 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);
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);
address(0XC0);
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