基于CodeWarrior的HCS12单片机汇编换行输出代码及循环适配问询
在CodeWarrior HCS12汇编中实现终端换行输出
嘿,我来帮你搞定这个换行的问题!首先得明确:终端要实现清晰的换行,需要输出两个关键的ASCII字符——回车(CR,ASCII码$0D)和换行(LF,ASCII码$0A)。大多数终端需要同时输出这两个,才能让光标回到行首并跳到下一行,避免所有内容挤在同一行重叠。
看你的代码,原来循环最后输出的是逗号(这里提一句:标准逗号的ASCII是$2C,你用的$82是扩展ASCII字符,可能终端显示会有异常,建议换成标准的$2C)。现在我们把这部分改成输出换行相关的字符,或者在循环结束前加上换行代码就行。
修改后的完整循环代码
Label2: JSR out2hex ; 打印计数器值 LDAB #$3A ; 加载冒号的标准ASCII码($3A) JSR putchar ; 终端打印冒号 LDAB #$24 ; 加载$的ASCII码 JSR putchar ; 终端打印$ LDAB A,X ; 把X+A地址的值加载到B寄存器 JSR out2hex ; 打印该十六进制值 INCA ; 累加器A的计数器值自增 ; --- 新增/替换:输出换行字符 --- LDAB #$0D ; 加载回车CR的ASCII码 JSR putchar ; 发送回车,让光标回到行首 LDAB #$0A ; 加载换行LF的ASCII码 JSR putchar ; 发送换行,让光标跳到下一行 ; --- 换行输出结束 --- CMPA #20 ; 把计数器和数组元素个数20比较 BNE Label2 ; 计数器不等于20就跳回循环开头继续执行
可选:保留逗号的修改方案
如果你还想保留原来的逗号输出,只需要在逗号之后添加换行代码就行:
; ... 前面的代码不变 ... INCA ; 累加器A自增 LDAB #$2C ; 加载标准逗号的ASCII码(替换原来的$82) JSR putchar ; 打印逗号 ; 下面是换行代码 LDAB #$0D JSR putchar LDAB #$0A JSR putchar CMPA #20 BNE Label2
小提示
- 你的
putchar函数要确保是正确的:它的作用就是把B寄存器里的ASCII码通过串口发送到终端,所以只要加载对了ASCII值,调用它就能输出对应字符。 - 有些极简终端可能只需要
$0A(换行)就能生效,但同时输出$0D+$0A兼容性更好,能适配绝大多数终端工具。
内容的提问来源于stack exchange,提问作者Bixo
相关产品推荐
相关产品推荐

