《AD转换模块》PPT课件.ppt_第1页
《AD转换模块》PPT课件.ppt_第2页
《AD转换模块》PPT课件.ppt_第3页
《AD转换模块》PPT课件.ppt_第4页
《AD转换模块》PPT课件.ppt_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

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

文档简介

第10章 A/D转换模块,10.1 A/D转换模块概述,F2407的A/D模数转换模块(ADC) :,带内置采样和保持(S/H)的10位ADC。 16个的模拟输入通道(ADCIN0ADCIN15)。 两个独立的排序器(SEQ1和SEQ2。 可单独访问的16个结果寄存器(RESULT0RESULT15)。,注意:F240xA器件的ADC模块和F24x器件的ADC模块不兼容,ADC的程序代码不能相互移植。,10.2 自动排序器的工作原理,ADC的排序器:包括两个独立的最多可选择8个模拟转换通道的排序器(SEQ1和SEQ2)。,这两个排序器可级连成一个可选择16个转换模拟通道的排序器(SEQ)。,在这两种工作方式下,ADC模块都能够序列转换并进行自动排序。,注:在DSP中只有一个A/D变换器,这个变换器由双排序器工作模式下的两个排序器共享。,排序,通过模拟输入通道的多路选择器来选择要转换的通道。 转换结束后,转换后的数值结果保存在该通道相应的结果寄存器(RESULTn)中。 即第0通道的转换结果保存在RESULT0中,第1通道的转换结果保存在RESULT1中,依此类推。,说明 用户可以对同一个通道进行多次采样,即对某一通道实行“过采样”,这样得到的采样结果比传统的采样结果分辨率高。,级连工作方式下自动排序ADC的结构框图,双排序器工作方式下自动排序的ADC的结构框图,双排序器和单排序器工作比较,注意,在双排序器模式下,来自“未被激活”的排序器的A/D启动请求将在“被激活”的排序器完成采样之后自动开始执行。 即,假设A/D转换正在忙于处理SEQ2的操作,当SEQ1启动一个SOC信号后,A/D转换器在完成SEQ2的操作之后立即开始响应SEQ1的请求。,最多可选择8个自动转换通道双排序器工作方式和最多可选择16个自动转换通道单排序器工作方式的操作大致相同。,描述排序器的规定,排序器1(SEQ1): CONV00CONV07; 排序器2(SEQ2): CONV08CONV15; 级连排序器(SEQ): CONV00CONV15。,10.2.1 连续的自动排序模式,SEQ1/SEQ2在一次排序过程中对8个通道进行任意排序转换; 每次转换结果保存到8个结果寄存器, SEQ1的结果寄存器为RESULT0RESULT7,SEQ2的结果寄存器为RESULT8RESULT15。,排序中的转换个数受MAX CONVn(MAXCONV寄存器中的一个3位段域或4位段域)控制; MAX CONVn段域的值在0 7范围变化。 MAX CONVn在自动排序的转换开始时,被装载到自动排序状态寄存器(AUTO_SEQ_SR)的排序计数器段域(SEQ CNTR30)。 当排序器从通道CONV00开始有顺序的转换时,SEQ CNTRn段域的值从装载值开始向下计数直到SEQ CNTRn为0。,一次自动排序完成的转换数为MAX CONVn1。,例1: 在双排序器模式下用SEQ1进行A/D转换。,设:用SEQ1完成7个通道的转换 排序自动转换:通道2、3、2、3、6、7、12。 MAX CONV1的值设为6,CHESELQn寄存器填入值,表中数值为十进制,x为不关心的值。,连续的自动排序方式A/D转换流程图,说明,用户必须保证在下一个转换序列开始之前,读取结果寄存器的值。 在ADC模块企图向结果寄存器写入数据,而用户却企图从结果寄存器中读取数时,ADC模块的仲裁逻辑保证在发生这种冲突时不会崩溃。,注意,SEQ CNTR为0后: 如果位CONT RUN为0,则排序器指针停留在最后状态; 如果位CONT RUN为1,则转换自动重新开始(即SEQ CNTRn装入最初的MAX CONV1的值,SEQ1的通道指针指向CONV00)。,在SEQ CNTRn每次到达0时,中断标志位被置为1,需要时用户可以在中断服务子程序中用ADCTRL2寄存器中的RST SEQn位将排序器手动复位。 复位之后,在下一个A/D启动信号来到时SEQ CNTR装入MAX CONVn中的原始值,且SEQ1指针指向CONV00。,10.2.2 排序器的启动/停止模式,可实现在时间上单独和多个启动信号触发源同步的功能。 CONT RUN位必须设置为0。,在排序器完成第一个转换序列之后,不需要在中断服务程序中复位,即排序器初始指针不需要指到CONV00就可以被重新触发。 因此,一个转换序列之后,排序器指针指到当前的通道。,例2 排序器工作在启动/停止方式,要求: 触发源1(定时器下溢)启动3个自动转换(I1、I2和I3); 触发源2(定时器周期)启动3个自动转换(V1、V2和V3)。 触发源1和触发源2在时间上是分开的,即间隔25S。,注:触发源1和2可以是来自事件管理器EVA,外部引脚或软件的SOC信号。,MAX CONV1的值置为2。,ADC模块的输入通道选择排序控制寄存器,事件管理器A(EVA)启动排序器,一旦复位和初始化之后,SEQ1就开始等待触发源的到来。 第一个触发源到来之后,执行通道选择值为CONV00(I1)、CONV01(I2)和CONV02(I3)的3个转换。 转换完成之后,SEQ1等待另一个触发源的到来。 25S之后另一个触发源到来,ADC模块开始执行另外3个通道选择值为CONV03(V1)、CONV04(V2)和CONV05(V3)的转换。,在第二个转换序列完成之后, ADC模块的结果寄存器中得到的值,说明,在两种触发源的情况下,MAX CONV1的值被自动装入SEQ CNTR1中。 如果第二个触发源要求转换的个数和第一个不一样,用户必须在第二个触发源来到之前,通过软件改变MAX CONV1 的值;否则ADC模块将重新使用原来的MAX CONV1中的值。 用户可以在第一个触发源引起的转换完成之后的中断复位程序中改变MAX CONV1的值,为第二个触发源引起的转换个数作准备。,10.2.3 输入触发源,注:,1排序器处于空闲状态:在接收到一个触发源之前,排序器指针指到CONV00或者排序器已经完成一个转换序列(即SEQ CNTR为0)。 无论何时,只要一个排序器处在空闲状态,一个启动信号触发就可以启动一个自动转换序列。 2如果一个新的启动触发信号来到时,当前转换序列正在进行,则将ADCTRL2寄存器中的SOC SEQn位置1(该位在前一个转换开始时被清0)。 但,如果此时SOC SEQn位已经为1,则该启动触发信号丢失。,3一旦被触发后,不能在转换中途停止或中断排序器。 除非,程序等到了一个序列的停止信号或者对排序器进行了复位。 复位使排序器立即返回到空闲的起始状态(SEQ1和级连的排序器指针指到CONV00,SEQ2的排序器指针指到CONV08)。 4当SEQ1/2工作在级连方式下,到SEQ2的触发源被忽略,而到SEQ1的触发源仍然有效。 级连方式可视为SEQ1有16个转换通道而非8个转换通道。,10.2.4 在排序转换时的中断操作,排序器可以在两种工作方式下产生中断, 工作方式方式由ADCTRL2寄存器中的中断模式控制位决定。,Case 1:第一个序列和第二个序列中采样的个数不一样。,使用中断方式1:在每次EOS到来时,产生中断请求。 (1)排序器设置MAX CONVn=1以转换I1和I2。 (2)在中断服务子程序a中,软件将MAX CONVn的值改为2以转换V1、V2和V3。 (3)在中断服务子程序b中完成以下操作: MAX CONVn改为1,用来转换I1和I2; I1、I2、V1、V2和V3的值从ADC结果寄存器中读出; 复位排序器。 (4)重复第(2)步和第(3)步。,注意:在每次SEQ CNTR到0时将中断标志位置1,且产生两次中断。,Case 2:两个序列的采样个数相等。,使用中断方式2:每隔一个EOS信号,产生一次中断请求。 (1)排序器设置MAX CONVn=2以转换I1、I2和I3(或者V1、V2和V3)。 (2)在中断服务子程序b或d完成以下操作: I1、I2、I3、V1、V2和V3的值从ADC结果寄存器中读出; 复位排序器。 (3)重复第(2)步和第(3)步。,注意:在每次SEQ CNTR到0时将中断标志位置1,即在ADC转换完I1、I2和I3或者V1、V2和V3之后中断标志位置1。 但是只有转换完V1、V2和V3之后才产生中断。,Case 3:两个序列的采样个数相等(带虚读)。,使用中断方式2:每隔一个EOS信号,产生一次中断请求。 (1)排序器设置MAX CONVn=2以转换I1、I2和x。 (2)在中断服务子程序b或d完成以下操作: I1、I2、x、V1、V2和V3的值从ADC结果寄存器中读出; 复位排序器。 (3)重复第(2)步和第(3)步。,注意:第3个x采样为一个假采样,并没有要求采样。但为了使中断服务子程序的开销和CPU的干扰最小,可以利用中断方式2的中断请求特性。,10.3 ADC时钟预定标,通过改变ADCTR1寄存器中的ACQ PS3-ACQ PS0位段域和CPS位,调整F240xA器件ADC的采样/保持模块来适应信号阻抗的变化。,A/D转换时间,A/D转换可被分成两个时间段 。,说明,如果ACQ PS3ACQ PS0位段域的值全为0,即预定标器的值为1; CPS为0时,PS时钟将和CPU时钟一样。 对于预定标器的任何其它值,PS都会增加采样/保持窗口的时间。 如果CPS为1,则S/H窗口长度为原来的2倍。 即,原来的S/H窗口再加上被预定标器拉长的倍数才是最后的PS。,注意: 在CPS为0时,PS和ACLK将和CPU时钟相等。,10.4 校准模式,说明 在校准方式下,ADCINn引脚未接A/D 转换器,因此不能对排序器进行操作。 接收A/D 转换器输入端的信号为BRG ENA位和HI/LO位。,校准模式:计算ADC模块的零点、中点和最大值时的偏移误差。,偏移误差为二进制补码,保存在校准寄存器中(二进制补码操作只适用于误差值为负的情况)。 ADC硬件自动将偏移误差量加到转换值上。,校准寄存器(CALIBRATION) 地址70B8h,CALIBRATION寄存器中存放校准模式下的最后结果。 在正常模式下时,ADC转换结果保存到结果寄存器之前CALIBRATION寄存器中的值会自动加到ADC转换结果的输出。,例1:,如果选择VREFHI作校准操作,则期望的结果是3FFh。 如果从CALIBRATION寄存器读出的校准转换结果为3FDh,那么用户应当在离开校准模式之前,将值002h写到CALIBRATION寄存器中。 CALIBRATION寄存器中的值(002h)将对以后的转换值进行2个数的调整。,例2:,如果选择VREFLO作校准操作,则期望的结果是000h。 如果从CALIBRATION寄存器读出的校准转换结果为003h,那么用户应当在离开校准模式之前,将值003h写到CALIBRATION寄存器中。 CALIBRATION寄存器中的值(003h)将对以后的转换值进行3个数的调整。,校准操作,在校准模式下,ADC将转换结果保存在CALIBRATION寄存器中; 在校准转换结束之后,INT_FLAG_SEQ1位置1; 如果中断被使,则产生中断; 用户必须读取CALIBRATION寄存器的值,以判断该值对理想值的偏移量有多大,然后在离开这种校准方式之前,将该偏移量写回CALIBRATION寄存器中; 转换值被送到结果寄存器之前, CALIBRATION寄存器中的值将加到转换值上(不是在校准模式)。,注意,为了得到精确的结果,校准操作必须作两次,即在保证已经完成第一个校准操作后,应当立即启动第二个校准操作(这将覆盖第一次校准操作的结果)。,10.5 自测式模式,自测试模式只能用来检测ADC引脚的短路或开路。,注意: 正常模式和自测试模式不能同时使用。 在自测试模式下,采样周期为正常模式的两倍。,10.6 ADC模块的寄存器,1ADC控制寄存器1(ADCTRL1) 地址70A0h,注: R = 可读 , W = 可写 , -0 = 复位值,位15 保留位。 位14 复位位。ADC模块软件复位位。此位引起一个对整个ADC模块的主动复位。所有的寄存器和排序器指针都复位到器件复位引脚被拉低或者上电复位时的初始状态。 0 无影响 1 复位整个ADC模块,注: ADC模块可在系统复位时被复位,但用户可以提供向此位写入1,实现在任何时候对ADC模块的复位。,一个NOP指令后就可以对向ADCTRL1寄存器中写入相应的值。 在缺省设置足够时,复位ADC模块之后也可不向ADCTRL1中写数。,位1312 SOFT位和FREE位。决定仿真悬挂时ADC模块的工作情况。 在自由运行模式下,ADC模块的运行不受仿真影响; 在停止模式下,仿真悬挂时,ADC模块可立即停止或者完成当前操作之后停止。 SOFT FREE 0 0 一旦仿真悬挂,ADC模块立即停止; 1 0 仿真悬挂时,ADC模块完成当前转换后停止; x 1 自由运行,继续运行而不管仿真悬挂。 位118 采样时间选择位ACQ PS3ACQPS0。决定ADC时钟的预定标系数。 位7 CPS位。转换时钟预定标位。决定ADC转换逻辑时钟的预定标。 0 FCLKCLK/1; 1 FCLK=CLK/2。 其中CLK为CPU时钟频率。,AD模块的预定标系数,位6 连续转换位CONT RUN。决定排序器工作在连续转换模式或者启动/停止模式。用户可以在当前转换序列正被执行时向该位写数,但是只有在当前转换序列完成之后才生效。在连续模式下,用户不用对排序器复位,而在启动/停止模式下,必须复位排序器,使排序器指针指到CONV00。 0 启动/停止模式; 1 连续转换模式。 位5 ADC中断请求优先级位INT PRI。 0 高优先级; 1 低优先级。 位4 级连排序器工作方式位SEQ CASC。 0 双排序器工作模式。SEQ1和SEQ2为可选择8个转换通道的排序器; 1 级连模式。SEQ1和SEQ2级连起来作为一个可选择16个转换通道的排序器SEQ。,位3 偏差校准使能位CAL ENA。 0 禁止校准模式; 1 使能校准模式。 位2 桥使能位 BRG ENA。 0 满的参考电压被接到ADC输入; 1 参考的中点电压被接到ADC输入。 位1 VREFHI和VREFLO选择位HI/LO。 0 VREFLO作为ADC输入的值; 1 VREFHI作为ADC输入的值。 位0 自测试使能位STEST ENA。 0 禁止自测试模式; 1 使能自测试模式。,参考电压位选择定义,2ADC控制寄存器2(ADCTRL2) 地址70A1h,位15 EVB SOC SEQ。EVB的SOC信号使能级连排序器位。 0 不起作用; 1 允许级连的排序器SEQ由事件管理器B的信号启动。 位14 RST SEQ1/STRT CAL。复位排序器1/启动校准转换方式位。 在校准转换方式被禁止的情况下: 0 不起作用; 1 立即复位排序器,使排序器指针指到CONV00。 在校准转换方式使能的情况下: 0 不起作用; 1 启动校准转换方式。,位13 SOC SEQ1。启动SERQ1转换位。 以下触发源可以引起此位被置1: S/W 软件向这一位写1; EVA 事件管理器A; EVB 事件管理器B(仅在级连模式下); EXT 外部引脚(即ADC SOC引脚)。 0 清除一个悬挂的SOC请求; 1 软件触发启动SEQ1。,当一个触发源到来时,有3种情况可能发生: SEQ1处于空闲状态且清0 SOC位时,SEQ1立即启动(在判优仲裁控制下);置1 SOC SEQ1位后立即清0,允许悬挂后来的触发源。 SEQ处于忙状态但SOC位为0时,置1 SOC SEQ1位表示正悬挂一个触发源请求;当SEQ1完成当前的转换又重新开始时,清0该SOC SEQ1位。 SEQ1处于忙状态且已经置1 SOC位时,忽略此时来到的触发源。,注: 在同一个指令中设置RST SEQ1位和SOC SEQ1位时,将复位排序器。 正确的操作顺序:先设置RST SEQ1位,再在下一条指令中设置SOC SEQ1位。保证复位一个排序器之后,再将其重新启动。 RST SEQ2位和SOC SEQ2位的操作亦如此。,位12 SEQ1 BSY。SEQ1忙状态位。 0 SEQ1处于空闲状态; 1 SEQ1处于忙状态,一个转换序列正在进行。 位1110 对SEQ1的中断方式使能控制位。 位9 INT FLAG SEQ1位。ADC模块SEQ1的中断标志位。 0 无中断事件发生; 1 有中断事件发生。 位8 EVA SOC SEQ1位。事件管理器A对SEQ1产生SOC信号的屏蔽位。 0 SEQ1不能被EVA的触发源启动; 1 允许SEQ1/SEQ被EVA的触发源启动。 位7 EXT SOC SEQ1位。外部信号对SEQ1的启动转换位。 0 不起作用; 1 允许一个来自ADCSOC引脚上信号,启动ADC自动转换序列。 位6 RST SEQ2。复位排序器2。 0 不起作用; 1 立即复位排序器,使排序器指针指到CONV00。,位5 SOC SEQ2位。启动SEQ2转换位(仅适用于双排序器模式)。 以下触发源可以引起该位置1: S/W 软件向这一位写1; EVB 事件管理器B。 0 清除一个悬挂的SOC请求; 1 软件触发启动SEQ1。,当一个触发源到来时有3种情况可能发生: SEQ2处于空闲状态且SOC位清0时,SEQ2立即启动(在判优仲裁控制下);该位置1后立即被清0,允许后来的触发源被悬挂。 SEQ2处于忙状态但SOC位为0时,该位置1以表示正悬挂一个触发源请求;当SEQ2完成当前的转换又重新开始时,该位清0。 SEQ2处于忙状态且SOC位已经置1时,忽略此时来到的触发源。,位4 SEQ2 BSY位。SEQ2忙状态位。 0 SEQ2处于空闲状态; 1 SEQ2处于忙状态,一个转换序列正在进行。 位32 对SEQ2的中断方式使能控制位。 位1 INT FLAG SEQ2位。ADC模块SEQ2的中断标志位。 0 无中断事件发生; 1 发生过中断事件。 位0 EVA SOC SEQ2位。事件管理器B对SEQ2产生SOC信号的屏蔽位。 0 SEQ2不能被EVB的触发源启动; 1 允许SEQ2被EVB的触发源启动。,3最大转换通道寄存器(MAXCONV) 地址70A2h,位15 7 保留位。 表10.11 MAX CONV1的位定义和转换个数之间的关系。,位6 0 MAX CONVn位域。 该位域决定了一次自动转换最多转换的通道个数。 注意:该位域及其操作随着排序器工作模式的变化而变化。,对SEQ1操作,使用位域MAX CONV1_2 0; 对SEQ2操作,使用位域MAX CONV2_2 0; 对SEQ 操作,使用位域MAX CONV1_3 0。,表10.11,MAX CONV1的位定义和转换个数之间的关系,例10.3 对MAX CONV寄存器位的编程,如果需要进行5个转换,则MAX CONV设置为4; 在双排序器模式下使用SEQ1或者在级连模式下使用SEQ; 排序器指针依次从CONV00指到CONV04; 5个转换结果依次存放在转换结果寄存器00 04中。,在双排序器模式下使用SEQ2时,排序器指针依次从CONV08指到CONV12,且5个转换结果依次存放在转换结果寄存器08 12中。,当SEQ1工作在双排序器模式下,且写入MAX CONV1中的值超过7时,SEQ CNTRn超过7之后将继续计数,并使排序指针重新指到CONV00继续转换。,4自动排序状态寄存器(AUTO_SEQ_SR) 地址 70A7h,位15 12 保留位。 位11 8 SEQ CNTR3-SEQ CNTR0。 排序器计数状态位。见表10.12。 位7 保留位。 位6 4 SEQ2-State2 SEQ2-State0。 反映了SEQ2排序器指针的状态。 如果需要,用户可以根据这几位的值,在结束转换EOS信号来到之前,读取中间结果。 位3 0 SEQ1-State3 SEQ1-State0。 反映了SEQ1排序器指针的状态。 如果需要,用户可以根据这几位的值,在结束转换EOS信号来到之前,读取中间结果。,每一个4位域都可为自动转换选择16个模拟输入通道中的任意一个。见表10.13。,表10.12 SEQ CNTRn位定义,表10.13 ADC输入通道选择位定义,5ADC输入通道选择排序控制寄存器(CHSELSEQn) 地址70A3h 70A6h,CHSELSEQ1,CHSELSEQ2,CHSELSEQ3,CHSELSEQ4,6ADC转换结果缓冲寄存器(RESULTn) 地址 70A8h-70B7h,注: 1. 缓冲区地址为70A8h70B7h(16个寄存器); 2. 10位转换结果放在(D9D0)。,10.7 ADC 转换时钟周期,转换周期可分成5个阶段 :,启动时序同步(SOS同步):只在一个转换序列的第一个转换时需要; 采样时间(ACQ) 转换时间(CONV); 结束转换时间(EOC): 序列转换完成后,设置标志位时间EOS:该时间仅在一个序列的最后一个转换时需要。,注意: 转换时间与一个给定的序列中转换的个数有关。 ACQ、CONV和EOC在每个转换中都需要。,ADC转换各个阶段需要的CLKOUT时钟周期,ACQPS=1,2,3时ACQ的值,10.8 ADC 转换应用举例,程序只作一次A/D采样。 用事件管理器B的定时器4,定时时间到来触发A/D采样的启动。 采样时采用级连模式,一次作16个转换,转换通道分别是015。 转换完成后,在A/D中断服务子程序中将转换结果读出。,1汇编源程序,.include “F2407REGS.H“ ;引用头部文件 .def _c_int0 ;建立中断向量表 .sect “.vectors“ ;定义主向量段 RSVECT B _c_int0 ;PM 0 复位向量 1 INT1 B GISR1 ;PM 2 中断优先级1 4 INT2 B PHANTOM ;PM 4 中断优先级2 5 INT3 B PHANTOM ;PM 6 中断优先级3 6 INT4 B PHANTOM ;PM 8 中断优先级4 7 INT5 B PHANTOM ;PM A 中断优先级5 8 INT6 B PHANTOM ;PM C 中断优先级6 9 RESERVED B PHANTOM ;PM E 模拟量输入中断(保留) 10 SW_INT8 B PHANTOM ;PM 10 用户定义软件中断 - SW_INT31 B PHANTOM ;PM 3E 用户定义软件中断-,;中断子向量入口定义pvecs .sect “.pvecs“;定义子向量段 PVECTORS B PHANTOM ;保留向量地址偏移量 00H B PHANTOM ;保留向量地址偏移量 01H B PHANTOM ;保留向量地址偏移量 02H B PHANTOM ;保留向量地址偏移量 03H B ADCINT_ISR;保留向量地址偏移量 04H ADC中断 B PHANTOM ;保留向量地址偏移量 05H B PHANTOM ;保留向量地址偏移量 41H,;主程序: .text _c_int0 SETC INTM CLRC SXM CLRC OVM CLRC CNF LDP #0E0H SPLK #81FEH,SCSR1;CLKIN=6M, CLKOUT=24M SPLK #0E8h,WDCR ;关看门狗 LDP #0 SPLK #0001h,IMR ;允许INT1中断 SPLK #0FFFFh,IFR ;清所有中断标志 CALL ADINIT ;初始化ADC程序 CLRC INTM ;开总中断 CALL AD ;启动模数转换程序 WAIT: NOP B WAIT,; ADC初始化程序 ADINIT: LDP #225 ;设置通用定时器4 SPLK #0000H,T4CNT SPLK #170CH,T4CON SPLK #075H,T4PER SPLK #0400H,GPTCONB SPLK #0FFFFH,EVBIFRB SPLK #0000H,EVBIMRB LDP #DP_PF2 SPLK #0010H,ADCTRL1 ;设置ADC控制寄存器 SPLK #8404H,ADCTRL2 SPLK #000FH,MAXCONV ;16 通道 SPLK #3210H,CHSELSEQ1 SPLK #7654H,CHSELSEQ2 SPLK #0BA98H,CHSELSEQ3 SPLK #0FEDCH,CHSELSEQ4 LDP #DP_SARAM2 ;指向0A00H0A80H SPLK #ADRESULT,ADCOUNT RET,;启动模数转换程序 AD: LDP #225 LACL T4CON OR #40H ;启动定时器4 SACL T4CON RET,;中断程序 GISR1: ;优先级INT1中断子程序入口 ;保护现场 LDP #0E0H LACC PIVR,1 ;读取外设中断向量寄存器(PIVR), 并左移一位 ADD #PVECTORS ;加上外设中断入口地址 BACC ;跳到相应的中断服务子程序 ADCINT_ISR: CLRC SXM LDP #DP_SARAM2 LAR AR1,ADCOUNT LAR AR0,#15 LAR AR2,#RESULT0 MAR *,AR2 ADC1: LACC *+,10,AR1 SACH * ADRK #32 MAR *,AR0 BANZ ADC1,*-,AR2 LDP #DP_PF2 LACL ADCTRL2 OR #4000H ;复位SEQ1 AND #0FFDFH ;清INT FLAG SEQ1 ,,SACL ADCTRL2 LDP #DP_SARAM2 LACL ADCOUNT SUB #ADRESULT+31 BCND ADC2,GEQ ADD #ADRESULT+32 ;32 SACL ADCOUNT B GISR1_RET ADC2: SPLK #ADRESULT,ADCOUNT ;=32 LACL T4CON AND #0FFBFH ;停止定时器4, 即停止AD转换 SACL T4CON B GISR1_RET GISR1_RET: ;中断返回出口,;恢复现场 CLRC INTM ;开总中断,因为一进中断就自动关闭了总中断 RET ;假中断程序 PHANTOM KICK_DOG ;复位看门狗 RET END,2C语言源程序,(1)所需的复位和中断向量定义文件“vectors.asm” / 该文件利用汇编语言代码定义了复位和中断向量 .title “vectors.asm“ .ref _c_int0,_nothing,_adint .sect “.vectors“ reset: b _c_int0 / 复位向量 int1: b _adint / A/D中断向量 int2: b _nothing int3: b _nothing int4: b _nothing int5: b _nothing int6: b _nothing,/ 主程序 / 该程序用于进行A/D转换的演示,A/D转换的结果存于数足ADRESULT16中, / 寄存器cesi用于测试每个A/D转换的结果 #include “register.h“ int ADRESULT16; / 定义一个数组用于保存AD转换的结果 volatile unsigned int *j; / 定义一个指针变量j int i=0x00,cesi; / 屏蔽中断子程序 void inline disable() asm(“ setc INTM“); / 开总中断子程序 void inline enable() asm(“ clrc IN

温馨提示

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

最新文档

评论

0/150

提交评论