『壹』 求一個 串口通信發送的程序 用匯編的
;程序如下:
MOV SCON, #0x50; //串口工作在方式1.
ANL PCON, #0x7F; //SMOD=0
MOV TMOD, #0x20; //定時器1當做波特率發生器.
MOV TH1, #0xFD; //初值, 9600 @ 11.0592MHz
MOV TL1, #0xFD;
SETB TR1;
LOOP:
MOV A, #0
MOV SBUF, A
JNB TI, $
CLR TI
INC A
CJNE A, #31, LOOP
SJMP $
end
『貳』 匯編 串口通信
參考:
http://hi..com/do_sermon/item/c382edd859cf70d8241f4067
『叄』 單片機串口通信程序怎麼用匯編寫
單片機串口通信程序用匯編寫的模擬實例,可以模擬試試,參考一下吧。
很抱歉,回答者上傳的附件已失效
『肆』 串口通信匯編程序解釋
首先,你這樣的寫法是不對的,
ORG 001BH
AJMP sign0
這兩句應該放到LJMP main後面,以免中間的位元組佔用到001B,那樣就會出亂的。
第二、你的定時器0是用做中斷嗎?沒看見你的中斷入口。
第三、你的中斷處理程序這樣寫是大忌:LJMP $ ;虛擬主程序,等待中斷
中斷處理程序不跳出去,除非是中斷優先順序更高的中斷才能進來,而且這樣做程序的流程更混亂
第四、你的p1.0取反在兩個地方都寫了,最好只在一秒處理裡面寫。
『伍』 匯編串口通信程序
用8250做嗎???
框圖我搞不出來,2台機子之間的數據輸送倒可以
一開始初始化8250,搞成雙工的相同的波特和格式
然後一開始判斷有沒有那4個錯誤,沒有則判斷
數據接受准備好沒有,准備好則就去接受,然後列印到
屏幕,沒准備好則去檢查發送准備好沒有,好了就可以打字傳送了,沒准備好則返回繼續檢查那4個錯誤
『陸』 求單片機高手編寫一個串口通信接受字元程序,用匯編語言. 急急急!!!!
ORG 00H
AJMP MAIN
ORG 23H
AJMP URT;串口中斷
ORG 30H
MAIN:
MOV SP,#60H
MOV R0,#50H
MOV TMOD,#20H;T1工作方式2
SETB EA;開總中斷
ACALL URTINIT;串口初始化
AJMP $ ;等待串口中斷
URT: ;串口中斷每次只收1個位元組,未完繼續進入中斷,接收。
PUSH ACC
JNB RI,URT1
URT0:
CLR ES
CLR RI
MOV A,SBUF
MOV @R0,A;先保存
INC R0
CJNE R0,#60H,URT1
CLR EA
URT1:
SETB ES
POP ACC
RTI: RETI
URTINIT:
MOV SCON,#50H;串口工作方式1,接收
MOV TH1,#0F4H;11.0592M2400BPS
MOV TL1,TH1
SETB TR1;開啟定時器
SETB ES;開啟串口中斷
RET
『柒』 單片機 匯編程序 串口通信
HERE: AJMP HERE
SINT: MOV P1,R0
JB RI,RECV
JB TI,SEND
AJMP HERE
中斷裡面直接用這種方式直接跳到主程序,我以前還是真沒試過,不過估計能行吧。 我一直用RETI 返回堆棧地址位置的。
但下面這地方肯定有錯的,就是執行MOV SBUF,A 後沒有等待!!
正確的順序是: CLR TI ;清發送標記
MOV SBUF,A ;發送
JNB TI,$ ; 這里是如果TI沒有被置1就等待,因為送數可能還沒有完成。。就去執行別的動作,可能會有問題。
接收也一樣要等待:
MOV A,SBUF
JNB RI,$ ;等待接收完成標志。
另外:
CPL P1.7 有問題,我猜你是用P1.7來觀察接收次數,
但由於CPL P1.7取反命令是讀一下P1.7再取反輸出的,如果你的p1.7外接電路不科學,不合理,可能會出現你每次不管發1,還是發0,p1.7都是低電平,比如你將p1.7直接接在npn三管基極就會一直是0V或0.7V , P1.7的讀入值會總為0,CPL 輸出會總是為1
你可以用內部(非P口的位地址過度一下),比如: CPL 01H
MOV C,01H
MOV P1.7,C
你先試驗吧。。。
『捌』 匯編語言編程 串口通信 程序
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV TMOD,#20H
MOV TH0,#0F4H
MOV TL0,#0F4H
SETB TR1
MOV SCON,#50H
LOOP:
JNB RI,$
CLR RI
MOV A,SBUF
CJNE A,#'A',LOOP1
MOV A,#'O'
LCALL SEND
MOV A,#'K'
LCALL SEND
SJMP LOOP
LOOP1:
CJNE A,#'B',LOOP2
MOV A,#'E'
LCALL SEND
MOV A,#'R'
LCALL SEND
LCALL SEND
SJMP LOOP
LOOP2:
MOV A,#'N'
LCALL SEND
MOV A,#'O'
LCALL SEND
LJMP LOOP
SEND:
MOV SBUF,A
JNB TI,$
CLR TI
RET
END
『玖』 51單片機串口通信(匯編)
HERE: AJMP HERE
SINT: MOV P1,R0
JB RI,RECV
JB TI,SEND
AJMP HERE
中斷裡面直接用這種方式直接跳到主程序,我以前還是真沒試過,不過估計能行吧。 我一直用RETI 返回堆棧地址位置的。
但下面這地方肯定有錯的,就是執行MOV SBUF,A 後沒有等待!!
正確的順序是: CLR TI ;清發送標記
MOV SBUF,A ;發送
JNB TI,$ ; 這里是如果TI沒有被置1就等待,因為送數可能還沒有完成。。就去執行別的動作,可能會有問題。
接收也一樣要等待:
MOV A,SBUF
JNB RI,$ ;等待接收完成標志。
另外:
CPL P1.7 有問題,我猜你是用P1.7來觀察接收次數,
但由於CPL P1.7取反命令是讀一下P1.7再取反輸出的,如果你的p1.7外接電路不科學,不合理,可能會出現你每次不管發1,還是發0,p1.7都是低電平,比如你將p1.7直接接在npn三管基極就會一直是0V或0.7V , P1.7的讀入值會總為0,CPL 輸出會總是為1
你可以用內部(非P口的位地址過度一下),比如: CPL 01H
MOV C,01H
MOV P1.7,C
你先試驗吧。。。
『拾』 匯編語言之串口通信
ORG 0000H
LJMP START
ORG 0023H
LJMP UARTInterrupt
;這段程序沒有意義呀,永遠執行不了
MOV R1,#8EH ;AUXR
MOV A,#40H ;T1
ORL A,@R1
MOV @R1,A ;T1, 1T Mode
START:
MOV SP,#60H
LCALL InitUART
LOOP:
;add your code here!
LJMP LOOP
InitUART:
MOV TMOD,#20H
MOV SCON,#50H
MOV TH1,#0DCH
MOV TL1,TH1
MOV PCON,#00H
SETB EA
SETB ES
SETB TR1
RET
UARTInterrupt:
JB RI,IsUART_Receive
CLR TI
RETI
IsUART_Receive:
CLR RI
PUSH ACC
MOV A,SBUF
;========================
;add your code here!
;========================
POP ACC
RETI
SendOneByte:
CLR ES
CLR TI
MOV SBUF,A
WaitSendFinish:
JNB TI,WaitSendFinish
CLR TI
SETB ES
RET
END
;其餘沒有什麼問題,就是只接受數據,發送沒有調用。