趣味新聞網記者特別報導 : 關於此VB程式的內容意思是什麼有很多註解但不是很瞭解整個意思的內容希望厲害的大大能幫我解釋一下謝謝EADDRL REG 26H ;28C66的位址EADDRH REG 27H ;28C66的位址 .. .....
關於此VB程式的內容意思是什麼
有很多註解
但不是很瞭解整個意思的內容
希望厲害的大大能幫我解釋一下
謝謝
EADDRL REG 26H ;28C66的位址
EADDRH REG 27H ;28C66的位址
EDATA REG 28H ;28c66的傳送資料
DO REG P3.7 ;28C66 DO腳
DI REG P3.6 ;28C66 DI腳
SK REG P3.5 ;28C66 SK腳
CS REG P3.4 ;28C66 CS腳
MEN REG P3.2
REC1 REG 20H
REC2 REG 21H
POS REG 22H
TMP REG 23H
TEMP REG 24H
ONLINE REG 25H.0
MOTS REG 29H
AXNS REG 2AH
AXNTIME REG 2BH
DELTIM REG 2CH
AXNSPD REG 2DH
TEMP1 REG 2EH
TEMP2 REG 2FH
P2S REG 30H
EADH REG 31H
EADL REG 32H
TI REG SCON.1
RI REG SCON.0
;---------------------------------------
ORG 00H
JMP MAIN
ORG 23H
JMP RECOP
MAIN:
MOV P0,#0
MOV P1,#0
MOV AXNSPD,#6
MOV AXNS,#50
MOV MOTS,#24
CLR ONLINE
CALL INITUART
CALL INITEEP
;
MOV R0,#50H
MOV R1,#30H ;MOT POS START ADD
MOV R4,#24
LOOP:
INC R0
INC R1
MOV @R0,#90
MOV @R1,#90
DJNZ R4,LOOP
MOV IE,#10010000B
MOV R3,#0
CALL READAXN
;-----------------------------------
START:
JB ONLINE,J0
CALL READAXN
MOV R4,AXNTIME
;
J0:
MOV R1,#30H ;@30START
MOV R0,#50H
MOV R2,#24 ;R2,馬達數
INC R2
;*****************************1 TO 8
MOV A,#00000001B
LOP0:
DJNZ R2,J2
JMP CHKTIM
J2:
INC R1
INC R0
MOV POS,@R0
PUSH A
;-----------R0-NOW POS R1-NEX POS----------------
CHKOUT1:
CLR C
MOV A,@R1
SUBB A,@R0
JNC IN1 ;減速度值
MOV A,AXNSPD
XCH A,@R0
CLR C ;減完是否藉位
SUBB A,@R0
JC EQQ1
MOV @R0,A
CLR C ;是否減過頭
MOV A,@R1
SUBB A,@R0
JNC EQQ1
JMP EXT1
IN1:
CJNE A,#0,DE1
JMP EXT1
DE1:
MOV A,AXNSPD;加速度值
ADD A,@R0
MOV @R0,A
CLR C ;是否加過頭
MOV A,@R1
SUBB A,@R0
JC EQQ1
JMP EXT1
EQQ1:
MOV A,@R1
MOV @R0,A
EXT1:
MODOUT1:
MOV TMOD,#21H
MOV A,#9
MOV B,POS
MUL AB
CPL A
MOV TL0,A
MOV A,B
INC A
INC A
CPL A
MOV TH0,A
POP A
MOV P0,A
SETB TR0
JNB TF0,$
MOV P0,#0
CLR TF0
CLR TR0
;
RL A
CJNE A,#01H,LOP0
;****************************9 TO 16
SETB MEN
LOP1:
DJNZ R2,J3
JMP CHKTIM
J3:
INC R1
INC R0
MOV POS,@R0
PUSH A
;-----------R0-NOW POS R1-NEX POS----------------
CHKOUT2:
CLR C
MOV A,@R1
SUBB A,@R0
JNC IN2 ;減速度值
MOV A,AXNSPD
XCH A,@R0
CLR C ;減完是否藉位
SUBB A,@R0
JC EQQ2
MOV @R0,A
CLR C ;是否減過頭
MOV A,@R1
SUBB A,@R0
JNC EQQ2
JMP EXT2
IN2:
CJNE A,#0,DE2
JMP EXT2
DE2:
MOV A,AXNSPD;加速度值
ADD A,@R0
MOV @R0,A
CLR C ;是否加過頭
MOV A,@R1
SUBB A,@R0
JC EQQ2
JMP EXT2
EQQ2:
MOV A,@R1
MOV @R0,A
EXT2:
MODOUT2:
MOV TMOD,#21H
MOV A,#9
MOV B,POS
MUL AB
CPL A
MOV TL0,A
MOV A,B
INC A
INC A
CPL A
MOV TH0,A
POP A
MOV P1,A
SETB TR0
JNB TF0,$
MOV P1,#0
CLR TF0
CLR TR0
;
RL A
CJNE A,#01H,LOP1
;****************************17 TO 24
CLR MEN
LOP2:
DJNZ R2,J4
JMP CHKTIM
J4:
INC R1
INC R0
MOV POS,@R0
PUSH A
;-----------R0-NOW POS R1-NEX POS----------------
CHKOUT3:
CLR C
MOV A,@R1
SUBB A,@R0
JNC IN3 ;減速度值
MOV A,AXNSPD
XCH A,@R0
CLR C ;減完是否藉位
SUBB A,@R0
JC EQQ3
MOV @R0,A
CLR C ;是否減過頭
MOV A,@R1
SUBB A,@R0
JNC EQQ3
JMP EXT3
IN3:
CJNE A,#0,DE3
JMP EXT3
DE3:
MOV A,AXNSPD;加速度值
ADD A,@R0
MOV @R0,A
CLR C ;是否加過頭
MOV A,@R1
SUBB A,@R0
JC EQQ3
JMP EXT3
EQQ3:
MOV A,@R1
MOV @R0,A
EXT3:
MODOUT3:
MOV TMOD,#21H
MOV A,#9
MOV B,POS
MUL AB
CPL A
MOV TL0,A
MOV A,B
INC A
INC A
CPL A
MOV TH0,A
POP A
MOV P1,A
SETB TR0
JNB TF0,$
MOV P1,#0
CLR TF0
CLR TR0
RL A
CJNE A,#01H,LOP2
CHKTIM:
DJNZ R4,JJ0
JMP START
JJ0: JMP J0
;---------------------------
READAXN:
PUSH A
CJNE R3,#0,RJ2 ;資料計數結束
MOV EADDRL,#255
MOV EADDRH,#1
CALL READBYTE
MOV MOTS,EDATA ;讀取馬達數
;
MOV EADDRL,#0
MOV EADDRH,#0
CALL READBYTE
CALL READBYTE
MOV EADL,#0
MOV EADH,#0
MOV TEMP1,#0
MOV TEMP2,#0
MOV R3,EDATA
MOV AXNS,R3
LOT:
MOV A,EDATA ;A=動作數
MOV B,MOTS
INC B
INC B ;B=資料寬度
MUL AB
ADD A,TEMP1
MOV TEMP1,A
MOV A,B
ADDC A,TEMP2
MOV TEMP2,A
;
CALL READBYTE ;讀索引
MOV A,EDATA
CJNE A,#FEH,RJ0 ;收到FE值
JMP RJ
RJ0:
MOV TEMP,EDATA
;
CALL READBYTE ;讀動作數
MOV A,P2
CPL A
CJNE A,TEMP,LOT ;索引等於P2
MOV R3,EDATA ;儲存索引對應動作數
MOV AXNS,R3
MOV EADL,TEMP1 ;儲存位址差
MOV EADH,TEMP2
JMP LOT
RJ:
MOV A,EADDRL
ADD A,EADL
MOV EADDRL,A
MOV A,EADDRH
ADDC A,EADH
MOV EADDRH,A
RJ2:
CALL READBYTE ;讀速度
MOV AXNSPD,EDATA
CALL READBYTE ;讀時間
MOV AXNTIME,EDATA
MOV R1,MOTS ;讀馬達位置
MOV R0,#30H
RLO: INC R0
CALL READBYTE
MOV @R0,EDATA
DJNZ R1,RLO
DEC R3 ;資料計數-1
POP A
RET
;--------------------------
RECOP:
MOV IE,#00000000B
PUSH A
MOV TMP,R1
;
CALL UARTIN
CJNE A,#FFH,OUT2 ;設定
CALL UARTIN
CJNE A,#55,OUT0 ;下載
JNB ONLINE,OUTT
CALL DOWNLOAD
JMP OUTT
OUT0:
CJNE A,#35,OUT1 ;連綫
MOV AXNSPD,#6
MOV AXNTIME,#10
MOV MOTS,#24
SETB ONLINE
MOV A,#"O"
CALL UARTOUT
MOV A,#"N"
CALL UARTOUT
JMP OUTT
OUT1:
CJNE A,#42,OUT2 ;離綫
JNB ONLINE,OUTT
CLR ONLINE
MOV R3,#0
CALL READAXN
MOV A,#"O"
CALL UARTOUT
MOV A,#"F"
CALL UARTOUT
MOV A,#"F"
CALL UARTOUT
JMP OUTT
OUT2:
CJNE A,#30,OUT3 ;馬達數
JNB ONLINE,OUTT
CALL UARTIN
MOV MOTS,A
JMP OUTT
OUT3:
CJNE A,#50,OUT4 ;速度
JNB ONLINE,OUTT
CALL UARTIN
MOV AXNSPD,A
JMP OUTT
OUT4:
JNB ONLINE,OUTT
ADD A,#30H
MOV R1,A
CALL UARTIN
MOV @R1,A
OUTT:
MOV R1,TMP
POP A
MOV IE,#10010000B
RETI
;------------DOWNLOAD DATA----------
DOWNLOAD:
MOV EADDRL,#255
MOV EADDRH,#1
CALL UARTIN
MOV EDATA,A
CALL WRITEBYTE
MOV EADDRL,#0
MOV EADDRH,#0
DLOOP: CALL UARTIN
CJNE A,#FFH,OOP
RET
OOP: MOV EDATA,A
CALL WRITEBYTE
JMP DLOOP
RET
;***************串列訊號相關***************
;---------------初始化--------------------
INITUART:
MOV SCON,#01010000B
MOV TMOD,#00100001B
MOV TH1,#253
SETB TR1
RET
;--------------A=INDATA-------------------
UARTIN:
JNB RI,$
MOV A,SBUF
CLR RI
RET
;--------------A=OUTDATA-------------------
UARTOUT:
MOV SBUF,A
JNB TI,$
CLR TI
RET
;***************EEPROM相關***************
;--------------初始化--------------
INITEEP:
CLR CS
SETB SK
CLR DI
SETB DO
CALL EWEN
RET
;--------------産生SK脈波-----------
CLOCK:
CLR SK
SETB SK
RET
;---------檢查資料是否已寫入---------
CHK_EBUSY:
CLR CS
SETB CS
BUSY: JNB DO,BUSY
CLR CS
RET
;--------------寫入位址--------------
WR_ADDR:
MOV A,EADDRH
RRC A
MOV DI,C
CALL CLOCK
MOV A,EADDRL
MOV B,#08
WRADDR:
RLC A
MOV DI,C
CALL CLOCK
DJNZ B,WRADDR
CLR DI
RET
;--------------寫入資料---------------
WR_EDATA:
MOV B,#08
WREDATA:
RLC A
MOV DI,C
CALL CLOCK
DJNZ B,WREDATA
CLR DI
RET
;--------------接收資料--------------- A=接收的資料
RD_DATA:
MOV B,#08
RDDATA:
CALL CLOCK
MOV C,DO
RLC A
DJNZ B,RDDATA
RET
;--------------設定CS及DI=1------------
SET11:
SETB CS
SETB DI
CALL CLOCK
RET
;--------------設定讀取模式-------------
SET_READ:
MOV A,#80H
MOV B,#02
SRD:
RLC A
MOV DI,C
CALL CLOCK
DJNZ B,SRD
RET
;--------------設定寫入模式--------------
SET_WRITE:
MOV A,#40H
MOV B,#02
SWR:
RLC A
MOV DI,C
CALL CLOCK
DJNZ B,SWR
RET
;--------------設定其他模式---------------
SET_ELSE:
MOV A,#00H
MOV B,#02H
SETELSE:
RLC A
MOV DI,C
CALL CLOCK
DJNZ B,SETELSE
RET
;--------讀取EADDR位址的資料存於EDATA------
READBYTE:
PUSH B
PUSH A
;
CALL SET11
CALL SET_READ
CALL WR_ADDR
CALL RD_DATA
MOV EDATA,A
CLR CS
;
INC EADDRL
MOV A,EADDRL
CJNE A,#0,RJAM
INC EADDRH
RJAM:
;
POP A
POP B
RET
;------------將EDATA存於EADDR位址----------
WRITEBYTE:
PUSH B
PUSH A
CALL SET11
CALL SET_WRITE
CALL WR_ADDR
MOV A,EDATA
CALL WR_EDATA
CALL CHK_EBUSY
;
INC EADDRL
MOV A,EADDRL
CJNE A,#0,WJ
INC EADDRH
WJ:
;
POP A
POP B
RET
;--------------讀寫緻能----------------------
EWEN:
PUSH B
PUSH A
PUSH EADDRL
PUSH EADDRH
CALL SET11
CALL SET_ELSE
MOV EADDRL,#80H
MOV EADDRH,#01H
CALL WR_ADDR
CLR CS
POP EADDRH
POP EADDRL
POP A
POP B
RET
;-----------------------------------------
END
[
本帖最後由 m70371 於 2008-4-16 02:04 編輯
]
|
分享鏈接