單片機232串口發送字符到電腦。但是無法發送00這個字符。請問有什么辦法解決?急求幫助
K1 EQU P1.4 ; 按鍵端口 ; 變量定義 KEY_S EQU 50H ; 當前的按鍵狀態 KEY_V EQU 51H ; 上次的按鍵狀態
ORG 0000H LJMP MAIN
MAIN: MOV TMOD,#20H ; 定時器1工作于8位自動重載模式,用于產生波特率 MOV TH1,#0FDH MOV TL1,#0FDH ; 波特率9600
MOV SCON,#50H ; 設定串行口工作方式 ANL PCON,#0EFH ; 波特率不倍增
SETB TR1 ; 啟動定時器1 MOV IE,#0 ; 禁止任何中斷
MOV KEY_V,#01H ;
MAIN_RX: JNB RI,MAIN_KEY ; 是否有數據到來 CLR RI MOV A,SBUF ; 暫存接收到的數據 MOV P0,A ; 數據傳送到P0口 LCALL SEND_CHAR ; 回傳接收到的數據
MAIN_KEY: LCALL SCAN_KEY ; 掃描按鍵 JZ MAIN_RX LCALL DELAY_15MS ; 延時去抖動 LCALL SCAN_KEY JZ MAIN_RX MOV KEY_V,KEY_S ; 保存鍵值 LCALL PROC_KEY ; 鍵處理 SJMP MAIN_RX ;=============================================================================== SCAN_KEY: ; 掃描按鍵, (在此實例中僅掃描按鍵K1) ; 傳入參數: 無 ; 返回值: 無 CLR A MOV C,K1 MOV ACC.0, C MOV KEY_S,A XRL A,KEY_V ; 檢查按鍵狀態是否改變 RET ;=============================================================================== PROC_KEY: ; 按鍵處理子程序 --- 發送字符串到PC ; 傳入參數: KEY_V --- 按鍵值 ; 返回值: 無 JB K1,END_PROC_KEY ; K1未按下時,直接返回 MOV DPTR,#TAB_WWW ; 字串表格地址
SEND_STRING: CLR A MOVC A,@A+DPTR JZ END_PROC_KEY ACALL SEND_CHAR INC DPTR ; 下一字符 SJMP SEND_STRING END_PROC_KEY: RET
;=============================================================================== SEND_CHAR: ; 傳送一個字符 ; 傳入參數: ACC(要發送的數據) ; 返回值: 無 MOV SBUF,A JNB TI,$ ; 等特數據傳送 CLR TI ; 清除數據傳送標志 RET ;=============================================================================== ; 掃描按鍵, (在此實例中僅掃描按鍵K1) ; 傳入參數: 無 ; 返回值: 無 DELAY_15MS: MOV R7,#15 DELAY15MS_1: MOV R6,#0E8H DELAY15MS_2: NOP NOP DJNZ R6,DELAY15MS_2 DJNZ R7,DELAY15MS_1 RET
TAB_WWW: DB 80H,78H,78H,80H,00H,80H,00H
END
|