IR sensor interfacing 8051

Status
Not open for further replies.

vead

Full Member level 5
Joined
Nov 27, 2011
Messages
285
Helped
3
Reputation
6
Reaction score
3
Trophy points
1,298
Location
india
Activity points
3,815
Hello
I Need help, I have connected IR module with P89v51RD2. I have written C code I am just testing that IR sensor is working or not

MCU : P89v51RD2
compiler : Keil

If output of IR sensor is high turn ON LED
If output of IR sensor is low turn OFF LED


Pin 1 is the output connected with P0.0
Pin 2 is ground
Pin 3 is VCC, connect to 5V


Code C - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
/*--------------------------------------------------------------------------
P89V51Rx2.H
Registers definition for Philips P89V51Rx2
 
Copyright (c) 2007 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
-------------------------------------------------------------------------- */
 
/* Byte Addresses */
sfr   P0        = 0x80;
sfr   SP        = 0x81;
sfr   DPL        = 0x82;
sfr   DPH        = 0x83;
sfr   WDTD        = 0x85;
sfr   SPDAT        = 0x86;
sfr   PCON        = 0x87;
sfr   TCON        = 0x88;
sfr   TMOD        = 0x89;
sfr   TL0        = 0x8A;
sfr   TL1        = 0x8B;
sfr   TH0        = 0x8C;
sfr   TH1        = 0x8D;
sfr   AUXR        = 0x8E;
sfr   P1        = 0x90;
sfr   SCON        = 0x98;
sfr   SBUF        = 0x99;
sfr   P2        = 0xA0;
sfr   AUXR1        = 0xA2;
sfr   IEN0        = 0xA8;
sfr   SADDR        = 0xA9;
sfr   SPCFG        = 0xAA;
sfr   P3        = 0xB0;
sfr   FCF        = 0xB1;
sfr   FST        = 0xB6;
sfr   IP0H        = 0xB7;
sfr   IP0        = 0xB8;
sfr   SADEN        = 0xB9;
sfr   WDTC        = 0xC0;
sfr   T2CON        = 0xC8;
sfr   T2MOD        = 0xC9;
sfr   RCAP2L        = 0xCA;
sfr   RCAP2H        = 0xCB;
sfr   TL2        = 0xCC;
sfr   TH2        = 0xCD;
sfr   PSW        = 0xD0;
sfr   SPCTL        = 0xD5;
sfr   CCON        = 0xD8;
sfr   CMOD        = 0xD9;
sfr   CCAPM0        = 0xDA;
sfr   CCAPM1        = 0xDB;
sfr   CCAPM2        = 0xDC;
sfr   CCAPM3        = 0xDD;
sfr   CCAPM4        = 0xDE;
sfr   ACC        = 0xE0;
sfr   IEN1        = 0xE8;
sfr   CL        = 0xE9;
sfr   CCAP0L        = 0xEA;
sfr   CCAP1L        = 0xEB;
sfr   CCAP2L        = 0xEC;
sfr   CCAP3L        = 0xED;
sfr   CCAP4L        = 0xEE;
sfr   B        = 0xF0;
sfr   IP1H        = 0xF7;
sfr   IP1        = 0xF8;
sfr   CH        = 0xF9;
sfr   CCAP0H        = 0xFA;
sfr   CCAP1H        = 0xFB;
sfr   CCAP2H        = 0xFC;
sfr   CCAP3H        = 0xFD;
sfr   CCAP4H        = 0xFE;
 
/* Bit Addresses */
 
/* P0 */
sbit   AO        = P0^0;
sbit   EXTRAM        = P0^1;
 
/* TCON */
sbit   IT0        = TCON^0;
sbit   IE0        = TCON^1;
sbit   IT1        = TCON^2;
sbit   IE1        = TCON^3;
sbit   TR0        = TCON^4;
sbit   TF0        = TCON^5;
sbit   TR1        = TCON^6;
sbit   TF1        = TCON^7;
 
/* P1 */
sbit   T2EX        = P1^1;
sbit   ECI        = P1^2;
sbit   CEX0        = P1^3;
sbit   CEX1        = P1^4;
sbit   CEX2        = P1^5;
sbit   CEX3        = P1^6;
sbit   CEX4        = P1^7;
 
/* SCON */
sbit   RI        = SCON^0;
sbit   TI        = SCON^1;
sbit   RB8        = SCON^2;
sbit   TB8        = SCON^3;
sbit   REN        = SCON^4;
sbit   SM3        = SCON^5;
sbit   SM1        = SCON^6;
sbit   SM0        = SCON^7;
 
/* P2 */
sbit   DPS        = P2^0;
sbit   GF2        = P2^3;
 
/* IEN0 */
sbit   EX0        = IEN0^0;
sbit   ET0        = IEN0^1;
sbit   EX1        = IEN0^2;
sbit   ET1        = IEN0^3;
sbit   ES0        = IEN0^4;
sbit   ET2        = IEN0^5;
sbit   EC        = IEN0^6;
sbit   EA        = IEN0^7;
 
/* P3 */
sbit   RxD        = P3^0;
sbit   TxD        = P3^1;
sbit   INT0        = P3^2;
sbit   INT1        = P3^3;
sbit   T0        = P3^4;
sbit   T1        = P3^5;
sbit   WR        = P3^6;
sbit   RD        = P3^7;
 
/* IP0 */
sbit   PX0        = IP0^0;
sbit   PT0        = IP0^1;
sbit   PX1        = IP0^2;
sbit   PT1       = IP0^3;
sbit   PS        = IP0^4;
sbit   PT2        = IP0^5;
sbit   PPC        = IP0^6;
 
/* WDTC */
sbit   SWDT        = WDTC^0;
sbit   WDT        = WDTC^1;
sbit   WDTS        = WDTC^2;
sbit   WDRE        = WDTC^3;
sbit   WDOUT        = WDTC^4;
 
/* T2CON */
sbit   RL2        = T2CON^0;
sbit   T2        = T2CON^1;
sbit   TR2        = T2CON^2;
sbit   EXEN2        = T2CON^3;
sbit   TCLK        = T2CON^4;
sbit   RCLK        = T2CON^5;
sbit   EXF2        = T2CON^6;
sbit   TF2        = T2CON^7;
 
/* PSW */
sbit   P        = PSW^0;
sbit   F1        = PSW^1;
sbit   OV        = PSW^2;
sbit   RS0        = PSW^3;
sbit   RS1        = PSW^4;
sbit   F0        = PSW^5;
sbit   AC        = PSW^6;
sbit   CY        = PSW^7;
 
/* CCON */
sbit   CCF0        = CCON^0;
sbit   CCF1        = CCON^1;
sbit   CCF2        = CCON^2;
sbit   CCF3        = CCON^3;
sbit   CCF4        = CCON^4;
sbit   CR        = CCON^6;
sbit   CF        = CCON^7;           
 
 
 
sbit LED_pin = P2^0; //Defining LED PIN
sbit sensor_pin = P0^0; //Defining output of sensor  PIN
 
void Delay(int); //Function prototype declaration
 
void main (void)
{
  sensor_pin = 0; // if sensor is low 
  LED_pin=0; //LED off 
 
  while(1) //infinite loop
  {
    if(sensor_pin == 1 ) //If sensor is high 
    {
      LED_pin = 1; //LED ON
      Delay(2000); //Delay
      LED_pin = 0; //LED OFF
    }
  }
}
 
void Delay(int k)
{
  int j;
  int i;
  for(i=0;i<k;i++)
  {
    for(j=0;j<100;j++)
    {
    }
  }
}



I don't understand why LED is not turn ON/OFF also I am not sure that IR sensor is working ?
 

Attachments

  • IMG_20151011_090103.jpg
    4.3 MB · Views: 73

well, most IR sensors, outputs 1 on idle state, and only sends a 0 when it detects a burst of IR signal... so your code actually turns on the LED for 2 seconds (assuming your Delay routine is calibrated on ms) but how much time does it turns off? around 2us, which makes it unnoticeable...

if you want to blink when the IR sensor get a 1. change the loop to:
Code:
    if(sensor_pin == 1 ) //If sensor is high 
    {
      LED_pin = 1; //LED ON
      Delay(1000); //Delay
      LED_pin = 0; //LED OFF
      Delay(1000); //Delay
    }

if you want to turn on the led when you receive a 1 and turn off when you receive a 0 , omit the Delay and use an else:
Code:
    if(sensor_pin == 1 ) //If sensor is high 
    {
      LED_pin = 1; //LED ON
    }
    else
    {
      LED_pin = 0; //LED OFF

    }
 

I tried with below code but LED does not turn ON/OFF, how to know that IR module is working ?
Code:
sbit LED_pin = P2^0; //Defining LED PIN
sbit sensor_pin = P0^0; //Defining output of sensor  PIN

void Delay(int); //Function prototype declaration

void main (void)
{
  sensor_pin = 0; // if sensor is low 
  LED_pin=0; //LED off 

  while(1) //infinite loop
  {
    if(sensor_pin == 1 ) //If sensor is high 
    {
      LED_pin = 1; //LED ON
    }
    else
    {
      LED_pin = 0; //LED OFF

    }
  }
}

void Delay(int k)
{
  int j;
  int i;
  for(i=0;i<k;i++)
  {
    for(j=0;j<100;j++)
    {
    }
  }
}
 

uh oh! I missed this part!!! sensor pin should be input!!!!
Code:
void main (void)
{
  sensor_pin = 1; // only logic 1 can be input in any MCS-51 arch

led could be any starting value (0 is ok)
 

Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…