• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

请高手指点:用PIC单片机做的一正弦波程序,波形达不到

请高手指点:用PIC单片机做的一正弦波程序,波形有误用PIC单片机做的一正弦波程序,波形有误,请高手指点,在此衷心感谢了!
产生正弦波方法:本人想在90°区间内建立一个对应幅度输出的查找表,180°时将90°的值反序输出...
LIST P=16C74
INCLUDE
CBLOCK   20H
WTEMP
STATUSTEMP
PCHTEMP
SINESTEP
SINEINDEX
STEP
  ENDC
  ORG  00H
  NOP
  GOTO  MAIN
  ORG   04H
         MOVWF      WTEMP         ;
         SWAPF      STATUS,0
         CLRF       STATUS
         MOVWF      STATUSTEMP    ;
         MOVF       PCLATH,0     ;
         MOVWF      PCHTEMP       ;
         CLRF       PCLATH  
         BTFSS      PIR1,TMR2IF
         GOTO       INT_TMR2
        
ENDOFINT
         BCF        STATUS,RP0
         BCF        STATUS,RP1
         MOVF       PCHTEMP,W  ;
         MOVWF      PCLATH        ;
         SWAPF      STATUSTEMP,0
         MOVWF      STATUS        ;
         SWAPF      WTEMP,1
         SWAPF      WTEMP,0
         RETFIE
         ;RETFIE
MAIN    

         BANKSEL  TRISC
         CLRF   TRISC
         BCF    TRISC,2
         BANKSEL  PORTC
         CLRF     PORTC
         BANKSEL  PR2
         MOVLW  .156
         MOVWF  PR2
         BSF     INTCON,PEIE
         BSF     INTCON,GIE
         BSF    PIE1,TMR2IE
         CLRF   STATUS
         MOVLW  B'00001100'
         MOVWF  T2CON        ;设置TMR2后分频比为1:2 ,预分频比为1:1, 启动TMR2
         MOVLW  B'00001100'  ;选择PWM模式
         MOVWF  CCP1CON      
         MOVLW  .78
         MOVWF   CCPR1L
         CLRF    SINESTEP
        
            
LOOP    
         CALL   INT_TMR2
         GOTO    LOOP
INT_TMR2
         BSF  STATUS,RP0
         BCF  STATUS,RP1
         CLRF INTCON
         BCF   PIR1,TMR2IF
         BCF   STATUS,RP0
         INCF  SINESTEP,1
         BCF   SINESTEP,6
         MOVF  SINESTEP,0
         ANDLW 0FH
         MOVWF SINEINDEX
         MOVLW HIGH($)
         MOVWF PCLATH
         SWAPF SINESTEP,0
         ANDLW B'11'
         ADDWF PCL,1
       GOTO  SINEQUAD1         ;第一象限
       GOTO  SINEQUAD2         ;第二象限
       GOTO  SINEQUAD3         ;第三象限
       GOTO  SINEQUAD4         ;第四象限
SINEQUAD1 MOVF  SINEINDEX,0
          CALL  SINETABLE
          MOVWF CCPR1L
          GOTO  ENDOFINT
SINEQUAD2 MOVF  SINEINDEX,0
          SUBLW .15            ;反序
          CALL  SINETABLE
          MOVWF CCPR1L
          GOTO  ENDOFINT
SINEQUAD3 MOVF  SINEINDEX,0
          CALL  SINETABLE
          SUBLW .156
          MOVWF CCPR1L
          GOTO  ENDOFINT

SINEQUAD4 MOVF  SINEINDEX,0
          SUBLW .15
          CALL  SINETABLE
          SUBLW .156
          MOVWF CCPR1L
          GOTO  ENDOFINT

SINETABLE ADDWF   PCL,1
          DT      .78
          DT      .86
          DT      .93
          DT      .101
          DT      .108
          DT      .115
          DT      .121
          DT      .127
          DT      .133
          DT      .138
          DT      .143
          DT      .147
          DT      .150          
          DT      .153
          DT      .155
          DT      .156
          END  
PROTEUS仿真:


仿真效果:
500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/66/2091591213107206.jpg?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg,t_20');}" onmousewheel="return imgzoom(this);"> 2091591213107332.rar
全部回复(1)
正序查看
倒序查看
lj2100
LV.1
2
2008-10-08 08:56
呵呵...
你的滤波号型不对...
想做的话可以与我联系
Q   85208116
0
回复