单片机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
|