AD转换实验中断方式
单片机AD模数转换实验报告
单片机AD模数转换实验报告一、实验目的和要求1、掌握单片机与ADC0809的接口设计方法。
2、掌握Proteus软件与Keil软件的使用方法。
二、设计要求。
1、用Proteus软件画出电路原理图,在单片机的外部扩展片外三总线,并通过片外三总线与0809接口。
2、在0809的某一模拟量输入通道上接外部模拟量。
3、在单片机的外部扩展数码管显示器。
4、分别采用延时和查询的方法编写A/D 转换程序。
5、启动A/D转换,将输入模拟量的转换结果在显示器上显示。
三、电路原理图。
图1、电路仿真图四、实验程序流程框图和程序清单。
1、查询法:ORG 0000HSTART: LJMP MAINORG 0100HMAIN: MOV SP, #2FH NT: MOV DPTR, #0FF78H MOVX @DPTR, A LOOP: JB P3.3, LOOP MOVX A, @DPTR MOV B, #51 DIV AB MOV R0, A MOV A, B MOV B, #5 DIV AB MOV R1, A MOV R2, B LCALL DIR SJMP NT DIR: MOV R7, #0 SJMP LOOP1 BH: MOV A, R1 MOV R2, A LOOP1: MOV DPTR, #WK MOV A, R7 MOVC A, @A+DPTR MOV P2, A MOV DPTR, #DK MOV A, R2 MOVC A, @A+DPTR MOV P1, A LCALL DELAY INC R7 CJNE R7, #2, BH MOV DPTR, #WK MOV A, R7 MOVC A, @A+DPTR MOV P2, A MOV DPTR, #DK MOV A, R0 MOVC A, @A+DPTR ANL A, #7FH MOV P1, A LCALL DELAY RET DELAY: M OV R5, #01H DL1: MOV R4, #8EH DL0: MOV R3, #02H DJNZ R3, $ DJNZ R4, DL0 DJNZ R5, DL1 RET WK: DB 10H DB 20H DB 40H DK: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ENDdisplay 送百分位字符代码送位选信号延时1ms 送十分位字符代码送位选信号延时1ms 送个位及小数点字符代码送位选信号延时1ms 熄灭第四位数码管延时1ms 返回display 送百分位字符代码送位选信号延时1ms 送十分位字符代码送位选信号延时1ms 送个位及小数点字符代码送位选信号延时1ms 熄灭第四位数码管延时1ms 返回2、延时法:ORG 0000H START: LJMP MAIN ORG 0100H MAIN: MOV SP, #2FH LOOP: MOV DPTR, #0FF78H MOVX @DPTR, A LCALL DELAY MOVX A, @DPTR MOV B, #51 DIV AB MOV R0, A MOV A, B MOV B, #5 DIV AB MOV R1, A MOV R2, B LCALL DIR SJMP LOOP DIR: MOV R7, #0 SJMP LOOP1 BH: MOV A, R1 MOV R2, A LOOP1: MOV DPTR, #WK MOV A, R7 MOVC A, @A+DPTR MOV P2, A MOV DPTR, #DK MOV A, R2 MOVC A, @A+DPTR MOV P1, A LCALL DELAY INC R7 CJNE R7, #2, BH MOV DPTR, #WK MOV A, R7 MOVC A, @A+DPTR MOV P2, A MOV DPTR, #DK MOV A, R0 MOVC A, @A+DPTR ANL A, #7FH MOV P1, A LCALL DELAY RET DELAY: M OV R5, #01H DL1: MOV R4, #8EH DL0: MOV R3, #02H DJNZ R3, $ DJNZ R4, DL0 DJNZ R5, DL1 RET WK: DB 10H DB 20H DB 40H DK: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H开始启动AD 延时从AD中取数据数据处理结束调显示子函数END五、实验结果。
实验四 AD转换实验
重庆交通大学学生实验报告实验课程名称单片机原理与应用实验名称A/D转换实验实验类型验证性实验开课实验室语音楼单片机原理实验室学院信息科学与工程学院学生姓名学号开课时间2012至2013学年第 2 学期实验评佑等级很好好一般差实验操作能力实验结果实验分析实验思考总结实验成绩教师签名一、实验目的:1.了解ADC0809/ADC0808的工作原理;2.掌握单片机与ADC0809/ADC0808接口原理;3.熟悉CPU中断方式和查询方式读取A/D转换结果的程序设计方法。
二、实验内容:以查询工作方式应用程序,分别启动8路模拟输入通道进行A/D转换,8路转换结果存储在内部数据存储器首地址为30H开始的单元内,并将第0路转换结果送到P1口显示。
按照以上原理完成以下要求:1.用中断方式编写并调试出一个程序;2.用查询方式编写并调试出一个程序;3.用调用显示子程序方法,将转换结果在显示块上显示出来;4.将采样结果以8个LED显示进行编码,以得到将0V—5V区间分为256级显示效果;5.用C51重新编写程序实现上述要求的C程序。
用Proteus仿真软件运行硬件电路仿真设计。
三、实验步骤:1.硬件设计。
参考指导书中所列数码管显示的元器件以及实验程序参考框图,利用Proteus仿真软件,作出其电路图。
2.利用Keil仿真软件编写程序,将其编写好的程序进行调试。
四、实验调试及结果:<一>实验调试方法:1、打开Keil程序,执行菜单命令“ Project”—>“New Project”创建“ 0808AD 转换”项目,并选择单片机型号为AT89C51。
2、执行菜单命令“file”—>“New”创建文件,输入源程序,保存为“0808AD 转换.c”。
在“Project”栏的File项目管理窗口中右击文件组,选择“Add Filesto Group Source Group1”,将源程序“0808AD转换.c”添加到项目中。
微机原理综合性实验报告-AD转换器ADC0809数字温度计设计
微机原理与汇编语言综合性实验报告实验项目名称:A/D转换器 ADC0809数字温度计设计实验目的:掌握A/D转换原理,掌握0809A/D转换芯片的硬件电路和软件编程。
实验要求:包括开发环境要求,技术文档要求两部分。
开发环境要求:软件环境:windows98/windowsXP/windows2000,QTH-8086B环境硬件环境:计算机(Pen4CPU, 256MRAM,60G以上硬盘,输入输出设备)技术文档要求:按照实验报告编写要求进行。
要求软、硬件功能描述清晰,实验总结深刻。
实验内容:1 、实验原理图1 电路原理图本实验采用 ADC0809 做 A/D 转换实验。
ADC0809 是一种8路模拟输入、8位数字输出的逐次逼近法A/D器件,转换时间约100us,转换精度为±1/512,适用于多路数据采集系统。
ADC0809片内有三态输出的数据锁存器,故可以与8088微机总线直接接口。
图中ADC0809的CLK信号接CLK=2.385MHZ,基准电压Vref(+)接Vcc。
一般在实际应用系统中应该接精确+5V,以提高转换精度,ADC0809片选信号0809CS和/IOW、/IOR经逻辑组合后,去控制ADC0809的ALE、START、ENABLE信号。
ADC0809的转换结束信号EOC未接,如果以中断方式实现数据采集,需将EOC信号线接至中断控制器8259A的中断源输入通道。
本实验以延时方式等待A/D转换结束,ADC0809的通道号选择线ADD-A、ADD-B、ADD-C 接系统A/D转换器ADC0809数字温度计设计数据线的低3位,因此ADC0809的8个通道值地址分别为00H、01H、02H、03H、04H、05H 、06H、07H。
启动本A/D转换只需如下三条命令:MOV DX,ADPORT ;ADPORT为ADC0809端口地址。
MOV AL,DATA ;DATA为通道值。
MOV DX, AL ;通道值送端口。
14281030方学毅_中断方式AD转换数据采集
中断方式的A/D采集系统一、实验目的该实验使用了8259A,ADC0809,数码管来完成一个数据采集系统的设计,目的是了解中断方式的A/D采集数据的实现方法,掌握硬件设计和中断程序的编写方法,是对学生综合实验能力的训练。
二、实验内容使用ADC0809的通道0,接入0-5V的直流电压,用WR电位器调整模拟电压值,A/D 的转换结束信号EOC接在主8259A的IR5上,采集100个数据并存入内存中,同时将采集的16进制数据显示在数码管上。
请多次调整0-5V的电压值(旋动W1旋钮),进行A/D采集,并观测内存中的数据的变化情况。
三、实验现象每次采集的100个数据可能是相同的(数码管的数据也可能不变),当WR旋动时可以采到不同的数据。
四、实验接线图图1-6 实验连线图四、程序源代码PAGE 60,78CRLF MACRO ;回车换行宏定义MOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HNT 21HENDMDA TA SEGMENTINR DB ?RESULT DB ?BUFF DB 600 DUP(?)XORG DW 100DA TA ENDSSTACK SEGMENT STACK 'STACK'DB 50 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DA TA, SS:STACK, ES:DATA START: MOV AX,DATAMOV DS,AXMOV DI, OFFSET BUFF ;MOV AL,0AHMOV AH,35HINT 21H ;取IRQ2中断服务程序入口地址ES:BX PUSH ES ;保护ES,BX,DSPUSH BXPUSH DSMOV AX,SEG ADINT ;填写中断向量表(N=0AH)MOV DS,AXMOV DX,OFFSET ADINTMOV AL,0AHMOV AH,25HINT 21HPOP DS ;恢复DSIN AL,21HMOV BP,AX ;保护中断屏蔽寄存器内容于BP中AND AL,11111011BOUT 21H,AL ;允许IRQ2中断MOV CX,300HMOV DX,203H ;8253初始化,0通道方式3MOV AL,36HOUT DX,ALMOV DX,200HMOV AL,10H ;初值得0010HOUT DX,ALMOV AL,00HOUT DX,ALCCC: STIMOV DX,220HOUT DX,AL ;启动一次A/D转换HLTCLI ;关中断MOV AX,SI ;取A/D转换结果PUSH DSMOV BX,6000H ;写入6000H:0~2FFH区域MOV DS,BXMOV BX,CXDEC BXMOV [BX],ALAND AL,0F0H ;高位十六进制转ASCII码PUSH CXMOV CL,04HSHR A L CLPOP CXADD AL,30HCMP AL,39HJBE AS1ADD AL,07HAS1:MOV DL,AL ;显示高位MOV AH,02HINT 21HMOV [DI],AL ;INC DIMOV AL,[BX]AND AL,0FHADD AL,30HCMP AL,39HJBE AS2ADD AL,07HAS2:MOV DL,AL ;显示低位MOV AH,02HINT 21HMOV [DI],ALINC DIMOV DL,20H ;显示两个空格MOV AH,02HINT 21HINT 21HPOP DSLOOP CCCPOP DX ;恢复IRQ2中断向量POP DSMOV AL,0AHMOV AH,25HINT 21HMOV AX,BP ;恢复中断屏蔽寄存器内容OUT 21H,ALWAIT_IN:MOV AH,1 ;程序暂停,等待键入INT 21HMOV SI,OFFSET BUFFCALL CRTSETLL: MOV AH,0CH ;写像素MOV BH,0MOV CL,10MOV CX,XORG ;初始列值INC XORGMOV DH,0MOV DL,[SI]INC SIINT 10HCMP XORG,400JLE LLEXIT:;MOV AX,2;INT 10H ;恢复80*25文本显示方式MOV AX,4C00H ;结束INT 21HADINT PROC NEAR ;中断服务程序PUSH AX ;保护AXPUSH DX ;保护DXMOV DX,220H ;读A/D转换结果IN AL,DXMOV SI,AX ;送SIMOV AL,20HOUT 20H,AL ;发中断结束命令POP DXPOP AX ;恢复IRETADINT ENDPCRTSET PROC ;屏幕设置子程序MOV AX,12HINT 10HMOV AH,0BHMOV BX,9INT 10HRETCRTSET ENDPCODE ENDSEND START五、主程序流程图主程序流程图如下图。
实验五 AD、DA转换实验
实验五A/D、D/A转换实验
一、实验目的及要求
1、了解A/D转换的基本原理,掌握A/D转换的连接方法;
2、熟悉一种ADC芯片ADC0809,掌握A/D转换芯片0809的编程方法;
3、了解D/A转换的基本原理,掌握D/A转换的连接方法;
4、熟悉一种DAC芯片ADC0832,掌握D/A转换芯片0832的编程方法。
二、实验重点与难点
重点:A/D、D/A转换的基本原理及编程应用。
难点:A/D、D/A转换的编程应用。
三、实验环境
硬件:单片机开发板,计算机一台;
软件:Keil uVsion4。
四、实验内容
1、ADC0809模数转换与显示
使用ADC0809采样通道3输入的模拟量(也可自行选择采用通道,设计相应电路图),通过T0定时器中断给ADC0809提供时钟信号,转换后的结果显示在数码管上。
2、DAC0832波形发生器
软件控制DAC输出波形,通过不同按键产生锯齿波、三角波和方波,按键的检测采用中断工作方式。
五、实验步骤及要求
1.描述出程序运行后的结果;
2.画出算法流程图;
3.加程序注释。
4.学生按实验内容和实验报告编写格式中的规范,认真做好实验记录以便编写实验报告。
实验6 AD转换实验
实验六AD转换实验源程序一、实验原理摘要ADC0809作为A/D转换器可将模拟信号转换为数字信号,借助于发光二极管显示出来。
用定时方式、查询方式和中断方式都可完成A/D转换。
EOC为A/D 转换结束的标志。
当发光二极管全灭时,说明电位器输出的OV模拟信号。
当发光二极管全亮时,说明电位器输出的是5V模拟信号,此时EOC=1,说明A/D 转换结束。
二、实验内容用电位器作模拟量输入,送入ADC0809,将模拟量转换为数字信号后,再送入80C51中,从P1口输出并显示。
参考程序:1、定时法ORG 0000HLJMP MAINORG 0030HMAIN:MOV DPTR,#8000HLOOP:MOVX @DPTR,A;启动ADC0809LCALL DELAYMOVX A,@DPTRMOV P1,ALJMP LOOPDELAY:MOV R0,#65L1:DJNZ R0,L1RETEND2、查询法ORG 0000HLJMP MAINORG 0030HMAIN:MOV DPTR,#8000HLOOP:MOVX @DPTR,AL1:JNB P3.0,L1MOVX A,@DPTRMOV P1,ALJMP LOOPEND3、中断法ORG 0000HLJMP MAINORG 0003HLJMP DSHORG 0030HMAIN:SETB EASETB EX0MOV DPTR,#8000HMOV @DPTR,ASJMP $DSH:PUSH AMOVX A,@DPTRMOV P1,AMOVX @DPTR,APOP ARETIEND三、实验步骤1、硬件连线IN0——电位器输出AD-CS——CS0EOC——INT0(查询法时接P3.0,中断法时接P3.2)P1.0-P1.7——LED0-LED72、新建文件、保存文件、新建项目——加入模块文件——取消包含文件——编写程序并保存。
3、点击仿真器——仿真器设置——好4、运行程序,观察8个发光二极管的现象。
AD转换中断程序
AD转换中断程序void initInterrupt(void){// 设置中断控制寄存器CSR&=0xfffffffe; // 关中断 GIE=0ISTP=0x00000c00; // 重置中断向量表到0C00hIMH=0x08000000; // 指定Timer1产生int15中断IML=0;ICR=0xff;// 清除等待的中断IER=0x8003;// 使能int15中断// 设置定时器产生中断信号的频率TIMER1PRD=0x1000;// 定时器1的周期=0x1000TIMER1CTL=0x3c0; // 开始计数CSR=CSR|1; // 开中断}DA转换void InitInterrupt(void); // 初始化中断void init_emif( void ); // 初始化emif接口寄存器void InitCTR(); // 初始化ICETEK-CTRvoid CloseCTR(); // 关闭ICETEK-CTR上各设备void Delay(unsigned int nTime); // 延时子程序void Delay1(unsigned int nTime); // 延时子程序(带LED显示刷新) unsigned char GetKey(); // 读取键盘输入void RefreshLEDArray(); // 刷新发光二极管阵列显示void SetLEDArray(int nNumber); // 修改发光二极管阵列显示内容char ConvertScanToChar(unsigned char cScanCode); // 将键盘扫描码转换成字符void LCDCMD(unsigned char dbCommand); // 向液晶显示器发送命令void LCDWriteLeft(unsigned char dbData); // 写液晶显示器左半屏void LCDCLS(); // 清除液晶显示器显示void TurnOnLCD();// 打开液晶显示器外中断(要求指定某个中断);定时器(要求时间常数的设定)void InitInterrupt(void){// 设置中断控制寄存器CSR&=0xfffffffe; // 关中断 GIE=0ISTP=0x00000c00; // 重置中断向量表到0C00hIMH=0x08000000; // 指定Timer1产生int15中断IML=0;ICR=0xff;// 清除等待的中断IER=0x8003;// 使能int15中断// 设置定时器产生中断信号的频率TIMER1PRD=3125000;// 定时器1的周期=3125000, 0.5sTIMER1CTL=0x3c0; // 开始计数CSR=CSR|1; // 开中断}void interrupt Timer() //中断响应函数{LBDS^=1;}FIR滤波器主程序#include<math.h>#define FIRNUMBER 25#define SIGNAL1F 1000#define SIGNAL2F 4500#define SAMPLEF 10000#define PI 3.1415926float InputWave();float FIR();float fHn[FIRNUMBER]={ 0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,-0.018,0.049,-0.02,0.11,0.28,0.64,0.28, -0.11,-0.02,0.049,-0.018,-0.009,0.01,-0.002,-0.002,0.001,0.0,0.0};float fXn[FIRNUMBER]={ 0.0 };float fInput,fOutput;float fSignal1,fSignal2;float fStepSignal1,fStepSignal2;float f2PI;int i;float fIn[256],fOut[256];int nIn,nOut;main(){nIn=0; nOut=0;f2PI=2*PI;fSignal1=0.0;fSignal2=PI*0.1;fStepSignal1=2*PI/30;fStepSignal2=2*PI*1.4;while ( 1 ){fInput=InputWave();fIn[nIn]=fInput;nIn++; nIn%=256;fOutput=FIR();fOut[nOut]=fOutput;nOut++; /* 请在此句上设置软件断点 */if ( nOut>=256 ){nOut=0;}}}float InputWave(){for ( i=FIRNUMBER-1;i>0;i-- )fXn[i]=fXn[i-1];fXn[0]=sin(fSignal1)+cos(fSignal2)/6.0;fSignal1+=fStepSignal1;if ( fSignal1>=f2PI ) fSignal1-=f2PI;fSignal2+=fStepSignal2;if ( fSignal2>=f2PI ) fSignal2-=f2PI;return(fXn[0]);}float FIR(){float fSum;fSum=0;for ( i=0;i<FIRNUMBER;i++ ){fSum+=(fXn[i]*fHn[i]);}return(fSum);}IIR滤波器各部分主程序的设计#include"math.h"#define IIRNUMBER 2#define SIGNAL1F 1000#define SIGNAL2F 4500#define SAMPLEF 10000#define PI 3.1415926float InputWave();float IIR();float fBn[IIRNUMBER]={ 0.0,0.7757 };float fAn[IIRNUMBER]={ 0.1122,0.1122 };float fXn[IIRNUMBER]={ 0.0 };float fYn[IIRNUMBER]={ 0.0 };float fInput,fOutput;float fSignal1,fSignal2;float fStepSignal1,fStepSignal2;float f2PI;int i;float fIn[256],fOut[256];int nIn,nOut;main(){nIn=0; nOut=0;f2PI=2*PI;fSignal1=0.0;fSignal2=PI*0.1;// fStepSignal1=2*PI/30;// fStepSignal2=2*PI*1.4;fStepSignal1=2*PI/50;fStepSignal2=2*PI/2.5;while ( 1 ){fInput=InputWave();fIn[nIn]=fInput;nIn++; nIn%=256;fOutput=IIR();fOut[nOut]=fOutput;nOut++; /* 请在此句上设置软件断点 */if ( nOut>=256 ){nOut=0;}}}float InputWave(){for ( i=IIRNUMBER-1;i>0;i-- ){fXn[i]=fXn[i-1];fYn[i]=fYn[i-1];}fXn[0]=sin(fSignal1)+cos(fSignal2)/6.0;fYn[0]=0.0;fSignal1+=fStepSignal1;if ( fSignal1>=f2PI ) fSignal1-=f2PI;fSignal2+=fStepSignal2;if ( fSignal2>=f2PI ) fSignal2-=f2PI;return(fXn[0]);}float IIR(){float fSum;fSum=0.0;for ( i=0;i<IIRNUMBER;i++ ){fSum+=(fXn[i]*fAn[i]);fSum+=(fYn[i]*fBn[i]);}return(fSum);}。
ATmega16之AD转换与ADC中断程序
1、ATmega16内部ADC特点
12
2、模拟噪声抑制技术
• 设备内部及外部的数字电路都会产生电磁 干扰(EMI),从而影响模拟测量的精度。如 果转换精度要求较高,那么可以通过以下 方法来减少噪声:
- 1. 模拟通路越短越好。保证模拟信号线位于模拟地之上 ,并使它们与高速切换的数字信号线分开。 - 2. AVCC 应通过 LC 网络与数字电压源 VCC 连接。 - 3. 使用 ADC 噪声抑制器来降低来自 CPU 的干扰噪声。 - 4. 如果有其他 ADC 端口被用作数字输出,那么必须保 证在转换进行过程中它们不会有电平的切换。
39
• 平均滤波:对一个参数进行连续的多次采样,然后取其平 均值。因为是在很短的时间内进行的多次采样,对消除高 频干扰是较有效的。
• 一阶滞后滤波:设上个采样周期的测量结果为Yn-1,本次 转换值为xn,滤波系数为α,0<=α<1,本次的测量结果为 Yn,则Yn=α×Yn-1+(1-α)×xn。α越大,滤波作用越强。
36
SFIOR
4、ADC及相关寄存器
• 中断寄存器 - SREG
- Bit 7 – I: 全局中断使能
I 置位时使能全局中断。单独的中断使能由其他独立的控制寄存器控制 。如果 I 清零,则不论单独中断标志置位与否,都不会产生中断。任意一个 中断发生后 I 清零,而执行 RETI 指令后 I 恢复置位以使能中断。I 也可以通 过 SEI 和 CLI 指令来置位和清零。
ADPS1 0 0 1 1 0 0 1 1
ADPS1 0 1 0 1 0 1 0 1
分频因子 2 2 4 8 16 32 64
128
28
ADCL 及 ADCH
实验四AD转换-亮度测量实验
实验四A/D转换-亮度测量实验一.实验目的熟悉0809的工作原因,掌握A/D转换程序的设计方法以及以51连接的接口电路设计方法。
学习传感器件的应用。
二.实验内容和要求按照硬件连接图和程序流程图,编写A/D转换程序,通过调节ADC0809的REF与转换值之间的关系,了解光敏电阻的电气特性。
光敏电阻特性:光敏电阻的阻值与亮度成反比,电气特性等效于一个可变电阻,如实验电路所示R13光敏电阻和电阻R16(4K7)串联,光敏电阻的阻值随环境亮度而变化,加在光敏电阻的电压也随之变化。
变化的电压加分到0809的IN-0端和监视电路。
单片机通过74LS373和与非门,访问0809,对IN-0端电压进行AD转换,并将数据处理后通过数码管显示出来。
数码管的显示数值满足以下公式:显示数值=IN-0/REF+X256.三.实验主要仪器设备和材料:1.AMC51单片机综合开发系统一台2.微机一台四.实验方法,步骤及结果测试1.开启AMC51实验装置,检查跳线,一般无需改动。
2.运行KEIL,具体操作步骤参照实验一。
3.参考以下电路图和流程图编写程序。
4.编译程序,把把生成的.HEX目标文件下载到AT89S51运行。
5.观察程序在AMC51实验装置的实际运行情况。
(1)同手挡住“亮度传感器”,改变亮度,观察数码管的数值变化。
(2)调节ADC0809的REF+观察REF和采样电压的关系。
先按一下液晶屏下方的“RESET”再按一下“MODES SWITCH”按钮,液晶屏切换到MODE1.。
用一字小螺丝刀分别顺时针和逆时针扭动“亮度传感器”下方蓝色长方体的变阻器上面的螺丝。
从液晶屏观察到REF的变化。
五.实验报告要求1.实验原理分析,实验现象及结果。
实验原理:光敏电阻的阻值与亮度成反比,电气特性等效于一个可变电阻,如实验电路所示R13光敏电阻和电阻R16(4K7)串联,光敏电阻的阻值随环境亮度而变化,加在光敏电阻的电压也随之变化。
实验十一 A_D转换实验实验
EDA实验报告之实验十一A/D转换实验1、实验目的(1)掌握A/D转换器与单片机接口的方法;(2)了解A/D芯片0809的转换性能及编程方法;(3)通过实验了解数据采集、处理的基本方法。
2、实验要求利用实验板上的ADC0809做A/D转换器,实验板上的电位器提供模拟量输入,编制程序,将模拟量转换成二进制数字量,在数码管的最高两位显示出数字量来。
另外要把模拟量值在数码管的最低三位显示出来。
例如显示“80 2.50”(其中80是采样数值,而2.50是电压值。
要求程序可连续运行以便测量不同的模拟电压(类似于电压表)(注意:多次采集求平均值可提高转换精度)3、实验说明1)原理图参看LAB6000使用手册、图示帮助等;2)连线方式与LAB6000给出的有所不同,这里的实验用数码管显示结果(原实验则用LED显示结果);3)EOC可接中断、其它引脚或不接,对应的获取数据方法为中断、查询、延迟,建议采用中断方法;4)注意ADC0809各连线接在了什么位置。
4、写出实验报告(包括6位LED显示的部分电路图)。
5、实验内容5.1 使用仪器、仪表,开发平台型号本实验用到了WAVE 6000软件平台,电脑一台,LAB6000实验箱,若干连线,串行数据线。
5.2 性能指标、技术要求、思路方案、流程图5.2.1性能指标、技术要求见实验目的和实验要求。
5.2.2 思路方案:先将所有中断使能位置位,然后启动A/D转换。
在主程序中显示缓冲区的内容,判断4次中断已满的标志位是否置位,是的话调用计算子程序计算数字平均值和模拟值,这个过程反复循环的进行。
5.2.3流程图:主程序:计算数字量和模拟量的子程序:中断子程序:5.3源程序;采样的数字值放在20H 开始的单元中,修改R6的值(4);可以控制采样的个数(为了方便我们选择2,4,8……等2的倍数),上限为256个ORG 0000HLJMP BEGIN ;ORG 0003H ;外部中断0LJMP INT0ORG 0030H;=================BEGIN:FLAG EQU 50H ;对应到16进制的是2A单元,四次中断是否满的标志位TRANS EQU 51H ;是否一次转换完毕的标志位MOV R0,#20H ;采样数据存储单元MOV R6,#4 ;采样4次求均值CLR FLAGCLR TRANSSETB EA ; 开所有中断SETB IT0 ; INT0边沿触发SETB EX0 ; 允许INT0中断MOV DPTR,#8000H ; 指向0809 IN0通道地址MOVX @DPTR,A;=================LOOP:LCALL DISPLAYJNB TRANS,LOOP ;判断是否发生EOC,为0时转移CLR TRANSJNB FLAG,CONTINUE ;为0时转移CLR FLAGLCALL COMPUTEECONTINUE:MOV DPTR,#8000HMOVX @DPTR,A ; 启动A/D转换,因为与A值无关,故不管ALJMP LOOP;================= ;中断服务程序INT0:MOVX A,@DPTR ; 读A/D转换结果MOV @R0,AINC R0DJNZ R6,RETURNSETBFLAGMOV R6,#4MOV R0,#20HRETURN:SETB TRANSRETI;=================DISPLAY:MOV R4,#02H;==============BEGIN0:MOV A,#01H ;位选择字节MOV R2,#5 ;5次MOV R1,#60H ;数据地址LOOOP:MOV DPTR,#9002H ;位选输出地址MOVX @DPTR,ARL A ;修改位信号PUSH AMOV DPTR,#9004H ;数据输出地址MOV A,@R1LCALL CHECK ;查表CJNE R1,#62H,PEIORL A,#80HPEI:MOVX @DPTR,ALCALL DELAYINC R1POP ADJNZ R2,LOOOPLCALL DELAY ;为了两轮显示间时间间隔久一些DJNZ R4,BEGIN0RET;================DELAY:MOV R5,#02HMOV R3,#09FHLOOPP:DJNZ R3,$DJNZ R5,LOOPPRET;================= ;计算数字平均值和模拟值COMPUTEE: ;计算采样值总和,放在BA单元,前者为高位MOV R1,#20H ;指向20H单元MOV R5,#4CLR CCLR AMOV B,ALLOOPP:ADD A,@R1JNC GOONINC B ;C为1是加一CLR CGOON:INC R1DJNZ R5,LLOOPP;====================MOV R5,#2 ;2的2倍是4次DIVISION: ;数字平均值最后在A中,B移位完后为0PUSH AMOV A,BCLR CRRC AMOV B,A ;暂存POP ARRC ADJNZ R5,DIVISION;===================== ;这部分程序是为了获得模拟值和将数字量分别存为两个字节里面PUSH APUSH AANL A,#0FHMOV 63H,APOP AANL A,#0F0HSWAP AMOV 64H,APOP AMOV B,#5MUL ABMOV 62H,BMOV B,#10MUL ABMOV 61H,BMOV B,#10MUL ABMOV 60H,BRET;==================CHECK:INC AMOVC A,@A+PCRETTABLE:DB 3FH,06H,5BH,4FH,66HDB 6DH,7DH,07H,7FH,6FHDB 77H,7CH,39H,5EH,79HDB 71H5.4实验步骤,完成情况5.4.1在WAVE 6000中新建文件,并将代码写入文件中,保存为EXPERIMENT11.ASM;5.4.2在WAVE 6000中新建项目,并在模块文件中包含上述EXPERIMENT11.ASM文件,最后保存为EXPERIMENT11.PRG。
AD转换器ADC0809数字温度计设综合性实验报告
微机原理与汇编语言综合性实验报告实验项目名称:A/D转换器 ADC0809数字温度计设计专业班级:数学与应用数学姓名:何荣航学号: 9实验起止日期: 2013 年 12月14日起 2013 年12月20日止实验目的:掌握A/D转换原理,掌握0809A/D转换芯片的硬件电路和软件编程。
实验要求:包括开发环境要求,技术文档要求两部分。
开发环境要求:软件环境:Windows98/WindowsXP/Windows2000,QTH-8086B环境硬件环境:计算机(Pen4CPU, 256MRAM,60G以上硬盘,输入输出设备)技术文档要求:按照实验报告编写要求进行。
要求流程图绘制规范,软、硬件功能描述清晰,实验总结深刻。
实验内容:一、实验原理1、ADC0809电路连接简图:图1-1 ADC0809电路连接图本实验采用 ADC0809 做 A/D 转换实验。
ADC0809 是一种8路模拟输入、8位数字输出的逐次逼近法A/D器件,转换时间约100us,转换精度为±1/512,适用于多路数据采集系统。
ADC0809片内有三态输出的数据锁存器,故可以与8088微机总线直接接口。
如图1-1所示,ADC0809的CLK信号接CLK=2.385MHZ,基准电压Vref(+)接Vcc。
一般在实际应用系统中应该接精确+5V,以提高转换精度,ADC0809片选信号0809CS和/IOW、/IOR 经逻辑组合后,去控制ADC0809的ALE、START、ENABLE信号。
ADC0809的转换结束信号EOC 未接,如果以中断方式实现数据采集,需将EOC信号线接至中断控制器8259A的中断源输入通道。
本实验以延时方式等待A/D转换结束,ADC0809的通道号选择线ADD-A、ADD-B、ADD -C 接系统数据线的低3位,因此ADC0809的8个通道值地址分别为00H、01H、02H、03H、04H、05H 、 06H、07H。
中断以及da、ad实验讲解
SBUF=0x5e; //发送的是什么??? while(!TI); TI=0; SBUF=0x77; while(!TI); TI=0; delayms(1500);
}
实验八、串口发送显示原理
74LS164为8位串入并出移位寄 存器,其引脚如图所示; 1、2为 串行输入端,Q0~Q7 为并行输出端,CLK为移位时钟脉 冲,上升沿移入一位;MR为清零 端,低电平时并行输出为零。
DA转换时序
直通方式
注意ile,cs,wr1,wr2和xfer信号满足高低低低 低的要求即可 实验九选作:利用da生成一个类似鱼的图形
DA转换时序
void main() { uchar val,y; P2=0; while(1) { if(val%2==0) //这里如何要分 { y=80*sin(1.48*val/100)+140; //为什么要选这些参数?? P2=y; if(val<127)val+=5; //为何这里要有两个增量 if(val>127) val+=3; if(val>=255) val=0; delayms(3); }
DA转换时序(续)
else { y=80*sin(1.48*val/100+3.14)+140; P2=y; if(val<127)val+=5; if(val>127) val+=3; if(val>=255) val=0; delayms(5); } } }
建议与要求
大家课后一定要多发时间 用点心思来做课题 没有办不成的事情,只要我们用心去做
void main(){ EA=1; //全局中断允许打开 EX0=1; //打开外部中断0 EX1=1; //打开外部中断1 PX1=1; //设外部中断1为高优先中断 PX0=0; //设外部中断0为低优先中断 IT0=0; //设外部中断0为电平触发 IT1=0;// 设外部中断1为电平触发 ……} void I0()interrupt 0//外部中断0中断程序 { if(P3^2==0)//键盘去抖 {delay(10); if(P3^2==0) {// 具体的功能} } }
a d转换器的实验报告
a d转换器的实验报告A/D转换器的实验报告引言:A/D转换器(Analog-to-Digital Converter)是一种电子设备,用于将模拟信号转换为数字信号。
在电子工程和通信领域中,A/D转换器被广泛应用于信号处理、数据采集和控制系统中。
本实验旨在通过搭建一个简单的A/D转换器电路,探索其工作原理和性能。
实验目的:1. 理解A/D转换器的基本原理和工作方式;2. 学会使用基本的电子元件,如电阻、电容和运算放大器;3. 测试A/D转换器的精度和速度。
实验装置:1. 电压源:提供模拟信号;2. 电阻、电容:构建RC电路;3. 运算放大器:放大模拟信号;4. A/D转换器芯片:将模拟信号转换为数字信号。
实验步骤:1. 搭建RC电路:将电阻和电容连接起来,形成一个简单的低通滤波电路。
该电路用于滤除高频噪声,保证输入信号的稳定性。
2. 连接运算放大器:将RC电路的输出连接到运算放大器的非反馈输入端,通过放大器放大信号,以增强A/D转换器的灵敏度。
3. 连接A/D转换器芯片:将运算放大器的输出连接到A/D转换器芯片的输入端,通过芯片将模拟信号转换为数字信号。
4. 连接电压源:将电压源连接到A/D转换器芯片的参考电压输入端,以提供参考电压,用于A/D转换器的精确度校准。
5. 连接数字输出:将A/D转换器芯片的数字输出连接到数字显示器或计算机,用于显示和记录转换后的数字信号。
实验结果:1. 精度测试:通过输入一系列已知电压值,观察A/D转换器的输出是否准确。
根据实验数据,我们可以计算出A/D转换器的精度,即数字信号与模拟信号之间的误差。
2. 速度测试:通过改变输入信号的频率,观察A/D转换器的响应时间。
较高的转换速度意味着A/D转换器能够更快地处理信号,并提供实时的数字输出。
讨论与分析:1. 精度分析:A/D转换器的精度受到多种因素的影响,包括电压源的稳定性、电路噪声、运算放大器的放大倍数等。
在实验中,我们可以通过调整这些因素来提高A/D转换器的精度。
ADC0809进行AD转换
ADC0809进行A/D转换(C描述)2008-06-24 16:53指针:可对内存地址直接操作基于存贮器的指以贮器类为参量,它在编译时才被确定。
因此为指针选择存贮器的方法可以省掉,以这些指针的长度可为1个字节(idata *,data *,pdata *)或2个这节(code *,xdata *)。
char xdata *address;ADC0809具有8个模拟量输入通道,采用中断方式,在中断函数中读取8个通道的A/D转换值,分别存储在外部RAM的1000H~1007H单元。
ADC0809端口地址为00F0H。
程序定义了两个指针变量* ADC和* ADCdata,分别指向ADC0809端口地址(00F0H)和外部RAM单元地址(1000H~1007H)由*ADC=I送入通道数,启动ADC0809进行A/D转换,转换结束时产生INT1中断。
在中断服务函数int1()中通过temp=*ADC和*ADCdata=temp;读取A/D转换结果并存到外部RAM 中。
#include<reg51.h>unsigned int xdata *ADC; /*定义ADC0809端口指针*/unsigned int xdata *ADCdata; /*定义ADC0809数据缓冲器指针*/unsigned char I;void main( ){ADC=0x00f0; /*定义端口地址和数据缓冲器地址*/ADCdata=0x1000;I=8; /* ADC0809有8个模拟输入通道*/EA=1; EX1=1;IT1=1; /*开中断*/*ADC=I; /*启动ADC0809*/WHILE(I); /*等待8个通道A/D转换完*/}void int1() interrupt 2{unsigned char tmp;temp=*ADC; /*读取A/D转换结果*/*ADCdata=temp; /*结果值存到数据缓冲区*/ADCdata++; /*数据缓冲区地址加1*/i—;*ADC=I; /*启动下一个模拟输入通道A/D转换*/}除了用指针变量来实现对内存地址的直接操作外,c51编译器还提供一组宏,该宏定义文件为:“absacc.h”,利用它可十分方便地实现对任何内存空间的直接操作,改写上面的程序: #include<reg51.h>#include<absacc.h> /*包含绝对地址操作预定义头文件*/#define ADC 0x00f0; /*定义ADC0809端口地址*/#define ADCdata 0X1000 /*定义数据缓冲器地址*/unsigned char I;void main( ){I=8; / *ADC0809有8个模拟输入通道*/EA=1;ex1=1;it1=1; / *开中断*/XBYTE[ADC]=I; /*启动0809 */While(i); /*等待8个通道转换完毕*/}void int1() interrupt2 {unsigned char tmp;tmp=XBYTE[ADC]; /*读取A/D转换结果*/i--;XBYTE[ADCdata+I]=tmp; /**结果值存储到数据缓冲器*/XBYTE[ADC]=I; /*启动下一个模拟输入通道A/D转换*/}利用单片机AT89S51与ADC0809设计一个数字电压表(图)[ 来源:机电论文| 类别:技术| 时间:2009-2-24 10:47:12 ] [字体:大中小]1.实验任务利用单片机AT89S51与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,但要求使用的元器件数目最少。
实验三A/D转换实验
实验三A/D转换实验一、实验目的1. 掌握ADC0809与单片机的接口及其编程方法。
2. 了解A/D变换芯片ADC0809工作原理。
3. 通过实验了解单片机如何进行数据采集。
二、实验原理和实验内容1.实验原理A/D转换器大致有三类:一是双积分A/D转换器,特点是精度高,抗干扰性好,价格便宜,但转换速度慢;二是逐次逼近A/D转换器特点是精度、速度、价格均适中;三是并行A/D转换器,速度快,价格昂贵。
本实验用的ADC0809属第二类,是八位A/D转换器。
每采集一次一般需100μS,A/D 转换结束后会自动产生EOC信号。
1)ADC0809引脚含义IN0~IN7:8路模拟通道输入,由ADDA,ADDB,ADDC三条线选择。
ADDA、ADDB、ADDC:模拟通道选择线,比如000时选择0通道,111时选择7通道。
D7~D0:数据线,三态输出,由OE(输出允许信号)控制输出与否。
OE:输出允许,该引线上的高电平,打开三态缓冲器,将转换结果放到D0~D7上。
ALE:地址允许锁存,其上升沿将ADDA,ADDB,ADDC三条引线的信号锁存,经译码选择对应的模拟通道。
ADDA,ADDB,ADDC可接单片机的地址线,也可接数据线。
ADDA接低位线,ADDC接高位线。
START:转换启动信号,在模拟通道选通之后,由START上的正脉冲启动A/D转换过程。
转换时间至少100us。
EOC(end of conversion):转换结束信号,在START信号之后,A/D开始转换。
EOC 输出低电平,表示转换在进行中,当转换结束,数据已锁存在输出锁存器之后,EOC变为高电平。
EOC可视作被查询的状态信号,亦可用来申请中断。
REF+、REF-:基准电压输入。
CLOCK:时钟输入、时钟频率上限为1280KHz。
2)ADC0809在实验系统中的电路ADC0809在实验平台中的电路如图8-3所示。
ADC0809输入通道的控制是由单片机的P2.0,P2.1 和P2.2完成,跳线J504使能U501锁存使能。
adc采用dma传输中断方式采样设计步骤
adc采用dma传输中断方式采样设计步骤
下面是ADC采用DMA传输中断方式采样的设计步骤:
1. 配置ADC参数:包括采样时间、采样通道、采样触发源等。
2. 配置DMA参数:包括DMA传输方向、内存地址、数据宽度等。
3. 初始化中断:配置中断优先级、中断向量表、中断源等。
4. 启动ADC:设置转换开始标志位,使ADC开始转换。
5. 启动DMA传输:设置DMA开始传输标志位,使DMA开始传输数据。
6. 等待中断:等待DMA传输完成并触发中断,中断处理程序把转换后的数据保存到相应的内存地址中。
7. 终止ADC和DMA:完成一次采样后,停止ADC和DMA的工作,等待下一次采样。
以上是ADC采用DMA传输中断方式采样的设计步骤,需要根据具体的硬件平台和采样要求进行相应的调整。
14281030方学毅中断方式AD转换数据采集
中断方式的A/D采集系统一、实验目的该实验使用了8259A, ADC0809,数码管来完成一个数据采集系统的设计,目的是了解中断方式的A/D采集数据的实现方法,掌握硬件设计和中断程序的编写方法,是对学生综合实验能力的训练。
二、实验内容使用ADC0809的通道0,接入0-5V的直流电压,用WR电位器调整模拟电压值,A/D 的转换结束信号EOC接在主8259A的IR5上,采集100个数据并存入内存中,同时将采集的16进制数据显示在数码管上。
请多次调整0-5V的电压值(旋动W1旋钮),进行A/D采集,并观测内存中的数据的变化情况。
三、实验现象每次采集的100个数据可能是相同的(数码管的数据也可能不变),当WR旋动时可以采到不同的数据。
四、实验接线图图1-6 实验连线图四、程序源代码PAGE 60,78CRLF MACRO ;回车换行宏定义MOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02H21HNTENDMDATA SEGMENTINR DB ?RESULT DB ?BUFF DB 600 DUP(?)XORG DW 100DATA ENDSSTACK SEGMENT STACK 'STACK'DB 50 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACK, ES:DATASTART: MOV AX,DATAMOV DS,AXMOV DI, OFFSET BUFF ;MOV AL,0AHMOV AH,35HINT 21H ;取IRQ2中断服务程序入口地址ES:BXPUSH ES ;保护ES,BX,DSPUSH BXPUSH DSMOV AX,SEG ADINT ;填写中断向量表(N=0AH)MOV DS,AXMOV DX,OFFSET ADINTMOV AL,0AHMOV AH,25HINT 21HPOP DS ;恢复DSIN AL,21HAND AL,11111011BOUT 21H,AL ;允许 IRQ2 中断 MOV CX,300HMOV DX,203H;8253初始化,0通道方式3 MOV AL,36HOUT DX,ALMOV DX,200HMOV AL,10H;初值得 0010H OUT DX,ALMOV AL,00HOUT DX,ALCCC: STIMOVDX,220H OUTDX,AL ;启动一次A/D 转换 HLTCLI;关中断 MOVAX,SI ;取 A/D 转换结果 PUSHDS MOVBX,6000H ;写入 6000H:0~2FFH 区域 MOVDS,BX MOVBX,CX DECBX MOV[BX],AL ANDAL,0F0H ;高位十六进制转ASCII 码 PUSHCX MOVCL,04H SHRAL CLPOP CXCMP AL,39HMOV BP,AX;保护中断屏蔽寄存器内容于BP 中JBE AS1ADD AL,07HAS1:MOV DL,AL ;显示高位MOV AH,02HINT 21HMOV [DI],AL ;INC DIMOV AL,[BX]AND AL,0FHADD AL,30HCMP AL,39HJBE AS2ADD AL,07HAS2:MOV DL,AL ;显示低位MOV AH,02HINT 21HMOV [DI],ALINC DIMOV DL,20H ;显示两个空格MOV AH,02HINT 21HINT 21HPOP DSLOOP CCCPOP DX ;恢复IRQ2中断向量POP DSMOV AL,0AHMOV AH,25HMOV OUT AX,BP21H,AL;恢复中断屏蔽寄存器内容WAIT_IN:MOV AH,1 ;程序暂停,等待键入INT 21HMOV SI,OFFSET BUFFCALL CRTSETLL: MOV AH,0CH ;写像素MOV BH,0MOV CL,10MOV CX,XORG ;初始列值INC XORGMOV DH,0MOV DL,[SI]INC SIINT 10HCMP XORG,400JLE LLEXIT:;MOV AX,2;INT 10H ;恢复80*25文本显示方式MOV AX,4C00H ;结束INT 21HADINT PROC NEAR ;中断服务程序PUSH AX ;保护AXPUSH DX ;保护DXMOV DX,220H ;读A/D转换结果IN AL,DXMOV SI,AX ;送SIMOV AL,20HOUT 20H,AL ;发中断结束命令POP DXPOP AXIRETADINT ENDP CRTSET PROCMOV AX,12H INT 10HMOV AH,0BH MOV BX,9INT 10HRETCRTSET ENDP CODE ENDSEND START 五、主程序流程图主程序流程图如下图;恢复;屏幕设置子程序b)中断般务。
AD转换实验中断方式
ORG 0000HLJMP STARTORG 0003HLJMP HHORG 0100HSTART:MOV 30H,#11H ;显示缓冲区MOV 31H,#10HMOV 32H,#10HMOV 33H,#10HMOV 34H,#10HMOV 35H,#10HMOV R7,#99H ;显示"P-----"延时时间XHXS: MOV R0,#35H ;显示子函数入口参数设置MOV R2,#06HMOV R3,#01HACALL DISPL YDJNZ R7,XHXS ;显示延时;开始AD转换AD:MOV DPTR,#9001H ;开始AD转换选择通道1MOVX @DPTR,ASETB IT0SETB EX0SETB EAXH:MOV R0,#35H ;显示子函数入口参数设置MOV R2,#06HMOV R3,#01HACALL DISPL YAJMP XH ;判断是否转换完毕,没有的话转移查询方式HH:CLR EAPUSH APUSH DPHPUSH DPLMOV DPTR,#9001H ;转换完毕读结果MOVX A,@DPTRMOV R6,AANL A,#0FH ;处理转换结果MOV 35H,A ;存储低位MOV A,R6ANL A,#0F0HSW AP AMOV 34H,AMOV A,#10HMOV 30H,A ;存储高位MOV DPTR,#9001H ;开始AD转换选择通道1MOVX @DPTR,APOP DPLPOP DPHPOP ASETB EARETITAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,40H,73H;显示子程序DISPL Y:MOV A,@R0 ;取一个数据MOV DPTR,#TABMOVC A,@A+DPTR ;把这个数据转换成断码MOV DPTR,#8004H ;数据口地址MOVX @DPTR,A ;送出数据MOV DPTR,#8002H ;位选地址MOV A,R3MOVX @DPTR,A ;送出位选LCALL YANRL A ;左移位选显示下一位MOV R3,ADEC R0 ;显示下一个数据DEC R2CJNE R2,#00H,DISPL YRET;12M晶振延时5msYAN:MOV R3,#10D1:MOV R4,#250D2:DJNZ R4,D2DJNZ R3,D1RETEND。
AD转换技术(中断方式)
课程名称:微机原理与接口技术实验名称:8位A/D转换实验(中断方式)一.实验目的掌握模/数信号转换的基本原理,掌握ADC0809芯片中断采样编程方法。
二.实验内容从ADC0809通道0输入+5V可变电压,使用中断方式采集数据,并将转换数据在7段数码管上16进制数显示。
三.实验结果分析拧电位器后发现数码显示管数字改变,并且两盏灯明亮程度不同。
附上源代码:.MODEL SMALL.386DATA SEGMENTNUM DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H,7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71HBUF DB 100 DUP (?)DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX, DATAMOV DS, AXIN AL, 21HAND AL, 11011111B ;开放IRQ5OUT 21H, ALCLICLDMOV AX,0MOV ES,AXMOV DI,4*35HMOV AX,OFFSET ADSTOSWMOV AX,SEG ADSTOSWMOV AX,DATA ;恢复数据段MOV DS,AXMOV DX,200H ;启动转换MOV AL,00HOUT DX,ALBEGIN: STIHLT ;等待中断JNZ BEGININ AL,21H ; 关闭MIR5AND AL,20HOUT 21H,ALMOV AH, 4CHINT 21HDIS PROC NEAR ;显示程序MOV CX, 0FFHNEXT: MOV AL, [DI]MOV AH, ALPUSH CXMOV CL, 4SHR AL, CLPOP CXMOV BX, 0MOV BL, ALMOV AL, NUM[BX]MOV DX, 210HOUT DX, ALMOV DX, 211HMOV AL, 00100000BOUT DX, ALCALL DELAYAND AH, 00001111BMOV BX, 0MOV BL, AHMOV AL, NUM[BX]MOV DX, 210HOUT DX, ALMOV DX, 211HMOV AL, 00010000BOUT DX, ALCALL DELAYLOOP NEXTRETDIS ENDPAD PROC NEAR ;中断程序PUSH AX ;保存寄存器PUSH DXPUSH DICLIMOV DX, 201H ;读取转换结果IN AL, DXNOPMOV DI, POINTMOV [DI], AL ;保存转换结果CALL DIS ;调用显示程序INC DIMOV POINT, DIMOV AL, 20H ;中断结束命令OUT 20H, ALMOV DX, 200H ;开启转换MOV AL, 00HOUT DX, ALPOP DI ;恢复寄存器内容POP DXPOP AXSTIIRET ;中断返回AD ENDPCODE ENDSEND START。
8259A的单极中断控制和ad转换
8259A的单极中断控制实验1.实验目的1)掌握中断控制器8259A与微机接口的原理和方法。
2)掌握中断控制器8259A的应用编程2.实验内容本实验中已设计有1片8259A中断控制芯片,工作于主片方式,8个中断请求输入端IR0~IR7实验原理图如图所示。
8259A和8088系统总线直接相连,8259A上连有一系统地址线A0,故8259A有两个端口地址,本系统中为20H、21H。
20H用来写ICW11,21H用来写ICW2、ICW3、ICW4,初始化命令字写好后,再写操作命令字。
OCW2、OCW3用端口地址20H,OCW1用端口地址21H,。
图中使用了3号中断源,IRQ33插孔和SP插孔相连,中断方式为边沿触发方式,每按一次AN按钮产生一次中断信号,向8259A发出中断请求信号.如果中断源电平信号不符合规定要求则自动转到7号中断,显示Err。
CPU 响应中断后,在中断服务中,对中断次数进行计数并显示,计满次数结束,显示器显示“8259 good”。
3.实验软件框图4.实验步骤1)连接好线路:8259A的IRQ33插孔和脉冲发生器单元SP插孔相连。
SP插孔初始电平置低电平。
2)运行实验程序。
3)按QAN键,每按2次产生一次中断,在显示器左边一位显示中断次数,满55次中断,显示器显示“8259 good”。
5.实验参考程序CODE SEGMENTASSUME CS:CODE INTPORT1 EQU 0020H INTPORT2 EQU 0021HINTQ3 EQU INTREEUP3 INTQ7 EQU INTREEUP7 CONTPORT EQU 00DFH DATAPORT EQU 00DEH DATA0 EQU 0580H DATA1 EQU 0500H DATA2 EQU 0508H DATA3 EQU 0518H DATA4 EQU 0520HORG 1000H START: JMP Tint1Tint1: CLIMOV AX,0HMOV DS,AXMOV DX,CONTPORTMOV AL,00HOUT DX,AL;KEYBORD DISPLY MODEMOV AL,2AHOUT DX,AL;8279 CLOCKMOV AL,0d0hOUT DX,AL;8279 CLEARMOV AL,90hOUT DX,AL;READ FIFO RAM COMMAND TEST1: IN AL,DXAND AL,80HJNZ TEST1CALL FORMATCLIMOV DI,DATA0MOV CX,08HXOR AX,AXREP STOSWMOV SI,DATA3CALL LEDDISP ;DISP 8259-1MOV AX,0HMOV DS,AXCALL WRINTVER ;WRITE INTRRUPTMOV AL,13HMOV DX,INTPORT1OUT DX,ALMOV AL,08HMOV DX,INTPORT2OUT DX,ALMOV AL,09HOUT DX,ALMOV AL,0F7HOUT DX,ALMOV BYTE PTR DS:[0601H],01H ;TIME=1STIWATING: JMP WATINGWRINTVER:MOV AX,0HMOV ES,AXMOV DI,002CHLEA AX,INTQ3STOSWMOV AX,CSSTOSWMOV DI,003CHLEA AX,INTQ7STOSWMOV AX,CSSTOSWRETINTREEUP3:CLIMOV AL,DS:[0601H]CALL CONVERSMOV SI,DATA0CALL LEDDISPDMOV AL,20HMOV DX,INTPORT1OUT DX,ALADD BYTE PTR DS:[0601H],01HCMP BYTE PTR DS:[0601H],06HJNA INTRE1MOV SI,DATA4CALL LEDDISPINTRE3: JMP INTRE3CONVERS:MOV BH,0HAND AL,0FHMOV BL,ALMOV AL,CS:[BX+DATA2]MOV BX,DATA0MOV DS:[BX],ALRETINTRE1: MOV AL,20HMOV DX,INTPORT1OUT DX,ALSTIIRETINTREEUP7: CLIMOV SI,DATA1CALL LEDDISPMOV AL,20HMOV DX,INTPORT1OUT DX,ALIRETLEDDISP:MOV AL,90HMOV DX,CONTPORTOUT DX,ALMOV BYTE PTR DS:[0600H],00 LED1: CMP BYTE PTR DS:[0600H],07HJA LED2MOV BL,DS:[0600H]MOV BH,0HMOV AL,CS:[BX+SI]MOV DX,DATAPORTOUT DX,ALADD BYTE PTR DS:[0600H],01HJNZ LED1LED2: RETLEDDISPD:MOV AL,90HMOV DX,CONTPORTOUT DX,ALMOV BYTE PTR DS:[0600H],00 LEDD1: CMP BYTE PTR DS:[0600H],07HJA LEDD2MOV BL,DS:[0600H]MOV BH,0HMOV AL,DS:[BX+SI]MOV DX,DATAPORTOUT DX,ALADD BYTE PTR DS:[0600H],01HJNZ LEDD1LEDD2: RETFORMAT: MOV BX,0MOV WORD PTR DS:[BX+0500H],5050HADD BX,2MOV WORD PTR DS:[BX+0500H],0079HADD BX,2MOV WORD PTR DS:[BX+0500H],0000HADD BX,2MOV WORD PTR DS:[BX+0500H],0000HADD BX,2MOV WORD PTR DS:[BX+0500H],063FHADD BX,2MOV WORD PTR DS:[BX+0500H],4F5BHADD BX,2MOV WORD PTR DS:[BX+0500H],6D66HADD BX,2MOV WORD PTR DS:[BX+0500H],077DHADD BX,2MOV WORD PTR DS:[BX+0500H],6F7FHADD BX,2MOV WORD PTR DS:[BX+0500H],7C77HADD BX,2MOV WORD PTR DS:[BX+0500H],5E39HADD BX,2MOV WORD PTR DS:[BX+0500H],7179HADD BX,2MOV WORD PTR DS:[BX+0500H],4006HADD BX,2MOV WORD PTR DS:[BX+0500H],4040HADD BX,2MOV WORD PTR DS:[BX+0500H],6D6FHADD BX,2MOV WORD PTR DS:[BX+0500H],7F5BHADD BX,2MOV WORD PTR DS:[BX+0500H],3F5EHADD BX,2MOV WORD PTR DS:[BX+0500H],5C3FHADD BX,2MOV WORD PTR DS:[BX+0500H],6D6FHADD BX,2MOV WORD PTR DS:[BX+0500H],7F5BHRETCODE ENDSEND START6.思考题简述8259A的中断初始化过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ORG 0000H
LJMP START
ORG 0003H
LJMP HH
ORG 0100H
START:MOV 30H,#11H ;显示缓冲区
MOV 31H,#10H
MOV 32H,#10H
MOV 33H,#10H
MOV 34H,#10H
MOV 35H,#10H
MOV R7,#99H ;显示"P-----"延时时间
XHXS: MOV R0,#35H ;显示子函数入口参数设置
MOV R2,#06H
MOV R3,#01H
ACALL DISPL Y
DJNZ R7,XHXS ;显示延时
;开始AD转换
AD:MOV DPTR,#9001H ;开始AD转换选择通道1
MOVX @DPTR,A
SETB IT0
SETB EX0
SETB EA
XH:MOV R0,#35H ;显示子函数入口参数设置
MOV R2,#06H
MOV R3,#01H
ACALL DISPL Y
AJMP XH ;判断是否转换完毕,没有的话转移查询方式HH:CLR EA
PUSH A
PUSH DPH
PUSH DPL
MOV DPTR,#9001H ;转换完毕读结果
MOVX A,@DPTR
MOV R6,A
ANL A,#0FH ;处理转换结果
MOV 35H,A ;存储低位
MOV A,R6
ANL A,#0F0H
SW AP A
MOV 34H,A
MOV A,#10H
MOV 30H,A ;存储高位
MOV DPTR,#9001H ;开始AD转换选择通道1
MOVX @DPTR,A
POP DPL
POP DPH
POP A
SETB EA
RETI
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,
6FH,77H,7CH,39H,5EH,79H,71H,40H,73H
;显示子程序
DISPL Y:MOV A,@R0 ;取一个数据
MOV DPTR,#TAB
MOVC A,@A+DPTR ;把这个数据转换成断码
MOV DPTR,#8004H ;数据口地址
MOVX @DPTR,A ;送出数据
MOV DPTR,#8002H ;位选地址
MOV A,R3
MOVX @DPTR,A ;送出位选
LCALL YAN
RL A ;左移位选显示下一位
MOV R3,A
DEC R0 ;显示下一个数据
DEC R2
CJNE R2,#00H,DISPL Y
RET
;12M晶振延时5ms
YAN:MOV R3,#10
D1:MOV R4,#250
D2:DJNZ R4,D2
DJNZ R3,D1
RET
END。