《用中断法读取ad数据》由会员分享,可在线阅读,更多相关《用中断法读取ad数据(7页珍藏版)》请在金锄头文库上搜索。
1、单片机课程课后作业班级: 学号:姓名: 作业要求:1 将例5.3.1改为使用中断法读取A/D数据 2 画出Proteus原理图3 写出Keil编程程序1. 原理部分1.1 51单片机的中断体系结构 80C51的中断系统有5个中断源(8052有 6个),2个优先级,可实现二级中断嵌套。MCS-51系列单片机中断系统的机构如下:图1中断系统机构组成51单片机的中断体系结构与中断系统相关的特殊寄存器:1)中断允许控制寄存器(IE)- 控制各中断的开放和屏蔽2)中断优先级控制寄存器(IP)-设置各中断的优先级3)定时器/计数器控制寄存器(TCON)-定时器和外部中断的控制4)串行口控制寄存器(SCON
2、)-串行中断的控制中断类型分为三类:1)T0、T1是2个定时器/计数器中断,由片内定时器提供;2)INT0、INT1是2个外部中断,由引脚P3.2和P3.2提供;3)RX、TX为串行口中断所用,由片内串口提供。图2 51单片机的中断体系结构1、(P3.2)/(P3.3)可由IT0(TCON.0)/IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2/P3.3引脚上出现有效的中断信号时,中断标志IE0(TCON.1)/IE1(TCON.3)置1,向CPU申请中断。3、TF0(TCON.5)/TF1(TCON.7),片内定时/计数器T0/T1溢出中断请求标志。当定时/计数
3、器T0/T1发生溢出时,置位TF0/TF1,并向CPU申请中断。5、RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。上述只是向CPU申请中断,如果要得到CPU的相应,还要设置相应的中断允许IE和优先级IP,中断方能的到响应。1)定时器中断的使用(以定时器0为例) TMOD |= 0x01 | 0x04; /使用模式1,16位计数器,使用|符号可以在使用多个定时器时不受影响 TH0=0xFF; /给定初值 TL0=245; /从245计数到255 EA=1; /总中断打开 ET0=1;
4、/定时器中断打开 TR0=1; /定时器开关打开void Timer0_isr(void) interrupt 1 using 1 /中断服务程序 TH0=0xFF; /重新给定初值 TL0=245; 2)外部中断的使用(以外部中断0为例) EA=1; /全局中断开 EX0=1; /外部中断0开 IT0=0; /电平触发void ISR_Key(void) interrupt 0 using 1 /中断服务程序在这次作业中,我所采用的中断程序为外部中断01.2 ADC0804转换的基本原理1.工作原理:所谓 A/D转换器就是模拟/ 数字转换器(ADC),是将输入的模拟信号转换成数字信号。信号输
5、入端可以是传感器或转换器的输出,而 ADC的数字信号也可能提供给微处理器,以便广泛地应用。 2. ADC0804引脚图如下:8 位 COMS依次逼近型的 A/D转换器. 三态锁定输 出 存取时间:135US 分辨率:8 位 转换时间:100US 总误差:正负 1LSB 工作温度:ADC0804LCN-070 度 图3 ADC0804引脚图3.引脚说明/CS(引脚1)芯片选择信号,低电平有效 /RD(引脚 2) 外部读取转换结 果的控制输出信号。/RD为 HI 时,DB0DB7处理高阻抗:/RD为 LO时, 数字数据才会输出。 /WR(引脚 3)用来启动转换的控制输入,相当于 ADC的转换开始(
6、/CS=0 时), 当 /WR由 HI变为 LO时,转换器被清除:当/WR回到 HI 时,转换正式开始。 CS 、RD 、WR (引脚1、2、3):是数字控制输入端,满足标准TTL 逻辑电平。其中CS 和WR 用来控制A/D 转换的启 动信号。CS 、RD 用来读A/D 转换的结果,当它们同时为低电平时,输出数据锁存器DB0DB7 各端上出现8 位并行二进制数码。CLKI(引脚4)和CLKR(引脚19):ADC08010805 片内有时钟电路,只要在外部“CLKI”和“CLKR”两端外接一对电阻电容即可产生 A/D 转换所要求的时钟,其振荡频率为fCLK1/1.1RC。其典型应用参数为:R=1
7、0K,C=150PF,fCLK640KHZ,转换速度为100。若采用外部时钟,则外部fCLK 可从CLKI 端送入,此时不接R、C。允许的时钟频率范围为100KHZ1460KHZ。INTR (引脚5): INTR 是转换结束信号输出端,输出跳转为低电平表示本次转换已经完成,可作为微处理器的中断或查询信号。如果将CS 和WR 端与INTR 端相连,则ADC0804 就处于自动循环转换状态。CS 0 时,允许进行A/D 转换。WR 由低跳高时A/D 转换开始,8 位逐次比较需88=64 个时钟周期,再加上控制逻辑操作,一次转换需要6673 个时钟周期。在典型应用fCLK640KHZ 时,转换时间约
8、为103114。当fCLK 超过640KHZ,转换精度下降,超过极限值1460KHZ 时便不能正常工作。Vin()(引脚 6)和Vin()(引脚7):被转换的电压信号从Vin()和Vin()输入,允许此信号是差动的或不共地的电压信号。如果输入电压V的变化范围从0V到Vmax,则芯片的Vin()端接地,输入电压加到Vin()引脚。由于该芯片允许差动输入,在共模输入电压允许的情况下,输入电压范围可以从非零伏开始,即Vmin 至Vmas。此时芯片的Vin()端应该接入等于Vmin 的恒值电码坟上,而输入电压V仍然加到Vin()引脚上。AGND(引脚8)和DGND(引脚10):A/D 转换器一般都有这
9、两个引脚。模拟地AGND 和数字地DGND 分别设置引入端,使数字电路的地电流不影响模拟信号回路,以防止寄生耦合造成的干扰。Vref2(引脚9):参考电压Vref/2 可以由外部电路供给从“Vref/2”端直接送入,Vref/2 端电压值应是输入电压范围的二分之一所以输入电压的范围可以通过调整Vref/2 引脚处的电压加以改变,转换器的零点无调整。图4 ADC0804 转换器的工作时序图5.AD转换器的设计接口电路图:图中,ADC0804 数据输出线与AT89C51 的数据总线直接相连,AT89C51 的RD 、WR 和INT1直接连到ADC0804,由于用P1.0 线来产生片选信号,故无需外
10、加地址译码器。当AT89C51 向ADC0804 发WR (启动转换)、RD (读取结果)信号时,只要虚拟一个系统不占用的数据存储器地址即可。图5ADC0804接法2. 源代码#include#include#define uchar unsigned char#define uint unsigned intsbit wela=P27;sbit dula=P26;sbit adrd=P37;sbit adwr=P36;uchar adval;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c
11、,0x39,0x5e,0x79,0x71;void delayms(uint xms)uint i,j;for(i=xms;i0;i-)for(j=110;j0;j-);void display(uchar bai,uchar shi,uchar ge) wela=1;P0=0x7e;wela=0;P0=0xff;dula=1;P0=tablebai;dula=0;P0=0xff;delayms(5);wela=1;P0=0x7d;wela=0;P0=0xff;dula=1;P0=tableshi;dula=0;P0=0xff;delayms(5);wela=1;P0=0x7b;wela=0;
12、P0=0xff;dula=1;P0=tablege;dula=0;P0=0xff;delayms(5);void main()uchar a,A1,A2,A3;EA=1; /开总中断EX0=1;/开外部中断0IT0=1; /设置电平触发方式为下降沿while(1)adwr=1;_nop_();adwr=0;_nop_();adwr=1;for(a=10;a0;a-)display(A1,A2,A3);A1=adval/100;A2=adval%100/10;A3=adval%10;void init0() interrupt 0P1=0xff;adrd=1;_nop_();adrd=0;_nop_();adval=P1;adrd=1;3. proteus仿真结果图6 仿真结果4. 结论通过改写书中的程序加深了对中断以及ADC0804转换器的认识,同时理解了写外部中断的知识。7