SPDAT、SPSTA、SPCON之相關問題 |
尚未結案
|
mysmile0918
一般會員 ![]() ![]() 發表:1 回覆:1 積分:0 註冊:2009-10-22 發送簡訊給我 |
呃
先看程式 [cord] ;*************************************** ; 程序开始 ;*************************************** ORG 0000H LJMP Start ORG 0003H LJMP INT0 ;SPI初始化 Start: MOV SPCON,#SPCON_WORD LCALL Delay ;初始化ENC28J60 Init: LCALL InitE60 ; 设置堆栈指针 SpSet: MOV A,#SP_BASE MOV SP,A SETB EA SETB EX0 SETB IT0 ;等待中断 Wait: AJMP Wait ;************************************ ; ENC28J60初始化 ;************************************ ;检测ESTAT.CLKRDY位 InitE60:MOV A,#ESTAT_ADDR MOV SPDAT,A LCALL ChkSPIF LCALL Delay MOV SPDAT,A LCALL ChkSPIF MOV A,SPDAT ANL A,#01H JZ InitE60 ;设置以太网中断允许寄存器EIE MOV A,#EIE_ADDR MOV SPDAT,A LCALL ChkSPIF MOV A,#EIE_WORD MOV SPDAT,A LCALL ChkSPIF ;设置以太网控制寄存器ECON1 MOV A,#ECON1_ADDR MOV SPDAT,A LCALL ChkSPIF MOV A,#ECON1_WORD MOV SPDAT,A LCALL ChkSPIF ;************************************ ; 检测SPI传输是否完成 ;************************************ ChkSPIF:MOV A,#10000000B ANL A,SPSTA Judge: JZ Judge MOV SPSTA,#0 RET ;這是程式片段,完整請看附件(包含EQU定址等等) ; ========================== [/cord] 這是要寫在8051上的程式, 用的是基本的組議語言 問題在於,"SPDAT"、"SPSTA"、"SPCON"這三個指令 似乎沒辦法使用 已知資料是8位元、單一位元傳輸,即8位元是1位元、1位元丟給ENC28J60這顆IC 想出來的方案是用另一種串列阜設定 範例如下 ========================== START: MOV TMOD, #20H ANL PCON, #3FH MOV TH1, #FDH SETB TR1 MOV SCON, #01010000B MOV P2, #FFH LOOP: MOV A, P2 MOV SBUF, A JNB RI, $ CLR RI MOV P0, SBUF CLR TI JMP LOOP =========================== 用在8051自己跟自己傳輸資料(P2為指撥開關輸入,P0 LED顯示狀況 但想不出怎麼應用 可否請各路高手提示、示範,小弟不才,在此深重感謝 若有表達不清楚的地方煩請指出,謝謝 ![]() 編輯記錄
|
mymj
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:132 回覆:486 積分:608 註冊:2002-10-25 發送簡訊給我 |
問題在於,"SPDAT"、"SPSTA"、"SPCON"這三個指令
MOV SPDAT,A MOV SPDAT,A 這都是存取記憶體 所以"SPDAT"、"SPSTA"、"SPCON"你要先定義才能使用 mymj ===================引 用 mysmile0918 文 章=================== 呃 先看程式 [cord] ;*************************************** ; 程序开始 ;*************************************** ORG 0000H LJMP Start ORG 0003H LJMP INT0 ;SPI初始化 Start: MOV SPCON,#SPCON_WORD LCALL Delay ;初始化ENC28J60 Init: LCALL InitE60 ; 设置堆栈指针 SpSet: MOV A,#SP_BASE MOV SP,A SETB EA SETB EX0 SETB IT0 ;等待中断 Wait: AJMP Wait ;************************************ ; ENC28J60初始化 ;************************************ ;检测ESTAT.CLKRDY位 InitE60:MOV A,#ESTAT_ADDR MOV SPDAT,A LCALL ChkSPIF LCALL Delay MOV SPDAT,A LCALL ChkSPIF MOV A,SPDAT ANL A,#01H JZ InitE60 ;设置以太网中断允许寄存器EIE MOV A,#EIE_ADDR MOV SPDAT,A LCALL ChkSPIF MOV A,#EIE_WORD MOV SPDAT,A LCALL ChkSPIF ;设置以太网控制寄存器ECON1 MOV A,#ECON1_ADDR MOV SPDAT,A LCALL ChkSPIF MOV A,#ECON1_WORD MOV SPDAT,A LCALL ChkSPIF ;************************************ ; 检测SPI传输是否完成 ;************************************ ChkSPIF:MOV A,#10000000B ANL A,SPSTA Judge: JZ Judge MOV SPSTA,#0 RET ;這是程式片段,完整請看附件(包含EQU定址等等) ; ========================== [/cord] 這是要寫在8051上的程式, 用的是基本的組議語言 問題在於,"SPDAT"、"SPSTA"、"SPCON"這三個指令 似乎沒辦法使用 已知資料是8位元、單一位元傳輸,即8位元是1位元、1位元丟給ENC28J60這顆IC 想出來的方案是用另一種串列阜設定 範例如下 ========================== START: MOV TMOD, #20H ANL PCON, #3FH MOV TH1, #FDH SETB TR1 MOV SCON, #01010000B MOV P2, #FFH LOOP: MOV A, P2 MOV SBUF, A JNB RI, $ CLR RI MOV P0, SBUF CLR TI JMP LOOP =========================== 用在8051自己跟自己傳輸資料(P2為指撥開關輸入,P0 LED顯示狀況 但想不出怎麼應用 可否請各路高手提示、示範,小弟不才,在此深重感謝 若有表達不清楚的地方煩請指出,謝謝 |
mysmile0918
一般會員 ![]() ![]() 發表:1 回覆:1 積分:0 註冊:2009-10-22 發送簡訊給我 |
SPDAT的定義大致上有個方向了,謝謝
那還有幾個問題 在SPCON上的設定 ---------------------------------------------------------------------------------------------------- SPCON_WORD EQU 01010110B;同步時鍾FCLK PERIPH/8,使能串口,使能SS,主模式,空閑狀??低電平,上升沿移入數據 ---------------------------------------------------------------------------------------------------- 實在看不明白這些名詞 這樣的設定是否能請給小弟詳細說明? 以下是小弟的假想 ;----------------------------- 以書籍上的內容 在SCON串列阜控制暫存器裡 01010110相對的"假想"設定如下 ====b7===b6===b5===b4====b3===b2====b1===b0=== ===SM0==SM1==SM2==REN==TB8==RB8===TI==RI==== ====0====1=====0====1=====0====1=====1===0==== 以SM0與SM1為01來說 模式為8位元UART,可變的包率 問題就在後面的010110 書籍上的設定似乎給的說明太過簡略 在範例中的TB8、RB8、TI幾乎都是以0設定 所以猜測SPCON的數據另有他意 另外 [code c#] ChkSPIF: MOV A, #10000000B ANL A, SPSTA Judge: JZ Judge MOV SPSTA, #0 RET [/code] 僅給SPSTA一個 SPSAT EQU XXH 是否可行 上網查了很多資料,也思考了很久 若思考方向錯誤,懇請給予指點 IC都買了,電路也接了,實在很想玩出結果阿~~~ 小弟不才,求個知識,謝謝 感恩!
編輯記錄
mysmile0918 重新編輯於 2009-10-26 14:21:40, 註解 無‧
mysmile0918 重新編輯於 2009-10-26 14:22:22, 註解 無‧ mysmile0918 重新編輯於 2009-10-26 14:23:53, 註解 無‧ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |