MC9S12XS128 AD转换详解

合集下载

飞思卡尔MC9S12XS128单片机各模块使用方法及寄存器配置

飞思卡尔MC9S12XS128单片机各模块使用方法及寄存器配置

飞思卡尔MC9S12XS128单片机各模块使用方法及寄存器配置手把手教你写S12XS128程序--PWM模块介绍该教程以MC9S12XS128单片机为核心进行讲解,全面阐释该16位单片机资源。

本文为第一讲,开始介绍该MCU的PWM模块。

PWM 调制波有8个输出通道,每一个输出通道都可以独立的进行输出。

每一个输出通道都有一个精确的计数器(计算脉冲的个数),一个周期控制寄存器和两个可供选择的时钟源。

每一个P WM 输出通道都能调制出占空比从0—100% 变化的波形。

PWM 的主要特点有:1、它有8个独立的输出通道,并且通过编程可控制其输出波形的周期。

2、每一个输出通道都有一个精确的计数器。

3、每一个通道的P WM 输出使能都可以由编程来控制。

4、PWM 输出波形的翻转控制可以通过编程来实现。

5、周期和脉宽可以被双缓冲。

当通道关闭或PWM 计数器为0时,改变周期和脉宽才起作用。

6、8 字节或16 字节的通道协议。

7、有4个时钟源可供选择(A、SA、B、SB),他们提供了一个宽范围的时钟频率。

8、通过编程可以实现希望的时钟周期。

9、具有遇到紧急情况关闭程序的功能。

10、每一个通道都可以通过编程实现左对齐输出还是居中对齐输出。

1、PWM启动寄存器PWMEPWME 寄存器每一位如图1所示:复位默认值:0000 0000B图1 PWME 寄存器每一个PWM 的输出通道都有一个使能位P WMEx 。

它相当于一个开关,用来启动和关闭相应通道的PWM 波形输出。

当任意的P WMEx 位置1,则相关的P WM 输出通道就立刻可用。

用法:PWME7=1 --- 通道7 可对外输出波形PWME7=0 --- 通道7 不能对外输出波形注意:在通道使能后所输出的第一个波形可能是不规则的。

当输出通道工作在串联模式时(PWMCTL 寄存器中的CONxx置1),那么)使能相应的16位PWM 输出通道是由PWMEx 的高位控制的,例如:设置PWMCTL_CON01 = 1,通道0、1级联,形成一个16位PWM 通道,由通道 1 的使能位控制PWM 的输出。

第8章MC9S12XS128模数转换模块及其应用实例59页PPT

第8章MC9S12XS128模数转换模块及其应用实例59页PPT

8.2 ATD模块结构组成和特点
MC9S12XS128内置的ATD 模块如图8.1所示。
《MC9S12XS单片机原理及嵌入式系统开发》 单片机原理及嵌入式系统开发》
8.2 ATD模块结构组成和特点
ATD模块具有以下基本特征: 8位/10位/12位可选转换精度; 停止模式下转换使用内部时钟; 转换完成后为低功耗状态; 自动和可编程数值比较,可设定大于或者小于等于设定值时中断申请; 可编程采样时间; 左对齐/右对齐转换数值; 外部触发功能; 转换完成中断申请; 16路模拟输入通道多路开关; 可实现VRH、VRL和(VRH+VRL)/2特殊转换; 转换序列长度为1~16; 连续转换模式; 多通道扫描功能; 外部触发功能可配置为AD通道或4个外部附加触发输入端,外部触发源可选
《MC9S12XS单片机原理及嵌入式系统开发》 单片机原理及嵌入式系统开发》
8.3 ATD模块寄存器及设置
8.3.4 ATD控制寄存器3(ATDCTL3)
S8C、S4C、S2C、S1C:转换序列长度定义位。这4位控制每个序列转换的长度。A/D 转换序列长度定义详见表8-7。复位后,S4C默认为1,所以默认的A/D转换序列的长度为 4。
8.3 ATD模块寄存器及设置
8.3.3 ATD控制寄存器2(ATDCTL2)
ETRIGE:外部触发模式使能位。该位允许表8-3中描述的AD通道或者ETRIG3~0输入 端作为外部触发源。如果外部触发源是AD某通道,则使能该通道的数字输入缓冲功能。外部 触发允许与外部事件实现同步转换。停止模式下的AD转换,外部触发不工作。
《MC9S12XS单片机原理及嵌入式系统开发》 单片机原理及嵌入式系统开发》
8.3 ATD模块寄存器及设置

MC9S12XS128中文资料

MC9S12XS128中文资料
PWM标度B寄存器。用于控制Clock SB的值,Clock SB = Clock A / (2 * PWMSCLB),当PWMSCLB=0x00时,相当于PWMSCLB=256。
PWMCNTx:
PWM通道计数寄存器。
每个通道都有一个独立的8位计数器,其计数速率由所选择的时钟源决定。计数器的值可以随时读取而不影响计数器运行,也不影响PWM波形输出。在左对齐模式时,计数器从0计数至周期寄存器的值减1;在中心对齐模式,计数器从0计数至周期寄存器的值,然后再倒计数至0。
CFORC:
定时器比较强制寄存器。复位值为0x00。
FOCx=1将强制该位对应通道产生输出比较成功动作,但CxF中断标志位不置位。任何通道的强制比较成功动作若与普通比较成功动作同时发生,则强制比较成功动作优先发生,且CxF标志位不会置位。
被置位后瞬间将自动清除该位,所以任何时候对该寄存器的读动作都将返回0x00。
OC7M:
输出比较通道7屏蔽寄存器。复位值为0x00。
Setting the OC7Mx (x ranges from 0 to 6) will set the corresponding port to be an output port when the corresponding TIOSx (x ranges from 0 to 6) bit is set to be an output compare and the corresponding OCPDx (x ranges from 0 to 6) bit is set to zero to enable the timer port.A successful channel 7 output compare overrides any channel 6:0 compares. For each OC7M bit that is set, the output compare action reflects the corresponding OC7D bit.

【MC9S12XS128MAA】使用说明书

【MC9S12XS128MAA】使用说明书

【MC9S12XS128MAA】使用说明书
预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制
MC9XS128MAA 使用说明书
该系统板供电电压为:5±0.02 V ,建议使用TPS7350为其供电,理由如下:TPS7350 是微功耗低压差线性电源芯片,具有完善的保护电路,包括过流、过压、电压反接保护。

使用这个芯片只需要极少的外围元件就能构成高效稳压电路。

与LM2940及AS1117稳压器件相比,TPS7350具有更低的工作压降和更小的静态工作电流,可以使电池获得相对更长的使用时间。

由于热损失小,因此无需专门考虑散热问题。

而且其纹波很小,又为线性稳压芯片,可以为单片机及片外AD 模块提供很稳定的工作电压!
1.到货后检测:
当你的系统板到货后,请你马上测试,如系统板的有个指示灯是一闪一闪的(我们发货检测的时候讲测试程序烧录在里面),证明系统板是没有问题的。

否则就是损坏的,请你马上联系我们的客服。

系统板与下载器BDM的连接图:
该系统板的编程需要专门的飞思卡尔软件:
2.
3.
需要使用USB专用接线,使用前需要安装USB转串口CH340T 驱动
5.烧录时出现问题
如果下载程序步骤不是以上步骤,并且不能进行烧录,则可能出现以下问题:
1、电脑未安装BDM 驱动或者安装未成功;
2、下载线跟芯片下载口的方向不对;
3、连接线出现问题,拔出各接口,重新连接;
4、芯片被锁,请按照解锁文档步骤进行解锁
5、BDM 跳线帽错误。

MC9S12XS128单片机

MC9S12XS128单片机

CodeWarrior新建工程
第三步:进入欢迎界面,点击下一步。然后选择芯 片型号 MC9S12XS128,点击下一步。程序一定 要与单片机型号一直,否则在硬件调试中会出现 错误。
CodeWarrior新建工程
第四步:选择使用的语言,在此选择 C语言,点击 “下一步”。
CodeWarrior新建工程
}
Codewarrior软件
• Codewarrior软件使用大赛中采用Codewarrior 3.1 for HCS12作为推荐的程序编译软件。 "CodeWarrior for S12" 是面向以HC12或S12为 CPU的单片机嵌入式应用开发的软件包。包括集 成开发环境IDE、处理器专家库、全芯片仿真、 可视化参数显示工具、项目工程管理器、C交叉 编译器、汇编器、链接器以及调试器。在 Codewarrior软件中可以使用汇编语言或C语言,以 及两种语言的混合编程。
第八步:选择有无浮点格式,根据自己情况而定, 本程序在此选择第二选项,点击“下一步”。
CodeWarrior新建工程
第九步:界面出现“选择存储模式?”,选择 Banked,点击下一步。
CodeWarrior新建工程
第十步:界面出现“选择硬件连接电缆型号” ,选择 第一项和最后一项,点击“完成”。
AD初始化实例
void ATD_Init(void) {
ATD0CTL1 = 0x20;//内部触发允许、A/D转换精度 ATD0CTL2 = 0x62;//禁止外部触发,快速清零,AD中断允许 ATD0CTL3 = 0x80;//数据对齐方式,采样序列长度 ATD0CTL4 = 0x92;//采样时间选择位,AD时钟选择 ATD0CTL5 = 0x30;//采样通道选择,单/多次采样选择位 ATD0DIEN = 0x00;//禁止数字输入 }

飞思卡尔MC9S12XS128各模块初始化程序--超详细注释

飞思卡尔MC9S12XS128各模块初始化程序--超详细注释

飞思卡尔MC9S12XS128各模块初始化程序--超详细注释//**************************************************************************// 武狂狼2014.5.1 整理// 新手入门的助手////***************************************************************************注释不详细/*********************************************************/函数名称:void ATD0_init(void)函数功能:ATD初始化入口参数:出口参数:/***********************************************************/void ATD0_init(void){ATD0DIEN=0x00; //使用模拟输入功能|=1;数字输入功能// ATD0CTL0=0x07; //Bit[3:0]WRAP[3:0] 反转通道选择位ATD0CTL1=0x40; // 12位精度,采样前不放电 Bit[7]ETRIGSEL(外部触发源选择位。

=0选择A/D通道AN[15:0] |=1选择 ERTIG3~0)和Bit[3:0]ETRIGCH[3:0]选择外部触发通道// Bit[6:5]SRES[1:0]A/D分辨率选择位。

Bit[4]SMP_DIS =0采样前不放电|=1采样前内部电容放电,这会增加2个A/D时钟周期的采样时间,有助于采样前进行开路检测ATD0CTL2=0x40; // 快速清零,禁止中断,禁止外部触发ATD0CTL3=0x90; // 右对齐,转换序列长度为2,非FIFOATD0CTL4=0x03; // 采样时间4个周期,PRS=31,F(ATDCLK)=F(BUS)/(2(PRS+1))// ATD0CTL5=0x30; //启动AD转换序列//:对每项数据采集时,用到哪个通道采样可在相应子函数内设置某一通道(见Sample_AD.c)while(!ATD0STAT2L_CCF0);/*********************************************************/函数名称:void PIT_init(void)函数功能:初始化PIT 设置精确定时时间(1s)入口参数:无出口参数:无说明:无/***********************************************************/void PIT_init(void){PITCFLMT=0x00; //禁止PIT模块Bit[7] PITE:PIT模块使能位,0禁用|1使能// Bit[6] PITSWAI:等待模式下PIT停止位,0等待模式下,PIT模块正常运行| 1等待模式下,PIT模块停止产生时钟信号,冻结PIT模块// Bit[5] PITFRZ: 冻结模式下PIT计数器冻结位。

飞思卡尔MC9S12XS128(定时器)ECT寄存器详解

飞思卡尔MC9S12XS128(定时器)ECT寄存器详解

1、定时器IC/OC功能选择寄存器TIOSIOS[7..0]IC/OC功能选择通道0 相应通道选择为输入捕捉(IC)1 相应通道选择为输出比较(OC)2、定时器比较强制寄存器 CFORCFOC[7..0]设置该寄存器某个FOCn位为1将导致在相应通道上立即产生一个输出比较动作,在初始化输出通道时候非常有用。

【说明】这个状态和正常状态下输出比较发生后,标志位未被置位后的情况相同。

3、输出比较7屏蔽寄存器 OC7MOC7M[7..0]OC7(即通道7的输出比较)具有特殊地位,它匹配时可以直接改变PT7个输出引脚的状态,并覆盖各个引脚原来的匹配动作结果,寄存器OC7M决定哪些通道将处于OC7的管理之下。

OC7M中的各位与PORTT口寄存器的各位一一对应。

当通过TIOS将某个通道设定为输出比较时,将OC7M中的相应位置1,对应的引脚就是输出状态,与DDR中的对应位的状态无关,但OC7Mn并不改变DDR相应位的状态。

【说明】OC7M具有更高的优先级,它优于通过TCTL1和TCTL2寄存器中的OMn和OLn设定的引脚动作,若OC7M中某个位置1,就会阻止相应引脚上由OM和OL设定的动作。

4、输出比较7数据寄存器 OC7DOC7D[7..0]OC7M对于其他OC输出引脚的管理限于将某个二进制值送到对应引脚,这个值保存在寄存器OC7D中的对应位中。

当OC7匹配成功后,若某个OC7Mn=1,则内部逻辑将OC7Dn送到对应引脚。

OC7D中的各位与PORTT口寄存器的各位一一对应。

当通道7比较成功时,如果OC7M中的某个位为1,OC7D中的对应位将被输出到PORTT的对应引脚。

【总结】通道7的输出比较(OC7)具有特殊的位置,在OC7Mn和OC7Dn两个寄存器设置以后,OC7成功输出后将会引起一系列的动作。

比如:OC7M0=1,则通道0处在OC7的管理下,在OC7成功后,系统会将OC7D0的逻辑数据(仅限0或者1)反应在PT0端口上。

飞思卡尔MC9S12XS128单片机中断优先级设置简易教程

飞思卡尔MC9S12XS128单片机中断优先级设置简易教程

本教程试图用最少的时间教你飞思卡尔XS128单片机的中断优先级设置方法和中断嵌套的使用,如果是新手请先学习中断的基本使用方法。

先来看看XS128 DataSheet 中介绍的相关知识,只翻译有用的:七个中断优先级每一个中断源都有一个可以设置的级别高优先级中断的可以嵌套低优先级中断复位后可屏蔽中断默认优先级为1同一优先级的中断同时触发时,高地址(中断号较小)的中断先响应注意:高地址中断只能优先响应,但不能嵌套同一优先级低地址的中断下面直接进入正题,看看怎么设置中断优先级:XS128中包括预留的中断一共有128个中断位,如果为每个中断都分配一个优先级寄存器的话会非常浪费资源,因此飞思卡尔公司想出了这样一种办法:把128个中断分为16个组,每组8个中断。

每次设置中断时,先把需要的组别告诉某个寄存器,再设置8个中断优先寄存器的某一个,这样只需9个寄存器即可完成中断的设置。

分组的规则是这样的:中断地址位7到位4相同的中断为一组,比如MC9SX128.h中这些中断的位7到位3都为D,他们就被分成了一组。

0~F正好16个组。

INT_CFADDR就是上面说到的用来设置组别的寄存器:我们需要设置某个组别的中断时,只要写入最后8位地址就行了,比如设置SCI0的中断优先级,就写入0xD0。

设置好组别之后,我们就要该组中相应的中断进行设置,设置中断的寄存器为这其实是一组寄存器,一共有8个,每个都代表中断组中的一个中断。

对应规则是这样的:中断地址的低四位除以2比如还是SCI0,低四位是6,除以二就是3,那么我们就需要设置INT_CFDATA3 往INT_CFDATAx中写入0~7就能设置相应的中断优先级了拿我本次比赛的程序来举个例子:我们的程序中需要3个中断:PIT0,PORTH,SCI0。

PIT0定时检测传感器数值,PORTH连接干簧管进行起跑线检测,SCI0接收上位机指令实现急停等功能。

因此中断优先级要SCI0>PORTH>PIT0。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

A/D转换模块详解1、A/D转换原理A/D转换的过程是模拟信号依次通过取样、保持和量化、编码几个过程后转换为数字格式。

a)取样与保持一般取样与保持过程是同时完成的,取样-保持电路的原理图如图16所示,由输入放大器A1、输出放大器A2、保持电容CH和电子开关S组成,要求 AV1* AV2= 1。

原理是:当开关S闭合时,电路处于取样阶段,电容器充电,由于 AV1 * AV2= 1,所以输出等于输入;当开关S断开时,由于A2输入阻抗较大而且开关理想,可认为CH没有放电回路,输出电压保持不变。

图16 取样-保持电路取样-保持以均匀间隔对模拟信号进行抽样,并且在每个抽样运算后在足够的时间内保持抽样值恒定,以保证输出值可以被A/D 转换器精确转换。

b)量化与编码量化的方法,一般有舍尾取整法和四舍五入法,过程是先取顶量化单位Δ,量化单位取值越小,量化误差的绝对值就越小,具体过程在这里就不做介绍了。

将量化后的结果用二进制码表示叫做编码。

2、A/D转换器的技术指标a)分辨率分辨率说明A/D转换器对输入信号的分辨能力,理论上,n位A/D转换器能区分的输入电压的最小值为满量程的1/2n 。

也就是说,在参考电压一定时,输出位数越多,量化单位就越小,分辨率就越高。

S12的ATD模块中,若输出设置为8位的话,那么转换器能区分的输入信号最小电压为19.53mV。

b)转换时间A/D转换器按其工作原理可以分为并联比较型(转换速度快ns级)、逐次逼近型(转换速度适中us级)、双积分型(速度慢抗干扰能力强)。

不同类型的转化的A/D转换器转换时间不尽相同,S12的ATD模块中,8位数字量转换时间仅有6us,10位数字量转换时间仅有7us。

S12内置了2组10位/8位的A/D模块:ATD0和ATD1,共有16个模拟量输入通道,属于逐次逼近型A/D转换器(这个转换过程与用天平称物的原理相似)。

1、功能结构图图17 A/D 模块功能结构图图17所示的是A/D 模块的功能结构,这个功能模块被虚线划分成为图示所示的虚线所隔离的三个部分:IP总线接口、转换模式控制/寄存器列表,自定义模拟量。

IP 总线接口负责该模块与总线的连接,实现A/D 模块和通用I/O 的目的,还起到分频的作用;转换模式控制寄存器列表中有控制该模块的所有的寄存器,执行左右对齐运行和连续扫描。

自定义模拟量负责实现模拟量到数字量的转换。

包括了执行一次简单转换所需的模拟量和数字量。

2、HCS12中A/D转化模块特点8/10 位精度;7 us, 10-位单次转换时间.;采样缓冲放大器;可编程采样时间;左/右对齐, 有符号/无符号结果数据;外部触发控制;转换完成中断;模拟输入8 通道复用;模拟/数字输入引脚复用;1到8转换序列长度;连续转换模式;多通道扫描方式。

ATD 模块有模拟量前端、模拟量转换、控制部分及结果存储等四部分组成。

其中模拟前端包括多路转换开关、采样缓冲器、放大器等,结果存储部分主要有8个16 位的存储器和反映工作状态的若干标志位。

A/D转换应用实例要让ATD 开始转换工作,必须经过以下三个步骤:1.将ADPU 置1,使ATD 启动;2.按照要求对转换位数、扫描方式、采样时间、时钟频率及标志检查等方式进行设置;3.发出启动命令;如果上电默认状态即能满足工作要求,那么只要将ADPU 置1,然后通过控制寄存器发出转换命令,即可实现转换。

程序描述:由通道ATD0进行单通道A/D转换,转换值在B口显示。

程序如下:程序一:#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */byte ad_value; //AD转换结果void Delay(int i) { //延时程序int j;for(;i>0;i--)for(j=500;j>0;j--);}/***---------------初始化程序---------------***/void InitBusClk(void) {CLKSEL=0X80; //PLLSEL 1 : Bus Clock=PLLCLK/2// 0 : Bus Clock=OSCCLK/2PLLCTL_PLLON=1; //开启PLLSYNR=0;REFDV=0X03; //OSCCLK=16MHz//PLLCLK=2*OSCCLK*[(1+SYNR)/(1+REFDV]=32/4=8MHzwhile(!(CRGFLG_LOCK==1)); //直到LOCK=1,when PLL is ready,退出循环CLKSEL_PLLSEL=1;//PLLSEL 1 : Bus Clock=PLLCLK/2=8MHz/2=4MHz// 0 : Bus Clock=OSCCLK/2=16M/2=8MHz}void InitAD(void){ATD0CTL2 = 0XC0; // 1100 0000 启动A/D,快速清除标志位// 无等待模式,外部触发禁止(bit2=0),中断禁止(bit1=0)ATD0CTL3 = 0X0C;// 0 0001 1 00 转换序列为1 、FIFO模式启动,冻结模式下继续转换ATD0CTL4 = 0XE1; // 1 11 00001 8位精度,16AD采样时间// 总线(1+1)*2 = 4 分频,AD时钟= 1MHz ATD0CTL5 = 0X27;// 0 0 1 0 0 111 右对齐,无符号,连续转换,单通道, 起始通道ATD7// DJM DSGN SCAN MULT 0 CC CB CA// DJM :1-Right justified 0-Left justified// DSGN:1-Signed data 0-Unsigned data// SCAN:1-Continuous 0-Single conversion// CC CB CA : Analog Input Channel Select CodeATD0DIEN = 0X00; // 数字输入disabled}/***---------------主程序---------------***/void main(void) {/* put your own code here */_DISABLE_COP(); // 关看门狗InitBusClk();InitAD();DDRB=0XFF; // 设PORTB为输出口PORTB=0x00;EnableInterrupts; // 开放总中断for(;;) {while(!ATD0STAT2L_CCF7); //等待转换结束,退出循环ad_value=(byte)ATD0DR7H;//左对齐,右对齐时转换结果都先存储在ATD0DRxH,后存储在ATD0DRxL.Delay(200); //延时PORTB=ad_value;//PORTB输出AD转换结果,并用8个LED发光二极管显示//_FEED_COP(); /* feeds the dog */} /* loop forever *//* please make sure that you never leave main */}程序二:(用指针实现AD转换)#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */byte AD_Value; //AD转换结果void Delay(int i) { //延时程序int j;for(;i>0;i--)for(j=500;j>0;j--);}/***---------------初始化程序---------------***/(初始化程序与上述相同)/***---------------读取AD转换结果---------------***/void AD_GetValue(word *AD_Value){*AD_Value=ATD0DR0;}void main(void) {/* put your own code here */_DISABLE_COP(); //关看门狗InitBusClk();InitAD();DDRB=0XFF; //设PORTB为输出口PORTB=0x00;EnableInterrupts;for(;;) {while(!ATD0STAT2L_CCF7); //等待转换结束,退出循环AD_GetValue(&AD_Value); //读取转换结果Delay(400);PORTB=AD_Value; //转换结果在B口显示_FEED_COP(); /* feeds the dog */} /* loop forever *//* please make sure that you never leave main */}程序三:(用中断实现AD转换)#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */#include <mc9s12xs128.h>byte AD_Data=0;//*void Delay(int i) {int j;for(;i>0;i--)for(j=500;j>0;j--);}//*//***---------------初始化程序---------------***/void InitBusClk(void) {CLKSEL=0X80; //PLLSEL 1 : Bus Clock=PLLCLK/2// 0 : Bus Clock=OSCCLK/2PLLCTL_PLLON=1; //开启PLLSYNR=0;REFDV=0X03; //OSCCLK=16MHz//PLLCLK=2*OSCCLK*[(1+SYNR)/(1+REFDV]=32/4=8MHz while(!(CRGFLG_LOCK==1)); //直到LOCK=1,when PLL is ready,退出循环CLKSEL_PLLSEL=1; //PLLSEL 1 : Bus Clock=PLLCLK/2=8MHz/2=4MHz// 0 : Bus Clock=OSCCLK/2=16M/2=8MHz }void InitAD(void){A TD0CTL2 = 0XC3;// 110 000 11 启动A/D,快速清除标志位,无等待模式,外部触发禁止(bit2=0) // 中断开放(bit1=1,bit0=1)// bit1 :A TD Sequence Complete Interrupt Enable// bit0 :A TD Sequence Complete Interrupt FlagA TD0CTL3 = 0X0C;// 0 0001 1 00 转换序列为1 、FIFO模式启动,冻结模式下继续转换A TD0CTL4 = 0XE1; // 1 11 00001 8位精度,16AD采样时间// 总线(1+1)*2 = 4 分频,AD时钟= 1MA TD0CTL5 = 0XA7;// 1010 0111 右对齐,无符号,连续转换,单通道, 起始通道A TD7A TD0DIEN = 0X00; // 数字输入disabled}/***---------------主程序---------------***/void main(void) {/* put your own code here */DisableInterrupts; //关中断InitBusClk();InitAD();DDRB=0XFF; //设B口为输出口PORTB=0X00;EnableInterrupts; //开中断for(;;){//while(!A TD0STA T2L_CCF7);PORTB=(byte)AD_Data; //B口显示转换结构}}/***---------------中断服务程序---------------***/#pragma CODE_SEG NON_BANKEDvoid interrupt 22 IntAD(void){ // AD转换的中断向量号为33DisableInterrupts; //关中断//while(!A TD0STA T2L_CCF7);AD_Data=A TD0DR0H; //读取AD转换结果EnableInterrupts; //开中断}#pragma CODE_SEG DEFAULT。

相关文档
最新文档