Guest User

Untitled

a guest
Feb 19th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. list            p=16F877A        ;Controller Type
  2.    #include        <p16F877A.inc>    ;inc file from Microchip
  3.  
  4.    __CONFIG        _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC & _LVP_OFF
  5.  
  6. ; -- Variable Definition RAM --
  7. Tmp     EQU     0x0020        ;RAM Counter
  8. Chk     equ     0x0021
  9. x       equ     0x0022
  10. y       equ     0x0023
  11. op      equ     0x0024
  12. t       equ     0x0025
  13. ducy    equ     0x0026
  14.  
  15.  
  16. ; ----------------------------------
  17. ; Code
  18. ; ----------------------------------
  19.  
  20. ;Reset Vector
  21.         ORG        0x000
  22.  
  23.         call    Init
  24.  
  25. Loop
  26.  
  27.         bcf     STATUS,RP0  ;Switch back to Bank0
  28.         bsf     ADCON0,GO   ;Start ADC
  29.  
  30. IL
  31.        
  32.        
  33.         btfsc   ADCON0,GO   ;warte auf ADC
  34.         goto    IL
  35.            
  36.         movfw   ADRESH;
  37.         movwf   PORTB
  38.        
  39.         movwf   CCPR1H
  40.         movwf   CCPR2H 
  41.     ;   bsf     STATUS,RP0  ;Switch back to Bank1              
  42.    
  43.     ;   movwf   PR2
  44.         movwf   CCPR1L      ; set duty cycle
  45.         movwf   CCPR2L
  46.  
  47.         movlw   D'16'
  48.         movwf   x
  49.         movlw   D'16'
  50.         movwf   y
  51.         call    Multiply
  52.         nop
  53.         goto Loop      
  54.  
  55.  
  56. ; ----------------------------------
  57. ; Subroutines
  58. ; ----------------------------------
  59.  
  60. ; -- testet die Bits Z, DC, C auf 0, wenn keins = 0 setze Chk
  61. ; --> Underflow Check
  62. Check
  63.         bcf     Chk,0
  64.         movfw   x
  65.         movwf   Tmp
  66.         movfw   y
  67.         subwf   Tmp,1  
  68.         btfsc   STATUS,Z
  69.         return
  70.         btfsc   STATUS,DC
  71.         return
  72.         btfsc   STATUS,C
  73.         return
  74.         bsf     Chk,0
  75.         return
  76.            
  77. ; --- Dividieren       
  78. Divide 
  79.         movlw   D'0'
  80.         movwf   op
  81.         incf    y
  82.         decfsz  y   ; div / 0
  83.         goto    divLoop
  84.         goto    divEnd 
  85. divLoop call    Check
  86.         btfsc   Chk,0
  87.         goto    divEnd
  88.         incf    op
  89.         movfw   Tmp
  90.         movwf   x
  91.         goto    divLoop
  92. divEnd  movfw   op
  93.         return 
  94.        
  95. ; --- Multiplizieren
  96. Multiply
  97.         movlw   D'0'
  98.         movwf   op
  99. ty      incf    y
  100.         decfsz  y       ; multiplikation mit 0 -> x * 0
  101.         goto    tx
  102.         goto    mulEnd
  103. tx      incf    x
  104.         decfsz  x       ; multiplikation mit 0 -> 0 * y
  105.         goto    mulLoop ; x und y != 0
  106.         goto    mulEnd  ; x oder y = 0
  107. mulLoop movfw   x
  108.         addwf   op,1
  109.         decf    y
  110.         goto    ty
  111. mulEnd  movfw   op
  112.         return
  113. ;--- pwm
  114. ; software-seitig pwm-erzeugung    
  115. Pwm
  116.         movlw   D'0'
  117.         movwf   op
  118.         movfw   ducy
  119.         movwf   x
  120.         movlw   D'255'
  121.         movwf   y
  122.         call    Divide
  123.         movfw   op
  124.         movwf   y
  125.         movfw   t
  126.         movwf   x
  127.         call    Multiply   
  128.         nop
  129.         return
  130.  
  131.  
  132. Init
  133.  
  134.         bsf     STATUS,RP0  ;Bank1
  135.         movlw   B'00000000' ;RB0 LED Output
  136.         clrf    PORTB       ;LED = off
  137.        
  138.         bcf     ADCON1,PCFG0    ;Port Configuration Control bits
  139.         bcf     ADCON1,PCFG1
  140.         bcf     ADCON1,PCFG2
  141.         bcf     ADCON1,PCFG3
  142.         bcf     ADCON1,ADFM     ;Format selet left justified
  143.        
  144.        
  145.         bcf     STATUS,RP0  ;Switch back to Bank0
  146.         clrf    PORTB       ;LED = off
  147.    
  148.         bcf     ADCON0,CHS2 ; Select Channel 0 (AN0)
  149.         bcf     ADCON0,CHS1
  150.         bcf     ADCON0,CHS0
  151.         bsf     ADCON0,ADCS0    ; Set conversion Clock
  152.         bsf     ADCON0,ADCS1
  153.        
  154.         bsf     ADCON0,ADON ; ADC ON
  155.  
  156. ; Initialisation for the PWM
  157.         ; pwm 1
  158.         bsf     STATUS,RP0
  159.         movlw   H'FF'      
  160.         movwf   PR2
  161.         bcf     TRISC,1         ; pwm 1 - hardware
  162.         bcf     TRISC,2         ; pwm 2 - hardware
  163.         bcf     TRISC,3         ; pwm 3 - software
  164.        
  165.         bcf     STATUS,RP0
  166.         bsf     T2CON,T2CKPS1
  167.         bcf     T2CON,T2CKPS0
  168.         bsf     T2CON,TMR2ON
  169.        
  170.         bsf     CCP1CON,CCP1M3
  171.         bsf     CCP1CON,CCP1M2
  172.        
  173.         ; pwm 2
  174.         bsf     CCP2CON,CCP2M3
  175.         bsf     CCP2CON,CCP2M2
  176.  
  177.         return
  178.  
  179.  
  180.  
  181.  
  182.  
  183. END
Add Comment
Please, Sign In to add comment