谁能帮我解释一下这段程序?最好是逐条的。
8051采用adc0809构成8通道数据采集系统。告诉我8个通道的地址具体是怎么确定的,还有采集数据的存放地址;再帮我逐条解释一下这段程序。谢谢各位高手了!!!电路连接见...
8051采用adc0809构成8通道数据采集系统。告诉我8个通道的地址具体是怎么确定的,还有采集数据的存放地址;再帮我逐条解释一下这段程序。谢谢各位高手了!!!
电路连接见图 http://hi.baidu.com/%C4%DF%D4%C6%C1%D622/album/item/e21d388bcc3e745eb31bbade.html#
程序如下
ORG 0030H;
MOV R1, #30H;
MOV R2, #8H;
MOV TL0, #0H;
MOV TH0, #0B8H;
MOV TMOD, #1H;
CLR ET0;
SETB TR0;
MOV SCON, #40H;
MOV DPTR, #0C0FF;
LOOP:
MOV A, R2;
SUBB A, R1;
JNZ LOOP2;
MOV R1,#0H;
MOV DPTR, #0COFF;
MOV R1, #OH;
MOV DPTR, #0C0FF;
LOOP1:
JNB TFO, LOOP1;
CLR TF0;
MOV TL0, #0H;
MOV TH0, #0B8H;
LOOP2:
MOVX @DPTR, A;
LOOP3:
JB P1.0,LOOP3;
LOOP4:
JNB P1.0,LOOP4;
MOVX A, @DOTR;
MOV @R1,A;
INC DPH;
INC R1;
LJMP LOOP;
END
这是电路图 麻烦各位高手了 展开
电路连接见图 http://hi.baidu.com/%C4%DF%D4%C6%C1%D622/album/item/e21d388bcc3e745eb31bbade.html#
程序如下
ORG 0030H;
MOV R1, #30H;
MOV R2, #8H;
MOV TL0, #0H;
MOV TH0, #0B8H;
MOV TMOD, #1H;
CLR ET0;
SETB TR0;
MOV SCON, #40H;
MOV DPTR, #0C0FF;
LOOP:
MOV A, R2;
SUBB A, R1;
JNZ LOOP2;
MOV R1,#0H;
MOV DPTR, #0COFF;
MOV R1, #OH;
MOV DPTR, #0C0FF;
LOOP1:
JNB TFO, LOOP1;
CLR TF0;
MOV TL0, #0H;
MOV TH0, #0B8H;
LOOP2:
MOVX @DPTR, A;
LOOP3:
JB P1.0,LOOP3;
LOOP4:
JNB P1.0,LOOP4;
MOVX A, @DOTR;
MOV @R1,A;
INC DPH;
INC R1;
LJMP LOOP;
END
这是电路图 麻烦各位高手了 展开
2个回答
展开全部
P2.0~P2.2为通道选择线,P2.6为IC选择线;P1.0为转换结束信号线;P0.0~P0.8为数据线;P2口被配置为第二功能,即地址线的高8位(低8位忽略),所以通道选择线的地址范围为C0FFH~C7FFH,采集的数据存放在30H开始的外部ram中。
详细解释:
ORG 0030H; 定位程序在ROM中的开始存储地址为30H
MOV R1, #30H; R1=30H
MOV R2, #8H; R2=8
MOV TL0, #0H; 定时器0的低8位为0
MOV TH0, #0B8H; 定时器0的高8位为B8H
MOV TMOD, #1H; 定时器0的工作方式为1,功能为定时器方式, 软件控制
CLR ET0; 禁止定时器0的中断
SETB TR0; 启动定时器0
MOV SCON, #40H; 设定串口为工作方式1,不允许接受
MOV DPTR, #0C0FF; 设置DPTR为C0FFH——ADC0809的通道选择地址
LOOP:
MOV A, R2; A=R2=8H
SUBB A, R1; A=A-R1
JNZ LOOP2; A!=0,则跳转到LOOP2处执行
MOV R1,#0H; R1=0;
MOV DPTR, #0COFF; DPTR=C0FF;
MOV R1, #OH;
MOV DPTR, #0C0FF;
LOOP1:
JNB TFO, LOOP1; 如果TF0!=1,则等待(循环执行本指令)
CLR TF0; TF0=0
MOV TL0, #0H; 定时器0的低8位为0
MOV TH0, #0B8H; 定时器0的高8位为B8H
LOOP2:
MOVX @DPTR, A; (DPTR)=A;实际是一条空操作,目的只是为了选择转 换器AD0809的通道0并开始经行AD转换
LOOP3:
JB P1.0,LOOP3; 判断P1.0是否为高;实际是判断AD转换是否开始(开始转换则EOC输出高电平)
LOOP4:
JNB P1.0,LOOP4; 判断P1.0是否为低;实际是判断AD转化是否结束(转换结束,则EOC输出为低电平)
MOVX A, @DOTR; A=(DPTR);读取转换后的数据
MOV @R1,A; (R1)=A;将转换后的数据存入到R1指示的地址中
INC DPH; DPH++;即选择下一个转换通道
INC R1; R1++;
LJMP LOOP; 调到LOOP开始执行程序
END
30H-8H=28H=40;所以一共转换40次,每个ADC0809有8个通道,所以我估计在每个通道前还有5个选择开关——DPH最后要加40,也就是P2.3~P2.5应该是5选1的地址线。
详细解释:
ORG 0030H; 定位程序在ROM中的开始存储地址为30H
MOV R1, #30H; R1=30H
MOV R2, #8H; R2=8
MOV TL0, #0H; 定时器0的低8位为0
MOV TH0, #0B8H; 定时器0的高8位为B8H
MOV TMOD, #1H; 定时器0的工作方式为1,功能为定时器方式, 软件控制
CLR ET0; 禁止定时器0的中断
SETB TR0; 启动定时器0
MOV SCON, #40H; 设定串口为工作方式1,不允许接受
MOV DPTR, #0C0FF; 设置DPTR为C0FFH——ADC0809的通道选择地址
LOOP:
MOV A, R2; A=R2=8H
SUBB A, R1; A=A-R1
JNZ LOOP2; A!=0,则跳转到LOOP2处执行
MOV R1,#0H; R1=0;
MOV DPTR, #0COFF; DPTR=C0FF;
MOV R1, #OH;
MOV DPTR, #0C0FF;
LOOP1:
JNB TFO, LOOP1; 如果TF0!=1,则等待(循环执行本指令)
CLR TF0; TF0=0
MOV TL0, #0H; 定时器0的低8位为0
MOV TH0, #0B8H; 定时器0的高8位为B8H
LOOP2:
MOVX @DPTR, A; (DPTR)=A;实际是一条空操作,目的只是为了选择转 换器AD0809的通道0并开始经行AD转换
LOOP3:
JB P1.0,LOOP3; 判断P1.0是否为高;实际是判断AD转换是否开始(开始转换则EOC输出高电平)
LOOP4:
JNB P1.0,LOOP4; 判断P1.0是否为低;实际是判断AD转化是否结束(转换结束,则EOC输出为低电平)
MOVX A, @DOTR; A=(DPTR);读取转换后的数据
MOV @R1,A; (R1)=A;将转换后的数据存入到R1指示的地址中
INC DPH; DPH++;即选择下一个转换通道
INC R1; R1++;
LJMP LOOP; 调到LOOP开始执行程序
END
30H-8H=28H=40;所以一共转换40次,每个ADC0809有8个通道,所以我估计在每个通道前还有5个选择开关——DPH最后要加40,也就是P2.3~P2.5应该是5选1的地址线。
杭州一知智能科技有限公司
2022-03-17 广告
2022-03-17 广告
电话机器人主要就是用来模拟人工通话的一组程序,一般由,CRM系统,语义识别,转换文字,话术体系,这是软的部分,再加上底层软交换和通信模块一起,合并起来就是一套完整的电话机器人系统。电话机器人可以代替真人进行电话工作的,像是电话营销、售后回访...
点击进入详情页
本回答由杭州一知智能科技有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询