[請問]如何將我的運算值作累(疊)加 再用PWM輸出?
|
||||
---|---|---|---|---|
新會員
|
如題
我想要寫一個 XK1=A*XK+U YK=XK 起始我先設定XK=0 A=1(固定不變) U=給予一個電壓值(3V) 再使用AD轉換存成AD_variable 我的作法是先將A暫存器的值和XK暫存器的值作相乘再加上AD_variable暫存器的值=>存入XK1暫存器 =>作一次PWM輸出(頻率=20kHz) 輸出完之後我馬上再將XK暫存器清除 將輸出的XK1值放入XK暫存器中 再作一次相乘相加 在作一次PWM輸出 . .......不斷繼續累加 . 理論上的PWM訊號 波形應該是不斷累加變大 但是我的波形都相同 我想應該是在之中要作一個Holding的動作 Hold一個輸入(U)-運算-輸出(PWM)的時間 固定一段時間 運算一次 請問有那位專家大大能夠幫我解惑.... 麻煩了.... 我的程式如下 ;========程式宣告============= ;=======定義自訂變數暫存器名稱===== ;=======設定程式組譯起始位置====== org 0x00 nop goto mainprogram ;=========主程式========= mainprogram call Initial MainLoop call ADtrans call Oper goto MainLoop ;==========初始化副程式======= Initial movlw B'00000000' movwf XK ....略 ;====================== Oper movlw B'00000001' movwf A call MuxABXY movf Mux_L,W addwf AD_variable,0 movwf XK1 call PWM_Out movwf XK ;XK1放回XK return ;======A/D轉換副程式======= ADtrans banksel ADCON0 bsf ADCON0,GO Wait btfsc ADCON0,GO goto Wait movf ADRESL,W movwf AD_variable return ;========================= MuxABXY ;累加A暫存器,共累加XK次 clrf Mux_H clrw MuxLoop addwf A,W btfsc STATUS,C incf Mux_H,f decfsz XK,f goto MuxLoop movwf Mux_L ;A*XK的值我取相乘完之低八位元Mux_L return ;====PWM訊號產生及輸出副程式===== PWM_Out movf XK1,W banksel CCPR1L movwf CCPR1L return END
發表於: 2005/6/8 22:24
|
|||
|