单片机小的软件编程题目!自己编了下不知道对不对!

建立一个数字0~9的ASCII码表,表格放在程序存贮器区首址为1000H的十个单元内,编程根据R0中的内容来查表,所得结果存放在寄存器B中,注意R0中的内容不在0~9范围时的处理。
TABLE EQU 1000H ;TABLE的地址为1000H
ORG 0000H
SJMP MAIN
OGR 30H
MAIN:MOV R0, #40H
MOV R1, #50H
MOV R2, #10
MOV DPTR,#TABLE
LOOP: MOV A,@R0
SUBB A,#10 ;看输入的是否不在0—9内
JNC ERROR
MOV A, @R0
INC @R0
ACALL TRANS ;调用查询子程序
DJNZ R2, LOOP
SJMP $
ERROR: INC @R0
LJMP LOOP
TRANS: MOVC A,@A+DPTR ;查表的子程序
MOV @R1,A
MOV B,@R1
RET
TABLE:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
END
望高手指点啊!谢谢啊!

不用这么复杂。

ORG 0000H
SJMP MAIN
OGR 0030H
MAIN:
MOV A, R0 ;原始数据只有1个,就在R0中
SUBB A, #10 ;看是否不在0—9内
JNC ERROR ;无借位转移

MOV A, R0 ;重新取数
MOV DPTR,#TABLE
MOVC A, @A+DPTR ;查表
MOV B, A ;保存
SJMP $ ;暂停

ERROR:
SJMP $ ;错误如何处理,题目中没有写

ORG 1000H
TABLE:
DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
END
温馨提示:内容为网友见解,仅供参考
无其他回答

简单的单片机实验题目!编了下,不知道对不对!麻烦指点!
传统的单片机,只有一个片外数据指针DPTR,地址的处理就比较麻烦。稍新一些的单片机,如AT89S52,就有两个DPTR。楼主的题目,像是学校里面的作业,一般是不使用两个DPTR的。本题目,数据量很小,可以先全部倒到片内,再传送到片外的目的地。这样便于大批数据的修改,但是,为了解决现在的小问题,程序未免...

单片机类题目,大家讨论一下,该如何作答。
程序还得你自己写,第一道题很好办,每个都是256MS,8位DA转换也是0-255,256个数字,其实就是每过1毫秒DA值减1。第二道题,51单片机我忘了T1在方式一下是什么定时器,主要是看几位的定时、计数器,如果8位的,计数最大值就是2^8=256,16位的就是2^16=65536,初值等于计数最大值减去要计数...

求解单片机编程题目
一、将(0~99)的100个连续十进制数,依次存入首地址为2000H的RAM区的存储单元中去。MOV DPTR, #2000H MOV A, #0 MOV R1, #100 LOOP:MOVX @DPTR, A INC A INC DPTR DJNZ R1, LOOP SJMP 二、定时\/计数器进行初始化编程。MOV TMOD, #01010001B MOV TH1, #(65...

汇编语言 单片机小题目 判断 改错 高分赏
三.指错 MOV A,1000H 错处:地址1000H超出51单片机片内储存器范围; MOV 30H,@R7 错处:仅R0、R1可存放数据及地址,@R7作间接地址无效; MOVX A,R0 错处:传入外部数据,须用间接寻址方式MOVX A,@R0; MOVX B,@DPTR 错处:仅累加器A可接收外部数据存贮器的数据,B不可以; MOVC ...

单片机编程题目,望达人奉上答案~
\/\/初始化程序 void InitUART(void){ TMOD = 0x20;SCON = 0x50;TH1 = 0xFA;TL1 = TH1;PCON = 0x00;EA = 1;ES = 1;TR1 = 1;} \/\/发送 SBUF = c;while(!TI);TI = 0;\/\/接收中断程序 void UARTInterrupt(void) interrupt 4 { RI = 0;c=SBUF;} ...

求解一道单片机编程题目
D1-D8对应的灯P0.0~P0.7亮(高电平亮)。对应的灯,到底是那个灯?要求K3按下按键时,D1-D8极间隔的灯亮(高电平亮)。对应的灯,到底是那个灯?你就直说不好吗?如:K0按下按键时,D1亮 K1按下按键时,D8亮 K2按下按键时,D3亮 K3按下按键时,D1 D3 D5 D7亮 ...

单片机编程题目,望达人奉上答案~
100HZ方波,定时5ms include <reg51.h> sbit SqW=P1^0;void main(void){ TMOD = 0x01;TH0 = 0x0EC;TL0 = 0x78;EA = 1;ET0 = 1;TR0 = 1;while(1);} void Timer0Interrupt(void) interrupt 1 { TH0 = 0x0EC;TL0 = 0x78;SqW=~SqW;} ...

单片机编程问题
加上30h并分别放在21H、22H中,结果分别是34h('4'的ASCII码)、38h('8'的ASCII码)。“BCD和ASCII之间不是差30H么”在0~9之内的一位数字是如此。问题是20H中的是个两位数,所以要除以10H将十位与个位分离开。另外吐槽一下:这题目用除法来分离十位个位是效率低下的行为……

两道单片机编程题目,用汇编语言
1、入口条件:待转换的两位十六进制数在累加器A中。出口信息:高四位的ASCII码在A中,低四位的ASCII码在B中。影响资源:PSW、A、B 堆栈需求: 4字节 HASC:MOV B,A ;暂存待转换的单字节十六进制数 LCALL HAS1 ;转换低四位 XCH A,B ;存放低四位的ASCII码 SWAP A ;准备转换高四位 HAS1:...

麻烦高手做一下这些单片机的题目
1.MOV A,R0 ADD A,R1 MOV 60H,A MOV 20H,#00H MOV 20H.0,CY MOV 61H,20H 2.MOV DPH,#10H MOV R0,#00H MOV R1,#30H LOOP:MOV DPL,R0 MOVX A,@DPTR MOV @R1,A INC R0 INC R1 CJNE R0,#31H,LOOP RET 3.MOV 00H,#71H MOV 01H,#51H MOV 08H,#20H SETB RS0 CLR ...

相似回答