AD0809转换汇编代码求解。很急,谢谢。

beiguonanjiang 2015-12-03 07:39:41
如果可以,请每行给一个注释。谢谢。
EXTRN CODE(Display8)
Addr_0809 XDATA 0F000H
buffer DATA 30H ;8个字节的显示缓冲区
EOC_0809 BIT P1.2

ORG 0
LJMP START
ORG 0100H
START: MOV SP,#60H ;设堆栈
START1: ACALL AD0809
ACALL Display_Data
MOV R0,#Buffer ;显示缓冲区首地址
LCALL DisPlay8 ;调显示
LCALL TIME ;延时
SJMP START1
Display_Data: MOV B,A
ANL A,#0FH
MOV buffer+4,A
MOV A,B
ANL A,#0F0H
SWAP A
MOV buffer+5,A
MOV A,B
MOV B,#51 ;255/51 (16进制的1 = 1/51V)
DIV AB
ORL A,#80H ;加上小数点
MOV buffer+2,A
ACALL Display_Data_1
MOV buffer+1,A ;第一位小数
ACALL Display_Data_1
MOV buffer,A ;第二位小数
MOV buffer+3,#10H
MOV buffer+6,#10H
MOV buffer+7,#10H ;消隐
RET

Display_Data_1: MOV A,#10
MUL AB
ADD A,B
JNC Display_Data_11
INC A
INC B
Display_Data_11:MOV R7,A
MOV A,B
RL A
RL A
ADD A,B
XCH A,R7
MOV B,#51
DIV AB
ADD A,R7
RET

AD0809: MOV A,#0
MOV DPTR,#Addr_0809
MOVX @DPTR,A ;启动AD转换
JNB EOC_0809,$ ;是否转换完成
MOVX A,@DPTR ;读转换结果
RET

TIME: PUSH 06H
PUSH 07H
MOV R6,#200
TIME1S1: MOV R7,#200
DJNZ R7,$
DJNZ R6,TIME1S1
POP 07H
POP 06H
RET
END
...全文
509 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhujinqiang 2015-12-08
  • 打赏
  • 举报
回复
多说一句啊 这里需要说明的是, 启动AD转换的时候,ADC0809的三个地址端A、B、C可与地址线A0 A1 A2相连,这时的通道选择就是固定的,是你给的0809地址XDATA 0F000H 的低3位二进制值 000,表示通道0. (此时A可以为任意数,因为A B C并没有连到数据线) 也可与数据线例如与D0~D2相连。这时候上面启动A/D转换的指令里面A的赋值#0 ;立即数0才有意义,(这时A的内容不能为任意数,而必须和所选输入通道号IN0~IN7相一致)。
woshi_ziyu 2015-12-07
  • 打赏
  • 举报
回复
先了解实现工程的原理 然后再看代码
beiguonanjiang 2015-12-06
  • 打赏
  • 举报
回复
主要是DISPLAY的那几段完全看不明白,请注释。谢谢。
zhujinqiang 2015-12-05
  • 打赏
  • 举报
回复
就简单说下AD启动转换的这段

Addr_0809 XDATA 0F000H
buffer DATA 30H ;8个字节的显示缓冲区
EOC_0809 BIT P1.2

AD0809:		MOV	A,#0  ;立即数0送A 0809有8个通道 这里是通道号0
		MOV	DPTR,#Addr_0809   ;通道地址送DPTR 就是前面的 XDATA 0F000H
 		MOVX	@DPTR,A		;启动AD转换
	 	JNB	EOC_0809,$	;是否转换完成 根据P1.2 1=完成 0=转换中
		MOVX	A,@DPTR		;读转换结果
		RET


zhujinqiang 2015-12-05
  • 打赏
  • 举报
回复
好像程序不全 DisPlay8那段没有

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧