51單片機檢測增量式旋轉光電編碼器匯編程序有點問題,請高手看看,分數(shù)不是問題
- 思路如下:是先采用一個單片機吧光電編碼器的信號處理成順時針旋轉一個腳輸出脈沖,逆時針旋轉另一個腳輸出脈沖,這兩路脈沖分別送到89C51的T0,T1計數(shù)輸入端計數(shù)器設置為方式2,每20個脈沖中斷一次,T0,T1中斷分別對兩組寄存器值加1,在主程序中吧兩組寄存器的數(shù)值相減即下面程序中的A0,A1,A2分別減B0,B1,B2以得到實際值,Z5為負號標志。而這個程序出錯后我又采用了方法2,即在中斷程序中直接對同一組寄存器數(shù)值加一或減一,但每次由一個方向反向后到0會產生借位,導致程序數(shù)值錯誤請高手指點該怎么改下能讓這個程序能正確的計算出實際運行值謝謝。下面是方法一的程序計數(shù)中斷程序:;*******************************TT0: PUSH PSW ;計夠20P脈沖中斷發(fā)生即1MM PUSH A INC A0 MOV A,A0 CJNE A,#00H,TT0END ;夠256即256mm INC A1 MOV A,A1 CJNE A,#100,TT0END ;夠100即25600MM=25.6M MOV A1,#00HTT0END: POP A POP PSW RETI;********************************TT1: PUSH PSW PUSH A INC B0 MOV A,B0 CJNE A,#00H,TT1END INC B1 MOV A,B1 CJNE A,#100,TT1END MOV B1,#00HTT1END: POP A POP PSW RETI主程序中的相減程序: CLR C MOV A,TL0 MOV B,TL1 SUBB A,B JNC SS0 ;有借位說明A是負數(shù),即補碼,要調整后使用 CPL A INC A;*********整數(shù)部分運算********** CLR C MOV A,A0 MOV B,B0 SUBB A,B ;相減如果C為1說明A內數(shù)據(jù)為補碼故調整 JNC S0 CPL A INC A SETB Z5 SJMP S1S0: CLR Z5S1: MOV R7,A CLR C MOV A,A1 MOV B,B1 SUBB A,B JNC S2 CPL A INC A SETB Z5 SJMP S3S2: CLR Z5S3: MOV R6,A方法2的程序:TT0: PUSH PSW ;計夠20P脈沖中斷發(fā)生即1MM PUSH A MOV A,A2 JNZ T00 MOV A,A1 JNZ T00 MOV A,A0 JNZ T00 CLR Z5 T00: JB Z5,T02 MOV A,A0 ADD A,#01H DA A MOV A0,A CJNE A,#00H,TT0END ;夠100即100mm MOV A0,#00H MOV A,A1 ADD A,#01H DA A MOV A1,A CJNE A,#00H,TT0END ;夠100即10000MM=10M MOV A1,#00H MOV A,A2 ADD A,#01H DA A MOV A2,A CJNE A,#00H,TT0END MOV A2,#00H CLR Z5 SJMP TT0ENDT02: MOV A,A0 ADD A,#99H DA A MOV A0,A CJNE A,#00H,TT0END MOV A,A1 ADD A,#99H DA A MOV A1,A CJNE A,#00H,TT0END MOV A1,#00H MOV A,A2 JNZ T03 ADD A,#99H DA A MOV A2,A CJNE A,#00H,TT0END MOV A2,#00HT03: CLR Z5TT0END: POP A POP PSW RETI
-
問
提問者:網(wǎng)友
2017-03-08