please dont rip this site

piclist cheapic swcnt4m

 
;----------------------------------------------------------------------;
; SWCNT4M.ASM  Counts presses of a pushbutton on RB4, 4 MHz oscillator ;
;----------------------------------------------------------------------;

;                            .-----------.
;                           -|RA2     RA1|-       V+ = 4.5 or 5 Volts
;                           -|RA3     RA0|-       X = 4 MHz cer. res.
;                           -|RA4    OSC1|--|X|___ gnd
;   -{r}- = 470 ohm    V+ ---|MCLR   OSC2|--|X|  
;   -|<- = LED        gnd ---|Vss     Vdd|--- V+
;            gnd ---|<--{r}--|RB0     RB7|-         
;            gnd ---|<--{r}--|RB1     RB6|-         
;            gnd ---|<--{r}--|RB2     RB5|-       
;            gnd ---|<--{r}--|RB3     RB4|---[PB]--- gnd        
;                            '-----------'         
;                               PIC16F84      -[PB]- pushbutton

        LIST P=16F84           ;  tells which processor is used
        INCLUDE "p16f84.inc"   ;  defines various registers etc. Look
        ERRORLEVEL -224        ;  supress annoying message from tris
        __CONFIG _PWRTE_ON & _XT_OSC & _WDT_OFF   ;  config. switches


        #DEFINE pushbutton PORTB, 4      ; RB4 is pushbutton to ground
 
;----------------------------------------------------------------------;
;    Here we set up our own registers start at the 1st free address    ;
;----------------------------------------------------------------------;
           CBLOCK H'0C'
               cntmsec        ;  counter used in millisecond delays
           ENDC

           ORG 0              ;  start a program memory location zero

;----------------------------------------------------------------------;
;        First we set up all bits of PORT A and B as outputs           ;
;----------------------------------------------------------------------;
         movlw B'00000000'    ;  all bits outputs
         tris PORTA           ;  on PORT A 
         movlw B'00010000'    ;  RB4 input, all others outputs 
         tris PORTB           ;  and PORT B
         movlw 0              ;  set bit 7 of OPTION = 0 ....
         option               ;  port B pullups activated

;----------------------------------------------------------------------;
;                       This is the main program                       ;
;----------------------------------------------------------------------;
         clrf PORTB           ;  start with zero,  ( all LEDs off )
loop:
         btfsc pushbutton     ;  switch closed, (gives 0)?
         goto loop            ;  not yet, continue to wait
                              ;  switch has been detected closed
         incf PORTB, f        ;  add 1 to port B
                              ;  wait a while to make sure switch has 
                              ;  settled  (debounce closure)
         movlw D'10'          ;  wait about 10 msec
         call nmsec           ;  may be bounce on closure
                              ;  now wait for release 
         btfss pushbutton     ;  will be high (1) when released
         goto $ -1            ;  still low
                              ;  must wait, make sure bouncing stopped
         movlw D'10'          ;  10 milliseconds
         call nmsec           ;  release bounce less, but still there
                              ;  and check again
         btfss pushbutton     ;  if set, still released
         goto $ -5            ;  still low start release wait all over

         goto loop            ;  loop forever

;----------------------------------------------------------------------;
;                        time delay routines                           ;
;----------------------------------------------------------------------;
micro4      addlw H'FF'                ;  subtract 1 from 'W'
            btfss STATUS,Z             ;  skip when you reach zero
            goto micro4                ;  more loops
            return                     

                ;*** N millisecond delay routine ***
nmsec:      movwf cntmsec              ;  delay for N (in W) millisec
msecloop:   movlw D'248'               ;  1 usec for load
            call micro4                ;  this instruction is 995 usec
            nop                        ;  1 usec 
            decfsz cntmsec,f           ;  1 usec, (2 if skip taken)
            goto msecloop              ;  2 usec, loop = 995+5 = 1 msec
            return 
 
         end                  ; end of program



file: /Techref/piclist/cheapic/swcnt4m.asm, 4KB, , updated: 2000/12/8 11:45, local time: 2012/2/10 07:20,
TOP NEW HELP FIND: 
38.107.179.231:LOG IN

 ©2012 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions?
Please DO link to this page! Digg it! / MAKE! / 

<A HREF="http://www.piclist.com/tecHREF/piclist/cheapic/swcnt4m.asm"> piclist cheapic swcnt4m</A>

Did you find what you needed?

 
Stepper motors CAN be smooth!
And stepper controllers can be strong and cheap. Roman Black's Linistep stepper controller kits:
o 18th microstep
o Linear smoothing
  o Open source
o Full kit $25!
 

Robotics nuts!

Check out http://users.frii.com/dlc/robotics/projects/botproj.htm from Dennis Clark. This guy ROCKS! He has made (and sells but also releases code, docs, etc...) for a number of cool little robotic modules including whiskers, IR proximity detect and remote control, Sonar proximity detect, PWM, Servo, compass. Most of these use the little PIC 12C508 controller which costs basically nothing and is soooo tiny.
The 4 servos, 2400 baud serial servo controller is a wonder of magic and he sells the programmed chip for $8. Wow!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  .