導航:首頁 > 編程語言 > 單片機編程曲軸信號

單片機編程曲軸信號

發布時間:2023-07-18 11:22:40

『壹』 求解STC 12C5A60S2的編程問題,本人初次涉及單片機,對編程不太了解,編了個AD轉化的小程序,求高手看下!

我最近也在弄STC的單片機,看了下代碼,覺得以下這段似乎有點問題
for(i=0;i<10;i++)
{
tp=0;
ADC_RES=0;
ADC_RESL=0; //低兩位清零
ADC_CONTR|=0x08; //啟動AD轉換
while(!tp) //判斷AD轉換是否完成
{
tp=0x10;
tp&=ADC_CONTR;
}
ADC_CONTR&=0xe7;
ad_average_result=ADC_RES;
q=q+ad_average_result;
}
你的意圖是局鉛悔想做10次轉換,然後取平均值作為最激圓終結果吧, while(!tp) 就是說轉換完成後將轉換完成標志位清零接著再取出轉換後的數,可是轉換未完成的話就跳出while直接執行後面桐正的語句了吧,不過這個就是有問題應該也不會導致完全沒結果輸出,也就是結果有問題的話燈應該也會亮的,還有是否確定模擬信號輸入口是否和寄存器設置所選的一致,P1ASF這個寄存器我也找不到說明

『貳』 誰能給我解釋一下以下的單片機程序

ORG 0000H
LJMP MAIN
ORG 0100H ;主程序地址
MAIN: JNB P1.0,P10 ;哪個鍵按下,顯示哪個波形
JNB P1.1,P11
JNB P1.2,P12
JNB P1.3,P13
LJMP MAIN ;沒有鍵按下返回主程序循環

P10: MOV R7,#00H ;方波波形,R7為特徵碼,放00,表示方波
LCALL SQU ;調用方波波形函數
LJMP MAIN ;調用完返回主程序循環
P11: MOV R7,#01H ;01表示SAW波
LCALL SAW
LJMP MAIN
P12: MOV R7,#02H
LCALL TRI
LJMP MAIN
P13: MOV R7,#03H
LCALL SIN
LJMP MAIN

SQU: JNB P1.1,N1 ;方波函數,如果有其他鍵按下
JNB P1.2,N2 ;退出程序
JNB P1.3,N3
LJMP SSQU ;沒有鍵按下,到SSQU函數產生方波
N1: MOV R7,#01H ;哪個鍵按下就在R7中記下特徵碼
LJMP TC0
N2: MOV R7,#02H
LJMP TC0
N3: MOV R7,#03H
LJMP TC0
SSQU: CJNE R7,#00H,TC0 ;R7不為0退出

MOV R0,#00H ;R0中放00
MOV DPTR,#7FFFH ;這個應該是DAC0832的地址
K00: MOV A,#0FFH ;A中放FF,高電平
MOVX @DPTR,A ;A到0832轉換
MOV P0,#0FFH ;這一句不怎麼懂,感覺可以去掉
MOV P2,#0FFH ;值P2輸入方式,P2是通過撥碼按鈕改
MOV A,P2 ;變數值,P2越大,波形周期越小
CPL A
MOV R3,A
L00: DEC R3
CJNE R3,#255,L00 ;這個循環改變周期
INC R0
INC R0
CJNE R0,#254,K00 ;高電平波循環127次
MOV R0,#00H
K01: MOV A,#00H ;低電平,跟高電平差不多
MOVX @DPTR,A
MOV P0,#00H
MOV P2,#0FFH
MOV A,P2
CPL A
MOV R3,A

L01: DEC R3
CJNE R3,#255,L01
INC R0
INC R0
CJNE R0,#254,K01
LJMP SQU ;顯示完一個波形,回到方波函數開始,判斷有無其他按鍵
TC0: RET ;返回主函數

SAW: JNB P1.0,N4 ;判斷有無其他按鍵,同方波
JNB P1.2,N5
JNB P1.3,N6
LJMP SSAW
N4: MOV R7,#00H
LJMP TC1
N5: MOV R7,#02H
LJMP TC1
N6: MOV R7,#03H
LJMP TC1
SSAW: CJNE R7,#01H,TC1 ;特徵碼不是01 退出
MOV R0,#0FFH ;RO中放即將輸出的值
MOV DPTR,#7FFFH
K10: MOV A,R0 ;鋸齒波的每個值
MOVX @DPTR,A ;輸出
MOV P0,R0
MOV P2,#0FFH ;通過P2改變周期
MOV A,P2
CPL A
MOV R3,A
L10: DEC R3
CJNE R3,#255,L10
INC R0 ;通過R0加1 來顯示鋸齒波的斜坡
CJNE R0,#255,K10 ;RO不等於255,循環鋸齒波的每個值
LJMP SAW ;等於255,完成一個鋸齒波周期,回鋸齒波開始
TC1: RET ;退出

TRI: JNB P1.0,N7 ;三角波,類似於兩個相反的鋸齒波
JNB P1.1,N8
JNB P1.3,N9
LJMP TTRI
N7: MOV R7,#00H
LJMP TC2
N8: MOV R7,#01H
LJMP TC2
N9: MOV R7,#03H
LJMP TC2
TTRI: CJNE R7,#02H,TC2

MOV R0,#00H
MOV DPTR,#7FFFH
K20: MOV A,R0
MOVX @DPTR,A
MOV P0,R0
MOV P2,#0FFH
MOV A,P2
CPL A
MOV R3,A
L20: DEC R3
CJNE R3,#255,L20
INC R0
INC R0
CJNE R0,#254,K20
K21: MOV A,R0
MOVX @DPTR,A
MOV P0,R0
MOV P2,#0FFH
MOV A,P2
CPL A
MOV R3,A
L21: DEC R3
CJNE R3,#255,L21
DEC R0
DEC R0
CJNE R0,#0,K21
LJMP TRI
TC2: RET

SIN: JNB P1.0,N10 ;正弦波,是通過存儲在代碼區的一個數
JNB P1.1,N11 ;組來顯示值的
JNB P1.2,N12
LJMP SSIN
N10: MOV R7,#00H
LJMP TC3
N11: MOV R7,#01H
LJMP TC3
N12: MOV R7,#02H
LJMP TC3
SSIN: CJNE R7,#03H,TC3

MOV R0,#00H
MOV DPTR,#7FFFH
K30: MOV A,R0
MOV DPTR,#TAB ;數組的地址
MOVC A,@A+DPTR ;把第R0個數放到A中
MOV DPTR,#7FFFH
MOVX @DPTR,A ;輸出A
MOV P0,A
INC R0 ;RO加1
MOV P2,#0FFH ;周期
MOV A,P2
CPL A
MOV R3,A
L30: DEC R3
CJNE R3,#255,L30
CJNE R0,#255,K30 ;不等於255表示一個周期內,跳到K30
LJMP SIN ;等於表示顯示完一個周期,到SIN開始
TC3: RET ;退出

TAB: DB ;定義正弦函數的各個值

看了你的圖和你的程序,感覺你的圖畫得簡單了一點,特別是0832地址,控制信號都沒接,看起來還在調試,建議P2口做地址匯流排,這樣,編程比較方便,你可以把P3口做周期.或者把P1口的其他口做控制匯流排,這樣要對0832時序比較熟悉才行.
我平時是用C開發的,很少用匯編,如果有什麼錯誤,可以共同探討.

閱讀全文

與單片機編程曲軸信號相關的資料

熱點內容
php和類名相同的方法 瀏覽:360
香港台灣dns伺服器地址列表 瀏覽:537
大同app怎麼樣 瀏覽:438
php去掉特殊字元 瀏覽:387
androidapi中文合集 瀏覽:658
win7下安裝linux虛擬機 瀏覽:838
雲主機用別的伺服器嗎 瀏覽:922
黑馬買入指標源碼副圖 瀏覽:962
微軟為什麼會把伺服器放在水底 瀏覽:257
php截取字元串中文 瀏覽:21
虛擬機和編譯軟體哪個好 瀏覽:750
存儲伺服器為什麼比通用伺服器難 瀏覽:373
用php列印出前一天的時間 瀏覽:369
2010編譯方法 瀏覽:239
華為哪裡查看隱藏app 瀏覽:889
linux網卡重置 瀏覽:830
框架柱低於四米箍筋全高加密 瀏覽:694
米二如何安卓版本升級到高安卓版 瀏覽:783
安卓手機數據慢怎麼辦 瀏覽:727
雙底買賣指標公式源碼無未來函數 瀏覽:685