你的仿真图中,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接srdp3.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是将模拟两转换成数字量的!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)