Page 89 - Making PIC Microcontroller Instruments and Controllers
P. 89

t    servofpotenriomerers
                                                        rrrree pore,ltiomere.s
                     llll]l:   -5.. 1                                      corro,t,ns  ore
                     servo:  coine.l  lhe servo ro  Jurrpe.  J7 lo.ft  s p.ogra.r|t  tContinued)
                     SERVO1  VAt  PORTC.I            alias  servo  pin
                     ADCIN  O,  A2D  VII-UE
                                                     read  channel  0  ro  A2D Value
                     OPTION_REG  E   S01111111       enable  PORTB pullups
                     IJOW SERVO1
                                                     servo  outpur  low
                     GOSUB  CENTER
                     ITCDOUE  $FE,  1                cLears  screen  only
                     poRTB  =  0
                                                     PORTB  lines   1ow  ro  read  buttons
                     TRISB  =  %11111110
                                                     enable  f,rst  button   rod
                                                    nain  prosrar   loop
                    !'AINIOOP:
                                                    check  aay  but.  pressed  ro
                      IF  PORIB.4   =  0  TBEN  GOS('B
                      IF  PORIB.5   =  0  TEEN  GOSITBCEN!ER
                      IF  PORTB.6  =  0  THEN  COSUB RIGIIT
                      a.Dcrar 0,  a2D_vAIrnE
                                                           read  channel  0  to  a2D_Value
                      ADCIN  1.  A2D_VAIUEI
                                                          read  channeL  1to   A2D_vatue  1
                      ADCIN  3,  A2D_VAI,I'E2
                                                          read  channet  2  to  AZD Vatue  2
                      MAXPOS  =1500  +  A2D-VALUE1*3
                      MINPOS =1500  -   A2D-v!!UEt*3
                      CENTERPOS=1500+3*  (A2D_vaJ)vE_
                                                      I27
                      POSSIEP  =A2D  VATUE2/1O  +1
                      SERVO1  =  1                        start   servo  putse
                      PAUSEUS  POS
                      SERVOI  =  0                        end  serwo  pulse
                      I]CDOUT  $FEI  $80,   \POS=-,   DEC  pOS
                      IJCDOUE  $FE,  $CO,  DEC A2D  VATUE,  /  \,DEC   A2D VAIrtEl,/   s
                    POSSTEP,  a  \                                                 ,  DEC_
                      PAUSE  10
                                                        ;  servo  update  rate  about  60  Hz
                    GOTO  !'AINI]OOP
                                                        ;  do  ir  all   forever
                                                        ;  move servo  Lefr
                    LEFT:   IF  POS  < llA)(POS  THEN  pOS  =  pOS  +  POSSTEp
                    RETURN
                                                        .  v o . ^
                                                               - - _ . o  ! : q .
                    RIGHT:  IF  POS >  UTAIPOS  TIIEN  POS  =  POS  -  POSSTE'
                    RETURN
                    CENTER3  POS  = 150  0+3* (A2D  VA',IIE_127)
                   REEUXN
                   END
                                                        ,  end  proqran

                  Exercises



                  Carlion:  Thinking  requiredl
                    An.q  e^ ro lh.4e probjem\  dn Mt prc,  ida1.  there  are no  unrque  .oturion\.
                    rlr(e mcunp  Innrumenl.  rnd  ronlroller,  i, rcdll)  allabour  input.  and ouFul,  and
                  what you  do wirh  them,  a  comprehensive
                                                   ser of  exelc;*.,fr"  t-,   .p*in""fiy  J, i"p"i"
                  ancl  outputs  are  prorided.
   84   85   86   87   88   89   90   91   92   93   94