;**************************************************************
;8位格雷碼轉換成二進制碼
;8位格雷碼在ACC中,轉換后一字節二進制碼仍在ACC中
;占用R7,PSW
G2B8: MOV R7,#7
RL A
GB1: JNB ACC.0,GB2
CPL ACC.7
GB2: RL A
DJNZ R7,GB1
RET
;**************************************************************
;16位格雷碼轉換成二進制碼
;16位格雷碼高字節在R2中,低字節在R3中.轉換結果仍在R2R3中
;占用:ACC,PSW,R7
G2B16: MOV R7,#15 ;計數器賦值
MOV A,R3 ;第一次左移一位
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R3
MOV ACC.0,C
MOV R3,A
G2B161: JNB ACC.0,G2B162 ;移出的一位異或尚未移出的最高位,結果在尚未移出
MOV A,R2 ;的最高位
CPL ACC.7
MOV R2,A
G2B162: MOV A,R3 ;左移一位
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R3
MOV ACC.0,C
MOV R3,A
DJNZ R7,G2B161 ;未完成則繼續
RET
;**************************************************************
;8位二進制數(在ACC中)轉換成格雷碼,轉換結果仍在ACC中
B2G8: MOV R7,#7
RLC A ;B1->CY
MOV ACC.0,C ;B1->ACC.0
BGLOP: JNB ACC.7,BG4
CPL C ;CY(Bi-1) XOR Bi->CY
BG4: RLC A ;CY->Gi,Bi->CY
DJNZ R7,BGLOP
RET
;**************************************************************
;16位二進制數轉換成格雷碼
;16位二進制碼在R2R3中(R2高字節),轉換結果仍在R2R3中
;占用:ACC,PSW,R7
B2G16: MOV R7,#15
MOV A,R2 ;B1->CY
MOV C,ACC.7
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
JNB ACC.7,BG161
CPL C ;CY(Bi-1) XOR Bi->CY
BG161: MOV A,R3
RLC A ;CY->Gi
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
JNB ACC.7,BG162
CPL C
BG162: DJNZ R7,BG161
RET
;**************************************************************
貼兩個小小的子程序,支持版主工作!
全部回復(6)
正序查看
倒序查看