EngineersGarage

  • Engineers Garage Main Site
  • Visit our active EE Forums
    • EDABoard.com
    • Electro-Tech-Online
  • Projects & Tutorials
    • Circuits
    • Electronic Projects
    • Tutorials
    • Components
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • Advertise
You are here: Home / Replies / #define _XTAL_FREQ 8000000

#define _XTAL_FREQ 8000000

|

Microcontroller › PIC › PIC18F4550 HC-SR04 and PWM on Assembler › #define _XTAL_FREQ 8000000

August 3, 2015 at 12:59 pm #13133
Prabakaran P M
Participant

#define _XTAL_FREQ 8000000

#define RS RD2
#define EN RD3
#define D4 RD4
#define D5 RD5
#define D6 RD6
#define D7 RD7

#include <xc.h>
#include "lcd.h";
#include <pic16f877a.h>

// BEGIN CONFIG
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = ON
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF
//END CONFIG

int a;

void interrupt echo()
{
if(RBIF == 1) //Makes sure that it is PORTB On-Change Interrupt
{
RBIE = 0; //Disable On-Change Interrupt
if(RB4 == 1) //If ECHO is HIGH
TMR1ON = 1; //Start Timer
if(RB4 == 0) //If ECHO is LOW
{
TMR1ON = 0; //Stop Timer
a = (TMR1L | (TMR1H<<8))/58.82; //Calculate Distance
}
}
RBIF = 0; //Clear PORTB On-Change Interrupt flag
RBIE = 1; //Enable PORTB On-Change Interrupt
}
void main()
{
TRISB = 0b00010000; //RB4 as Input PIN (ECHO)
TRISD = 0x00; // LCD Pins as Output
GIE = 1; //Global Interrupt Enable
RBIF = 0; //Clear PORTB On-Change Interrupt Flag
RBIE = 1; //Enable PORTB On-Change Interrupt

Lcd_Init();

Lcd_Set_Cursor(1,1);
Lcd_Write_String("Developed By");
Lcd_Set_Cursor(2,1);
Lcd_Write_String("electroSome");

__delay_ms(3000);
Lcd_Clear();

T1CON = 0x10; //Initialize Timer Module

while(1)
{
TMR1H = 0; //Sets the Initial Value of Timer
TMR1L = 0; //Sets the Initial Value of Timer

RB0 = 1; //TRIGGER HIGH
__delay_us(10); //10uS Delay
RB0 = 0; //TRIGGER LOW

__delay_ms(100); //Waiting for ECHO
a = a + 1; //Error Correction Constant

if(a>=2 && a<=400) //Check whether the result is valid or not
{
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Write_String("Distance = ");

Lcd_Set_Cursor(1,14);
Lcd_Write_Char(a%10 + 48);

a = a/10;
Lcd_Set_Cursor(1,13);
Lcd_Write_Char(a%10 + 48);

a = a/10;
Lcd_Set_Cursor(1,12);
Lcd_Write_Char(a%10 + 48);

Lcd_Set_Cursor(1,15);
Lcd_Write_String("cm");
}
else
{
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Write_String("Out of Range");
}
__delay_ms(400);
}
}

 


LCD.H


 

//LCD Functions Developed by electroSome
 
 
void Lcd_Port(char a)
{
if(a & 1)
D4 = 1;
else
D4 = 0;
 
if(a & 2)
D5 = 1;
else
D5 = 0;
 
if(a & 4)
D6 = 1;
else
D6 = 0;
 
if(a & 8)
D7 = 1;
else
D7 = 0;
}
void Lcd_Cmd(char a)
{
RS = 0;             // => RS = 0
Lcd_Port(a);
EN  = 1;             // => E = 1
        __delay_ms(4);
        EN  = 0;             // => E = 0
}
 
Lcd_Clear()
{
Lcd_Cmd(0);
Lcd_Cmd(1);
}
 
void Lcd_Set_Cursor(char a, char b)
{
char temp,z,y;
if(a == 1)
{
 temp = 0x80 + b – 1;
z = temp>>4;
y = temp & 0x0F;
Lcd_Cmd(z);
Lcd_Cmd(y);
}
else if(a == 2)
{
temp = 0xC0 + b – 1;
z = temp>>4;
y = temp & 0x0F;
Lcd_Cmd(z);
Lcd_Cmd(y);
}
}
 
void Lcd_Init()
{
  Lcd_Port(0x00);
   __delay_ms(20);
  Lcd_Cmd(0x03);
__delay_ms(5);
  Lcd_Cmd(0x03);
__delay_ms(11);
  Lcd_Cmd(0x03);
  /////////////////////////////////////////////////////
  Lcd_Cmd(0x02);
  Lcd_Cmd(0x02);
  Lcd_Cmd(0x08);
  Lcd_Cmd(0x00);
  Lcd_Cmd(0x0C);
  Lcd_Cmd(0x00);
  Lcd_Cmd(0x06);
}
 
void Lcd_Write_Char(char a)
{
   char temp,y;
   temp = a&0x0F;
   y = a&0xF0;
   RS = 1;             // => RS = 1
   Lcd_Port(y>>4);             //Data transfer
   EN = 1;
   __delay_us(40);
   EN = 0;
   Lcd_Port(temp);
   EN = 1;
   __delay_us(40);
   EN = 0;
}
 
void Lcd_Write_String(char *a)
{
int i;
for(i=0;a!='';i++)
  Lcd_Write_Char(a);
}
 
void Lcd_Shift_Right()
{
Lcd_Cmd(0x01);
Lcd_Cmd(0x0C);
}
 
void Lcd_Shift_Left()
{
Lcd_Cmd(0x01);
Lcd_Cmd(0x08);
}
 

RSS Recent Posts

Stay Up To Date

Newsletter Signup
EngineersGarage

Copyright © 2026 Arrowfly LLC. All Rights Reserved. The material on this site may not be reproduced, distributed, transmitted, cached or otherwise used, except with the prior written permission of Arrowfly
Privacy Policy | Advertising

Search Engineers Garage

  • Engineers Garage Main Site
  • Visit our active EE Forums
    • EDABoard.com
    • Electro-Tech-Online
  • Projects & Tutorials
    • Circuits
    • Electronic Projects
    • Tutorials
    • Components
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • Advertise