JMP SEND ;否則轉(zhuǎn)發(fā)送處理
NEXT:
MOV A,SBUF ;從 SBUF 中取字符
MOV SBUF,A ;回送到發(fā)送 SBUF 中
JMP OVER SEND:
clr ti
OVER:
reti
SER_INIT: ;中斷初始化
MOV SCON,#50H
ORL TMOD,#20H
ORL PCON,#80H
MOV TH1,#0FDH ;設(shè)定波特率 SETB TR1 ;定時器 1 開始運行 SETB REN ;允許接收
SETB SM2
RET END
這個程序使用了中斷方式編寫串行口輸入/輸出程序,它的功能是將接串行口收到的字 符回送,即再通過串行口發(fā)送出去。
正確輸入源文件、建立工程、編譯連接沒有錯后,可進行調(diào)試,使用 Keil 自帶的串行 窗口測試功能是否正確,如果正確,可以進行下一步的連機試驗。
為簡單實用,我們不借助于其它的硬件,而是讓 PC 機上的兩個串口互換數(shù)據(jù),即 COM1 發(fā)送 COM2 接收,而 COM2 發(fā)送則由 COM1 接收,為此,需要做一根連接線將這兩個串口 連起來,做法很簡單,找兩個可以插入 PC 機串口的 DIN9 插座(母),然后用一根 3 芯線將 它們連起來,連線的方法是:
2——3
3——2
5——5
接好線把兩個插頭分別插入 PC 機上的串口 1 與串口 2。找一個 PC 機上的串口終端調(diào) 試軟件,如串口精靈之類,運行該軟件,設(shè)置好串口參數(shù),其中串口選擇 2,串口參數(shù)設(shè)置 為:
19200,n,8,1 其含義是波特率為 19200,無奇偶校驗,8 位數(shù)據(jù),1 位停止位。 在 Keil 調(diào)試窗口的 command 頁中輸入:
>mode com1 19200,0,8,1
>assign com1
注意兩行最前面的“>”是提示符,不要輸入,第二行中的“<”和“>”即“小于”和 “大于”符號,中間的是字母“s”和“input”的前兩個字母,最后是字母“s”和“output” 的前三個字母。
第一行命令定義串口 1 的波特率為 19200,無奇偶校驗,8 位數(shù)據(jù),1 位停止位。第二 行是將串口 1(com1)分配給串行窗口。
全速運行程序,然后切換串口精靈,開始發(fā)送,會看到發(fā)送后的數(shù)據(jù)會立即回顯到窗口 中,說明已接收到了發(fā)送過來的數(shù)據(jù)。切換到 uVison,查看串行窗口 1,會看到這里的確接 收到了串口精靈送來的內(nèi)容。
2、從端口送入信號
程序調(diào)試中如果需要有信號輸入,比如數(shù)據(jù)采集類程序,需要從外界獲得數(shù)據(jù),由于 Keil 的調(diào)試完全是一個軟件調(diào)試工具,沒有硬件與之相連,所以不可能直接獲得數(shù)據(jù),為此 必須采用一些替代的方法,例如,某電路用 P1 口作為數(shù)據(jù)采集口,那么可以使用的一種方 法是利用外圍接口,打開 PORT 1,用鼠標(biāo)在點擊相應(yīng)端口位,使其變?yōu)楦唠娖交虻碗娖剑?就能輸入數(shù)據(jù)。顯然,這種方法對于要輸獲得數(shù)據(jù)而不是作位處理來說太麻煩了,另一種方 法是直接在 command 頁輸入 port1=數(shù)值,以下是一個小小的驗證程序。例 7:
LOOP: MOV A,P1
JZ NEXT
MOV R0,#55H JMP LOOP
NEXT: MOV R0,#0AAH JMP LOOP
END
電子發(fā)燒友App










評論