产生正弦波方法:本人想在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