We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I have several identical devices which I want to connect to differing port pins. I want to pass to my function, which device, and then have the function perform a switch statement dynamically assigning clock, oe, strobe, data lines to the port pins for that device. For example, function(int ic) sbit CLOCK; sbit DATA_OUT; sbit OE; sbit STROBE; switch(chip){ case 0: CLOCK = P1^0; DATA_OUT = P1^2; OE = P1^7; STROBE = P3^4; break; case 1: sbit CLOCK = P1^0; sbit DATA_OUT = P1^2; sbit OE = P1^7; sbit STROBE = P3^4; break; } but the compiler pukes on this--giving syntax error near each 'sbit' declaration and use. However, if I declare the sbit's fixed at the top of the file, the compiler is happy-- but then I would have to duplicate the function with multiple copies referencing the port pins in question for that device. Any ideas on how to make this work? THanks!
I had a similar problem when I wanted to implement 4 dallas 1wire ports. I used a case statement to select each of the ports. This is a little wasteful, but the code is simple, obvious and it works. Can you not have your relay drivers share a common clock and latch, with a differing port pin for the data? That way you can update a number of the relay drivers in the one loop, thus saving some time. Another way is to structure your program so that the delay of sending the data to a string of your relay drivers is not a problem - in an interrupt routine maybe?