View previous topic :: View next topic |
Author |
Message |
ycho87
Joined: 11 Mar 2011 Posts: 7
|
checking Sequence |
Posted: Sat Apr 02, 2011 1:06 pm |
|
|
Hi
I am trying to check the sequence using if statement.
first : IR1 and IR3 goes low and IR2 and IR4 stay high
check by while loop, if it is true then go to next if statement.
second : IR1 ,IR2,IR3 and IR4 all goes low.
check by while loop, if it is true then go to next if statement.
lastly :IR1 and IR3 goes high and IR2 and IR4 stay low.
if fulfill above requirement, LCD will increment by one.
I had wrote the program but the program doesn't work.
can someone figure out the problem for me.
below is my code
Code: |
#include <16f877a.h>
#use delay(clock=20000000)
#fuses hs,noprotect,nowdt,nolvp
#define use_portb_lcd TRUE
#include <lcd.c>
#define IR1 Pin_A0
#define IR2 Pin_A1
#define IR3 Pin_A3
#define IR4 Pin_A4
void main()
{
int people_in = 0, people_out = 0;
set_tris_a(0b00001111);
lcd_init();
lcd_putc("\fAutomatic Room");
lcd_putc("\nLight Controller");
delay_ms(5000);
lcd_putc("\f");
display_1st :
lcd_gotoxy(1,1);
lcd_putc("People in = \n");
lcd_putc("People out = \n");
lcd_gotoxy(14,1);
printf(lcd_putc,"%3u",people_in);
do{
if (input(IR1)==0 && input(IR3) ==0 && input(IR2)==1 && input(IR4)==1)
{
while((input(IR1) && input(IR3)) ^ (input(IR2) && input(IR4))); // (0 AND 0) = 0 (1 AND 1) = 1 0 XOR1 = 1= TRUE
if (input(IR1)==0 && input(IR3) ==0 && input(IR2)==0 && input(IR4)==0)
{
while((!input(IR1) && !input(IR3)) && (!input(IR2) && !input(IR4))); // 1 AND 1 AND 1 AND 1 = 1 = TRUE
if (input(IR1)==1 && input(IR3) ==1 && input(IR2)==0 && input(IR4)==0)
{
people_in += 1;
lcd_gotoxy(14,1);
printf(lcd_putc,"%3u",people_in);
}
while((input(IR1) && input(IR3)) ^ (input(IR2) && input(IR4)));
}
}
}while(1);
}
|
|
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9245 Location: Greensville,Ontario
|
|
Posted: Sat Apr 02, 2011 2:26 pm |
|
|
First error I see is that you've set A4 to be an output....
Another reason to NOT use the set_tris_x().. commands but let the compiler do it for you automatically....
It maybe easier for you to just read the port and compare to the required conditions...I know it is for me ! and less chance of getting the syntax wrong. ! |
|
|
ycho87
Joined: 11 Mar 2011 Posts: 7
|
|
Posted: Sat Apr 02, 2011 2:51 pm |
|
|
Hi temtronic
Quote: | It maybe easier for you to just read the port and compare to the required conditions...I know it is for me ! and less chance of getting the syntax wrong. ! |
can you tell me how to do that?
thanks |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sun Apr 03, 2011 3:22 pm |
|
|
Quote: | can you tell me how to do that?
|
This program shows how to read miscellaneous port pins, and pack them
into a byte. (Or in your case, into the lower 4 bits of a byte).
Then you can just do a test (with an 'if' statement) of the byte's value.
See the following post:
http://www.ccsinfo.com/forum/viewtopic.php?t=18949&start=8 |
|
|
|