Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
Frieder Ferlemann
01/19/10 03:07
Read: 131 times
Old Europe


 
#172587 - PWM IRQ code in C, lookup table, 30 byte
Responding to: Frieder Ferlemann's previous message
Having the lookup table in xdata memory turns out to be shorter than having it in pdata memory:)

#include <8052.h>

static unsigned char ms_tenth_countdown;

// dynamically setup table.
// Indexed top down.
// setup this table glitchlessly (IRQ save).
// (located absolutely at the start of a 256 byte block)
unsigned char __xdata __at(0x0000) table_P2_over_time[200 + 1];

void Timer0_ISR (void) interrupt 1 {

    // assuming P2 is only used for servos.
    P2 = table_P2_over_time [ ms_tenth_countdown ];

    if (!--ms_tenth_countdown)
        ms_tenth_countdown = 200;

    TF0 = 0;
}

void main(void){}

 


gives:

; File Created by SDCC : free open source ANSI-C Compiler
; Version 2.9.5 #5614 (Jan  4 2010) (UNIX)

   0000                     370 _Timer0_ISR:
   0000 C0 E0               379         push    acc
   0002 C0 82               380         push    dpl
   0004 C0 83               381         push    dph
                            382 ;       servo_lookup.c:14: P2 = table_P2_over_time [ ms_tenth_countdown ];

   0006 85*00 82            383         mov     dpl,_ms_tenth_countdown
   0009 75 83 00            384         mov     dph,#(_table_P2_over_time >> 8)
   000C E0                  385         movx    a,@dptr
   000D F5 A0               386         mov     _P2,a
                            387 ;       servo_lookup.c:16: if (!--ms_tenth_countdown)
   000F D5*00 03            388         djnz    _ms_tenth_countdown,00102$
                            389 ;       servo_lookup.c:17: ms_tenth_countdown = 200;
   0012 75*00 C8            390         mov     _ms_tenth_countdown,#0xC8
   0015                     391 00102$:
                            392 ;       servo_lookup.c:19: TF0 = 0;
   0015 C2 8D               393         clr     _TF0
   0017 D0 83               394         pop     dph
   0019 D0 82               395         pop     dpl
   001B D0 E0               396         pop     acc
   001D 32                  397         reti

 


guess that's hard to beat!)

List of 41 messages in thread
TopicAuthorDate
Controlling multiple servo motors      Yash Chitalia      01/17/10 14:47      
   executing code takes time      Erik Malund      01/17/10 15:27      
      PWM code      Steve M. Taylor      01/17/10 15:35      
         Thanks...now, about the PCA timer..      Yash Chitalia      01/17/10 16:06      
   If SDCC Then Keil      Michael Karas      01/17/10 16:15      
      PWM IRQ code in C, bitops, 45 byte      Frieder Ferlemann      01/18/10 05:19      
         Optimization having no effect.      Yash Chitalia      01/18/10 11:36      
      PWM IRQ code in C, lookup table, 32 byte      Frieder Ferlemann      01/18/10 05:29      
         I haven't understood the table lookup concept very well...      Yash Chitalia      01/19/10 00:55      
            table lookup      Frieder Ferlemann      01/19/10 02:39      
         PWM IRQ code in C, lookup table, 30 byte      Frieder Ferlemann      01/19/10 03:07      
            Compiler specifics      Andy Neil      01/19/10 04:35      
               absolutely-locating xdata at 256 byte boundary      Frieder Ferlemann      01/19/10 05:00      
                  I see.      Andy Neil      01/19/10 06:34      
            An example code..      Yash Chitalia      01/20/10 02:20      
               Keil: Specifics and non-specifics      Andy Neil      01/20/10 02:50      
                  Not really working...      Yash Chitalia      01/20/10 03:55      
                     Enough power?      Per Westermark      01/20/10 09:45      
                        RE: running 32 servo motors      Andy Neil      01/20/10 10:34      
      The chip sounds perfect...      Yash Chitalia      01/18/10 11:47      
         not worth it      Erik Malund      01/18/10 12:10      
            Servo control will become difficult then...      Yash Chitalia      01/18/10 12:42      
               output      Andy Peters      01/18/10 12:52      
               HCT chips have ...      Erik Malund      01/18/10 14:12      
                  Eval a concept with a single PCA and 3:8 HCT multiplexer?      Frieder Ferlemann      01/18/10 14:36      
               Check their website      Andy Neil      01/18/10 14:44      
                  Here is the code...      Yash Chitalia      01/18/10 15:28      
                     "sbit MTRS=P2^0;" is not OK here      Frieder Ferlemann      01/18/10 16:11      
                        Keil syntax?      Andy Neil      01/18/10 17:36      
                           "#define" not working.."sbit" works      Yash Chitalia      01/18/10 23:32      
                              Yes, you were correct originally!      Andy Neil      01/19/10 01:22      
            Seconded      Andy Neil      01/18/10 12:45      
   Servo_0.1.zip      Murray R. Van Luyn      01/18/10 15:02      
      links      James Hinnant      02/18/10 21:10      
   Eventually feed the guys at http://servomaster.sf.net ?      Frieder Ferlemann      01/18/10 15:12      
      servomaster.sf.net FLOSS      James Hinnant      02/04/10 11:48      
   Maybe of some use...      James Bowmaster      02/10/10 14:40      
      Whoops... found a bug      James Bowmaster      02/10/10 16:35      
         What bug?      Andy Neil      02/10/10 16:41      
            Bug      James Bowmaster      02/10/10 18:47      
   Improved version uploaded      James Bowmaster      02/12/10 21:26      

Back to Subject List