请教一个关于AD转换器的程序问题,必须用汇编语言

请教一个关于AD转换器的程序问题,必须用汇编语言,第1张

给你一个AD转换子程序,转换结果注释了,你自己根据需要槐埋改下就行了。

你的仿真图中,ADS7825的控制脚看不清,你根据自己的仿图改一下引脚定义就行了。

引脚定义为

BYTE BIT P1.2 ADS7825定义引脚

BUSY BIT P1.3

CS BIT P1.4

RC BIT P1.5

转换子程序如下:

**********AD转换子程序**********

ADSConvert: 通局肢道选择在R6中

MOV A , #0FCH

ADD A , R6

MOV P1, A P1口选择模拟量输入通道

CLR CS

CLR RC

SETB RC

JNB BUSY,$等待转换结束

CLR BYTE 先读高8位

MOV adnumh,P0 从P0口读出高8位,放在adnumh中,自己改成30H或32H

SETB BYTE 后读低8位

MOV adnuml,P0 从P0口读出低8位,放在adnuml中,自己改成31H或33H

SETB CS

RET 转换结束在adnumh,adnumh中

最后要说明一点,ADS7825输入的模拟电压范围是正负10V的,不知你的仿真图的电桐明世压是多少?

还有,读出的数据结果是16位的带符号数,即模拟电压是负时,转换的结束是负数。电压是正时,转换结果是正数。你要处理好正负数的显示。

接线:p3.6接srd

p3.7接swr

p3.0接pin

p3.1接clk

ad0809的clk接脉冲

cs接8000h的译码电路程序:ad0809 xdata 8000h

org 0000h

ajmp main

org 0030h

main:mov dptr,#8000h

mov a,#01h

movx @dptr,a

call delay

movx a,@dptr

mov r0,a

call disp

call delay

call delay

call delay

ajmp maindisp:mov a,r0

anl a,#00001111b

acall dsend

mov a,r0

swap a

anl a,#00001111b

acall dsend

ret

dsend:mov dptr,#tab

movc a,@a+dptr

mov sbuf,a

jnb ti,$

clr ti

ret delay:mov r4,#250

delay1:mov r5,#250

djnz r5,$

djnz r4,delay1

ret

tab:db 03h 0

db 9fh 1

db 25h 2

db 0dh 3

db 99h 4

db 49h 5

db 41h 6

db 1fh 7

db 01h 8

db 09h 9

db 11h 灭

db 11h

db 0c1h

db 63h

db 85h

db 61h

db 71h

db 00h

end

0000H和000BH是固定的,000BH是中断入口地址

那个0100H应该是根据程序的长短来定的,要看你单片机的程序存储器有多大,还有程序的前面要放多少东西了链余空。7FF8H

这个是0809AD转换器的地址,51单片机的P2口默认为十六位地址的高八位地址,要根据是不是有其它的外围设备来定地址,如果棚瞎没接的话,可以随便来定!!MOVX

@DPTR,A这句是用来启动0809,不用知道A里放的是什么东西,有这句的话0809就会被启动了

HERE

SJMP

HERE

这句无限循环

应该是用来等待中断的

end的话程序会被终止,中断程序也不会再被执行了

LED那个你需要知道LED的结构很简单,网上很容易找

硬件地址的分配是看你接的那几根线了,原则上只要不重复应该都可以

有一些

是电路直接与单片机I/0口连接,而没有经过AD转换,请问什么“情况下可以进行这样的处理,也就是说,单片机I/0口可以接多大的电流或者电压?”这毁弊句电压的话一般是5V,但是那个AD不是因为电压不匹配才接的,单片机要的是数字量,AD是将模拟两转换成数字量的!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12296984.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存