??? 01/19/10 08:39 Read: times |
#172586 - table lookup Responding to: ???'s previous message |
The lookup table together with the IRQ routine allows you to set Port1 with its 8 output pin (P1_0, P1_1, P1_2, ... P1_7) to any value with a time resolution of 0.1ms and a cyclic repetition of the pattern every 18 ms.
Maybe it helps to think of it as a kind of a (arbitrary) binary function generator with 8 outputs, fixed 0.1ms resolution and fixed pattern length of 180 entries. Taking servo(12,10,15,14); of your posted code as example. You'd want to setup the table so it gives you 0x0f, /* 0.0 ms: pin0=1, pin1=1, pin2=1, pin3=1, pin4..7= 0 */ 0x0f, /* 0.1 ms: same */ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0b, /* 1.0 ms: pin0=1, pin1=1, pin2=0, pin3=1, pin4..7= 0 */ 0x0b, 0x03, /* 1.2 ms: pin0=1, pin1=1, pin2=0, pin3=0, pin4..7= 0 */ 0x03, 0x02, /* 1.4 ms: pin0=0, pin1=1, pin2=0, pin3=0, pin4..7= 0 */ 0x00, /* 1.5 ms: pin0=0, pin1=0, pin2=0, pin3=0, pin4..7= 0 */ 0x00, 0x00, ... /* another 162 zero's following here */ when the table contents are read and fed to P1 with: P1 = table_P1_over_time [ ms_tenth_countdown ]; (Note, I used a countdown to index the table so the compiler could later make use of the compact djnz instruction) |