|
本帖最後由 zuoso2006 於 2012-9-5 10:49 AM 編輯
大大
小弟最近用8051透過max485作通訊溝通用組語編寫一值有問題
還有AJMP 與 JMP 指令 有差很多嗎??? 用起來不知道差在哪裡 請大大指點指點
以下程式接收485訊號,只能接收一次第二次就不能不知為什麼 (編譯沒有問題)
;=============================================
ORG 0000H
SBIT X16=P1.6
MOV TMOD,#00100000B
MOV TH1,#230 ;設定1200 bit
MOV TL1,#230 ;設定1200 bit
SETB TR1
MOV SCON,#01110000B
LOOP: CLR P3.6
WAIT:
JNB P1.4,PP4
JNB P1.0,PPP
JNB P1.1,PP1
JNB P1.2,PP2
JNB P1.3,PP3
JNB P1.5,PP5
JNB P1.6,PP7
JNB P1.7,PP8
JNB RI,WAIT
AJMP LOOP1
;=================================將這段紅色虛線到下一段虛線剪下貼到藍色線就會有問題
PPP:
CLR TI
SETB P3.6 3.6 =1就是發送
MOV A,#06H
MOV SBUF,A
JNB TI ,$
JMP PP6
PP1:
CLR TI
SETB P3.6 3.6 =1就是發送
MOV A,#07H
MOV SBUF,A
JNB TI ,$
JMP PP6
PP2:
CLR TI
SETB P3.6 3.6 =1就是發送
MOV A,#08H
MOV SBUF,A
JNB TI ,$
JMP PP6
PP3:
CLR TI
SETB P3.6 ;P3.6 =1就是發送
MOV A,#09H
MOV SBUF,A
JNB TI ,$
JMP PP6
PP4: CLR TI
SETB P3.6 ;P3.6 =1就是發送
MOV A,#00001010B ;發送值10 出去
MOV SBUF,A
JNB TI ,$
JMP PP6
PP5: CLR TI
SETB P3.6 ;P3.6 =1就是發送
MOV A,#00001011B ;發送值11 出去
MOV SBUF,A
JMP PP6
PP7: CLR TI
SETB P3.6 ;P3.6 =1就是發送
MOV A,#00001100B ;發送值12 出去
MOV SBUF,A
JMP PP6
PP8: CLR TI
SETB P3.6 ;P3.6 =1就是發送
MOV A,#00001101B ;發送值13 出去
MOV SBUF,A
JMP PP6
PP6: MOV R0 ,P1 ;按鈕放開後再執行
CALL DELAY
CJNE R0,#11111111B,PP6
JMP LOOP
;====================================================
LOOP1: CLR P3.6
MOV A,SBUF
CJNE A,#01H,LOP1
AJMP LOAD1
LOP1: CJNE A,#02H,LOP2
AJMP LOAD2
LOP2: CJNE A,#03H,LOP3
AJMP LOAD3
LOP3: CJNE A,#04H,LOP4
AJMP LOAD4
LOP4: CJNE A,#05H,LOP5
AJMP LOAD5
LOP5: CJNE A,#06H,LOP6
AJMP LOAD6
LOP6: CJNE A,#07H,LOP7
AJMP LOAD7
LOP7: CJNE A,#08H,LOP
AJMP LOAD8
LOP: AJMP LOOP
LOAD1: CLR P0.0
AJMP LOOP
LOAD2: CLR P0.1
AJMP LOOP
LOAD3: CLR P0.2
AJMP LOOP
LOAD4: CLR P0.3
AJMP LOOP
LOAD5: CLR P0.4
AJMP LOOP
LOAD6: CLR P0.5
AJMP LOOP
LOAD7: CLR P0.6
AJMP LOOP
LOAD8: MOV P0,#11111111B
AJMP LOOP
;========================================
DELAY: MOV R1 ,#5
S50: MOV R2 ,#255
DJNZ R2 ,$
DJNZ R1 ,S50
RET
END
;=========================================================
以下編譯就會有問題 搞不懂哪裡錯了 只是位置對調 為什麼會有問題ㄋ?????
請好心大大指點
;========================================================
ORG 0000H
SBIT X16=P1.6
MOV TMOD,#00100000B
MOV TH1,#230 ;設定1200 bit
MOV TL1,#230 ;設定1200 bit
SETB TR1
MOV SCON,#01110000B
LOOP: CLR P3.6
WAIT:
JNB P1.4,PP4
JNB P1.0,PPP
JNB P1.1,PP1
JNB P1.2,PP2
JNB P1.3,PP3
JNB P1.5,PP5
JNB P1.6,PP7
JNB P1.7,PP8
JNB RI,WAIT
AJMP LOOP1
LOOP1: CLR P3.6
MOV A,SBUF
CJNE A,#01H,LOP1
AJMP LOAD1
LOP1: CJNE A,#02H,LOP2
AJMP LOAD2
LOP2: CJNE A,#03H,LOP3
AJMP LOAD3
LOP3: CJNE A,#04H,LOP4
AJMP LOAD4
LOP4: CJNE A,#05H,LOP5
AJMP LOAD5
LOP5: CJNE A,#06H,LOP6
AJMP LOAD6
LOP6: CJNE A,#07H,LOP7
AJMP LOAD7
LOP7: CJNE A,#08H,LOP
AJMP LOAD8
LOP: AJMP LOOP
LOAD1: CLR P0.0
AJMP LOOP
LOAD2: CLR P0.1
AJMP LOOP
LOAD3: CLR P0.2
AJMP LOOP
LOAD4: CLR P0.3
AJMP LOOP
LOAD5: CLR P0.4
AJMP LOOP
LOAD6: CLR P0.5
AJMP LOOP
LOAD7: CLR P0.6
AJMP LOOP
LOAD8: MOV P0,#11111111B
AJMP LOOP
;========================================
;=================================將這段紅色虛線到下一段虛線剪下貼到藍色線就會有問題
PPP:
CLR TI
SETB P3.6 ;P3.6 =1就是發送
MOV A,#06H
MOV SBUF,A
JNB TI ,$
JMP PP6
PP1:
CLR TI
SETB P3.6 ;P3.6 =1就是發送
MOV A,#07H
MOV SBUF,A
JNB TI ,$
JMP PP6
PP2:
CLR TI
SETB P3.6 ;P3.6 =1就是發送
MOV A,#08H
MOV SBUF,A
JNB TI ,$
JMP PP6
PP3:
CLR TI
SETB P3.6 ;P3.6 =1就是發送
MOV A,#09H
MOV SBUF,A
JNB TI ,$
JMP PP6
PP4: CLR TI
SETB P3.6 ;P3.6 =1就是發送
MOV A,#00001010B ;發送值10 出去
MOV SBUF,A
JNB TI ,$
JMP PP6
PP5: CLR TI
SETB P3.6 ;P3.6 =1就是發送
MOV A,#00001011B ;發送值11 出去
MOV SBUF,A
JMP PP6
PP7: CLR TI
SETB P3.6 ;P3.6 =1就是發送
MOV A,#00001100B ;發送值12 出去
MOV SBUF,A
JMP PP6
PP8: CLR TI
SETB P3.6 ;P3.6 =1就是發送
MOV A,#00001101B ;發送值13 出去
MOV SBUF,A
JMP PP6
PP6: MOV R0 ,P1 ;按鈕放開後再執行
CALL DELAY
CJNE R0,#11111111B,PP6
JMP LOOP
;====================================================
DELAY: MOV R1 ,#5
S50: MOV R2 ,#255
DJNZ R2 ,$
DJNZ R1 ,S50
RET
END
|
|