關於程式傳輸接收問題?? |
答題得分者是:skype_chen1
|
big_eyes
一般會員 發表:28 回覆:52 積分:16 註冊:2005-03-22 發送簡訊給我 |
請問各位大大!
我寫了兩ㄍ8051傳輸接收的程式!
我是用p3.0跟p3.1特殊功能下ㄑ寫的!
可是~傳不過去呢~~請各位大大幫我抓抓問題所在好ㄇ??
拜託了~~
((傳送))
ORG 00H JMP STARTS ;規避00H至2FH間之中斷向量執行位址 ORG 31H STARTS: MOV TMOD,#00100001B ;設定TIMER0為模式1, TIMER1為模式2 ANL PCON,#01111111B ;設定鮑率為9600 BIT/SEC MOV TH1,#FDH SETB TR1 ;啟動TIMER1 MOV SCON,#01000000B ;串列埠MODE1 設定為傳送 LOOP: MOV A,#05H ;啟動UART的讀入接收資料動作資料 MOV SBUF,A KLOOP: JBC TI,OK JMP KLOOP OK: JMP LOOP END((接收)) ORG 00H JMP STARTS ;規避00H至2FH間之中斷向量執行位址 ORG 30H STARTS: MOV TMOD,#00100001B ;設定TIMER0為模式1, TIMER1為模式2 ANL PCON,#01111111B ;設定鮑率為9600 BIT/SEC MOV TH1,#FDH SETB TR1 ;啟動TIMER1 MOV SCON,#01010000B ;串列埠MODE1 設定為接收 ;=======================讀取串列埠資料============================== LOOP1: CLR RI ;啟動UART的讀入接收資料動作 KLOOP: JNB RI,OK ;等待訊號接收完畢 JMP KLOOP OK: MOV A,SBUF ;將89C51_1所傳送之資料搬到累加器 XRL A,#05H;判斷是否為#05H之資料執行89C51_2行走模式程式 JZ START ; JMP STARTS START: MOV P0,#00H MOV P1,#00H WHY: MOV P1,#00001010B MOV P0,#FFH CALL DELAY1 JMP STARTS DELAY1: MOV TMOD,#01;設定Timer1為16位元計時模式;0.05秒產生溢位 MOV TL0,#<(65536-46080) ;儲存16位元之低8位元 MOV TH0,#>(65536-46080) ;儲存16位元之高8位元 SETB TR0 ;啟動計時器 WAIT1: JBC TF0,OVERFLOW1 ;測試是否計時完畢產生溢位 JMP WAIT1 ;否, 則持續測試溢位之發生 OVERFLOW1: CLR TR0 ;關閉計時器 DJNZ R3,DELAY1 RET END發表人 - ㊣ 於 2005/05/28 21:47:47 |
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
|
big_eyes
一般會員 發表:28 回覆:52 積分:16 註冊:2005-03-22 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
|
big_eyes
一般會員 發表:28 回覆:52 積分:16 註冊:2005-03-22 發送簡訊給我 |
|
addn
高階會員 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
|
big_eyes
一般會員 發表:28 回覆:52 積分:16 註冊:2005-03-22 發送簡訊給我 |
|
addn
高階會員 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
|
foreman
高階會員 發表:3 回覆:124 積分:190 註冊:2004-09-10 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
|
skype_chen1
一般會員 發表:4 回覆:11 積分:8 註冊:2004-12-21 發送簡訊給我 |
;======8051 FIRST CPU TRANSMIT PROCESS
ORG 00H
JMP STARTS ;規避00H至2FH間之中斷向量執行位址
ORG 30H
STARTS: MOV SP,#60H
MOV PSW,#00H ;設定為 BANK0
MOV P0,#0FFH
MOV P1,#0FFH
MOV TMOD,#00100000B ;設定TIMER為模式2 Timer1 Mode2:(8 Bit Autoreload)
ANL PCON,#01111111B ;設定鮑率為9600 BIT/SEC
MOV TH1,#0FDH
SETB TR1 ;啟動TIMER1
MOV SCON,#01000000B ;串列埠MODE1 設定為傳送
LOOP:
MOV A,#05H ;啟動UART的讀入接收資料動作資料
MOV SBUF,A
NOP
NOP
JNB TI,$
CLR TI
JMP LOOP
END 定義可位元
RX_FLAG .REG 20H.0 ;=1,RECEIVE 1 BYTE OK
;=0,RECEIVE 1 BYTE ERROR ;======8051 SECOND CPU RECEIVE PROCESS
((接收))
ORG 00H
JMP START ;規避00H至2FH間之中斷向量執行位址
ORG 23H
JMP UART_INT
ORG 30H
START: MOV SP,#60H
MOV PSW,#00H
MOV P0,#0FFH ;SET PORT 0 INPUT PORT
MOV P1,#0FFH ;SET PORT 1 INPUT PORT
MOV TMOD,#00100000B ;設定TIMER1為模式2
ANL PCON,#01111111B ;設定鮑率為9600 BIT/SEC
MOV TH1,#0FDH
SETB TR1 ;啟動TIMER1
MOV SCON,#01010000B ;串列埠MODE1 設定為接收
CLR RX_FLAG
;=======================讀取串列埠資料==============================
MAIN_LOOP:
JBC RX_FLAG,$RECIVE_OK
JMP MAIN_LOOP $RECIVE_OK:
MOV P1,#00001010B
MOV R4,#10
CALL DELAY1
MOV P0,#0FFH
CALL DELAY1
JMP LOOP1 ;--Delay Time: r4*20ms
DELAY1:
MOV R5,#40
DLY: MOV R6,#249
DJNZ R6,$
DJNZ R5,DLY
RET
END UART_INT:
PUSH ACC
PUSH PSW
CLR RS0 ;USE BANK1
SETB RS1
JB RI,DATA_IN
CLR TI ;DON'T USE TRANSMIT THE FUCNTION
SJMP RETURN
DATA_IN:
MOV A,SBUF
CLR RI
CJNE A,#05H,$RETURN
SETB RX_FLAG
$RETURN:
POP ACC
POP PSW
RETI ;-----必須使用震盪器為11.0592MHZ,把第一顆 CPU TXD,接到第二顆 CPU RXD
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
|
skype_chen1
一般會員 發表:4 回覆:11 積分:8 註冊:2004-12-21 發送簡訊給我 |
;======8051 FIRST CPU TRANSMIT PROCESS
ORG 00H
JMP STARTS ;規避00H至2FH間之中斷向量執行位址
ORG 30H
STARTS: MOV SP,#60H
MOV PSW,#00H ;設定為 BANK0
MOV P0,#0FFH
MOV P1,#0FFH
MOV TMOD,#00100000B ;設定TIMER為模式2 Timer1 Mode2:(8 Bit Autoreload)
ANL PCON,#01111111B ;設定鮑率為9600 BIT/SEC
MOV TH1,#0FDH
SETB TR1 ;啟動TIMER1
MOV SCON,#01000000B ;串列埠MODE1 設定為傳送
LOOP:
MOV A,#05H ;啟動UART的讀入接收資料動作資料
MOV SBUF,A
NOP
NOP
JNB TI,$
CLR TI
JMP LOOP
END ;======8051 SECOND CPU RECEIVE PROCESS
RX_FLAG .REG 20H.0 ;=1,RECEIVE 1 BYTE OK
;=0,RECEIVE 1 BYTE ERROR ((接收))
ORG 00H
JMP START ;規避00H至2FH間之中斷向量執行位址
ORG 23H
JMP UART_INT
ORG 30H
START: MOV SP,#60H
MOV PSW,#00H
MOV P0,#0FFH ;SET PORT 0 INPUT PORT
MOV P1,#0FFH ;SET PORT 1 INPUT PORT
MOV TMOD,#00100000B ;設定TIMER1為模式2
ANL PCON,#01111111B ;設定鮑率為9600 BIT/SEC
MOV TH1,#0FDH
SETB TR1 ;啟動TIMER1
MOV SCON,#01010000B ;串列埠MODE1 設定為接收
CLR RX_FLAG
;=======================讀取串列埠資料==============================
MAIN_LOOP:
JBC RX_FLAG,$RECIVE_OK
JMP MAIN_LOOP $RECIVE_OK:
MOV P1,#00001010B
MOV R4,#10
CALL DELAY1
MOV P0,#0FFH
MOV R4,#10
CALL DELAY1
JMP LOOP1 ;--Delay Time: r4*20ms
DELAY1:
MOV R5,#40
DLY: MOV R6,#249
DJNZ R6,$
DJNZ R5,DLY
RET
END UART_INT:
PUSH ACC
PUSH PSW
CLR RS0 ;USE BANK1
SETB RS1
JB RI,DATA_IN
CLR TI ;DON'T USE TRANSMIT THE FUCNTION
SJMP RETURN
DATA_IN:
MOV A,SBUF
CLR RI
CJNE A,#05H,$RETURN
SETB RX_FLAG
$RETURN:
POP ACC
POP PSW
RETI ;-----必須使用震盪器為11.0592MHZ,把第一顆 CPU TXD,接到第二顆 CPU RXD 少打了一行更正你驗證看看應該是沒問題
|
阿信
版主 發表:111 回覆:983 積分:813 註冊:2005-03-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |