并行8位ADC0809(电压测量).doc_第1页
并行8位ADC0809(电压测量).doc_第2页
并行8位ADC0809(电压测量).doc_第3页
并行8位ADC0809(电压测量).doc_第4页
并行8位ADC0809(电压测量).doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验十三 并行A/D(电压测量)实验一、 实验目的:1、 了解ADC0809的转换性能及编程方法;2、 掌握ADC0809与8051单片机的接口方法;二、 实验内容:1、 为了方便观察,将实验例程中ADC0809采集到的数字量以十进制格式显示在右边三位数码管上;原理图:流程图: 开始 外中断0入口 数码管扫描子程序 开外中断0 (DPTR)-A R3-A、TAB-DPTR (A+DPTR)-A 0809通道0-DPTR 个十百-R1/R2/R3 PA-DPTR,A-(DPTR) 01H-P1,延时 启动A/D转换 数码管扫描 R2-A、TAB-DPTR 原地跳转 启动A/D转换 (A+DPTR)-A PA-DPTR,A-(DPTR) 中断返回 02H-P1,延时 R2-A、TAB-DPTR (A+DPTR)-A PA-DPTR,A-(DPTR) 02H-P1,延时 返回汇编源程序:/* 中断字子程序中读取A/D转换结果,采用除法分别把对应十进制百十个位赋给R3、R2、R1 引用数码管扫描程序*/AD0809EQU0F000HCOM_ADD XDATA 0E003HPA_ADD XDATA 0E000HORG0000HAJMPSTARTORG0003HAJMPEXINT0ORG0030HSTART:MOVSP,#60HMOV DPTR,#COM_ADDMOV A,#80H ;PA输出MOVX DPTR,ASETB IT0SETB EX0SETB EAMOV DPTR,#AD0809 ;启动A/D转换MOVX DPTR,AAJMP $EXINT0:MOVX A,DPTR ;读取A/D转换结果MOV B,#0AH ;R1,R2,R3 分别存低到高三位数DIV ABMOV R1,BMOV B,#0AHDIV ABMOV R2,BMOV R3,AACALL FLASH ;数码管扫描MOV DPTR,#AD0809 ;调用数码管扫描之后DPTR地址改后,必须重新赋值 MOVX DPTR,A; 启动A/D转换RETIFLASH:MOV P1,#01H ;最高位MOV A,R3MOV DPTR,#TABFLAMOVC A,A+DPTRMOV DPTR,#PA_ADDMOVX DPTR,AACALL DELAYMOV P1,#02H ;段码MOV A,R2;位码MOV DPTR,#TABFLAMOVC A,A+DPTRMOV DPTR,#PA_ADDMOVX DPTR,AACALL DELAY MOV P1,#04H ;低位MOV A,R1MOV DPTR,#TABFLAMOVC A,A+DPTRMOV DPTR,#PA_ADDMOVX DPTR,AACALL DELAYRETDELAY: MOVR6,#20DELAY1:MOVR5,#250DJNZR5,$DJNZR6,DELAY1RETTABFLA:DB 0C0H,0F9H,0A4H,0B0H,99H ;04DB 92H,82H,0F8H,80H,90H,88H ;5ADB 83H,0C6H,0A1H,86H,8EH ;BFENDC语言源程序:#includexdata unsigned char ADDR_0809 _at_ 0xf000;xdata unsigned char COM_ADDR _at_ 0xe003;xdata unsigned char PA _at_ 0xe000;const unsigned char TAB=0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90;void delay() /延时 unsigned int i; for(i=0;iDPTR 0809通道3地址-DPTR (DPTR)-A A-R0 启动A/D转换 个百十-R1/R2/R3 数码管扫描 原地跳转 启动A/D转换 0832 R0-A 0832-DPTR A=5B? 是 R0-A 否 A-(DPTR) A5B? 是 延时 否 R0+1-R0 返回 R0-1-R0 返回 汇编源程序:/* 中断字子程序中读取A/D转换结果,采用除法分别把对应十进制百十个位赋给R3、R2、R1 引用数码管扫描程序采用减法比较,0832传递值是否达到100*/AD0809EQU0F003HDA0832XDATA0E000H ;CS2COM_ADDXDATA0D003H ;CS3PA_ADDXDATA0D000HORG0000HAJMPSTARTORG0003HAJMPEXINT0ORG0030HSTART:MOVSP,#60HMOV DPTR,#COM_ADDMOV A,#80H ;PA输出MOVX DPTR,ASETB IT0SETB EX0SETB EAMOV DPTR,#AD0809 ;启动A/D转换MOVX DPTR,AAJMP $EXINT0:ACALLDADA0832MOVDPTR,#AD0809MOVX A,DPTR ;读取A/D转换结果MOV R0,AMOV B,#0AH ;R1,R2,R3 分别存低到高三位数DIV ABMOV R1,BMOV B,#0AHDIV ABMOV R2,BMOV R3,AACALL FLASH ;数码管扫描LOOP:MOV DPTR,#AD0809 ;启动A/D转换 MOVX DPTR,AMOVA,R0SUBBA,#5BH;与91比较,本来是该与100比较的,调试的时候数据传递过程中会自动加9或10左右JZOUT;相等,不调整JCINCC;小于,增加JNCDECC;大于,减小INCC:INCR0AJMPLOOPDECC:DECR0AJMPLOOPOUT:RETIFLASH:MOV P1,#01H ;最高位MOV A,R3MOV DPTR,#TABFLAMOVC A,A+DPTRMOV DPTR,#PA_ADDMOVX DPTR,AACALL DELAYMOV P1,#02H ;段码MOV A,R2;位码MOV DPTR,#TABFLAMOVC A,A+DPTRMOV DPTR,#PA_ADDMOVX DPTR,AACALL DELAY MOV P1,#04H ;低位MOV A,R1MOV DPTR,#TABFLAMOVC A,A+DPTRMOV DPTR,#PA_ADDMOVX DPTR,AACALL DELAYRETDADA0832:MOVDPTR,#DA0832;DAC0832MOVA,R0MOVXDPTR,AACALLDELAYRETDELAY: MOVR6,#20DELAY1:MOVR5,#250DJNZR5,$DJNZR6,DELAY1RETTABFLA:DB 0C0H,0F9H,0A4H,0B0H,99H ;04DB 92H,82H,0F8H,80H,90H,88H ;5ADB 83H,0C6H,0A1H,86H,8EH ;BFENDC语言源程序:#includexdata unsigned char ADDR_0809 _at_ 0xf003;xdata unsigned char ADDR_0832 _at_ 0xe000;xdata unsigned char COM_ADDR _at_ 0xd003;xdata unsigned char PA _at_ 0xd000;unsigned char a0;const unsigned char TAB=0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90;void delay() /延时 unsigned int i; for(i=0;i0x5b) a0-; else if(a0R0,0-R7 通道0-DPTR 通道3-DPTR (DPTR)-A (DPTR)-A 通道0-DPTR A-R4、A-R6 启动A/D转换 R4-A R7-A A-R7-A 原地跳转 是 A=0? 个百十-R1/R2/R3 否 A0 否 数码管扫描 是 R7-1-R70832-DPTR R6-1-R6 R6-A A-(DPTR) R7+1-R7 R6+1-R6 R0=0? 否 是 启动通道3 01-R0 启动通道0 返回 0-R0汇编源程序:/* 中断字子程序中读取A/D转换结果,采用除法分别把对应十进制百十个位赋给R3、R2、R1 引用数码管扫描程序采用反馈值与校准值比较,调整0832的输入值注意通道的不同*/AD0809EQU0F000H ;IN0AD30809EQU 0F003H ;IN3DA0832XDATA0E000H ;CS2COM_ADDXDATA0D003H ;CS3PA_ADDXDATA0D000HORG0000HAJMPSTARTORG0003HAJMPEXINT0ORG0030HSTART:MOVSP,#60HMOV DPTR,#COM_ADDMOV A,#80H ;PA输出MOVX DPTR,ASETB IT0SETB EX0SETB EA;用R0判断通道,R7用于数码管显示,R4存IN0的精确电压值,R6存调整后0832的精确输入值MOV R0,#00HMOV R7,#00HMOV DPTR,#AD0809 ;启动IN0的A/D转换MOVX DPTR,AAJMP $EXINT0:CJNE R0,#00H,RUN3MOV DPTR,#AD0809;读取IN0的A/D转换结果MOVX A,DPTRMOV R4,AMOV R6,AAJMP OUTRUN3:MOV DPTR,#AD30809 ;读取IN3的A/D转换结果MOVX A,DPTRMOV R7,ALOOP1:MOV A,R4SUBBA,R7;校正调整0832的传递值JZOUT;相等,不调整JCDECC;IN0小于,减小JNCINCC;IN0大于,增加INCC:INCR7 ;调整R7,使之与精确值相等INC R6AJMPLOOP1DECC:DECR7DEC R6AJMPLOOP1OUT:MOV A,R7 ;R7存储0832的传递值MOV B,#0AH ;R1,R2,R3 分别存低到高三位数DIV ABMOV R1,BMOV B,#0AHDIV ABMOV R2,BMOV R3,AACALL FLASH ;数码管扫描MOVDPTR,#DA0832;DAC0832MOV A,R6MOVXDPTR,AACALL DELAY CJNE R0,#00H,RUN1MOV DPTR,#AD30809MOV R0,#01HAJMP RUN2RUN1:MOV DPTR,#AD0809MOV R0,#00HRUN2:MOVX DPTR,A ;启动另一个A/D转换RETIFLASH:MOV A,R3MOV DPTR,#TABFLAMOVC A,A+DPTRMOV DPTR,#PA_ADDMOVX DPTR,AMOV P1,#01H ;最高位ACALL DELAYMOV P1,#00HMOV A,R2;位码MOV DPTR,#TABFLAMOVC A,A+DPTRMOV DPTR,#PA_ADDMOVX DPTR,AMOV P1,#02H ;段码ACALL DELAY MOV P1,#00HMOV A,R1MOV DPTR,#TABFLAMOVC A,A+DPTRMOV DPTR,#PA_ADDMOVX DPTR,AMOV P1,#04HACALL DELAYMOV P1,#00HRETDELAY: MOV R5,#0HDJNZR5,$RETTABFLA:DB 0C0H,0F9H,0A4H,0B0H,99H ;04DB 92H,82H,0F8H,80H,90H,88H ;5ADB 83H,0C6H,0A1H,86H,8EH ;BFENDC语言源程序:#includexdata unsigned char ADDR_0809 _at_ 0xf000;/IN0xdata unsigned char ADDR3_0809 _at_ 0xf003;/IN3xdata unsigned char ADDR_0832 _at_ 0xe000; /0832xdata unsigned char COM_ADDR _at_ 0xd003;/8255xdata unsigned char PA _at_ 0xd000;unsigned char a0;unsigned int temp; /标志位,判断通道0,还是通道3const unsigned char TAB=0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90;void delay() /延时 unsigned int i; for(i=0;ia0) a3-;b-; else if(a3a0) a3+;b+; else a0 = ADDR_0809;b=a0; bai = a3;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论