单片机模块培训

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

单片机各个模块编程——培训讲师:任钢课程大纲RTC模块普通端口操作ADC模块TPM模块RTC模块(DZ60系列)1-1简介RTC模块包括一个8位计数器、一个8位比较器、几个二进制和十进制预分频器、三个时钟源和一个可编程定期中断。该模块可用于时刻、日历或任何任务调度功能。此外,它可以从低功率模式中提供周期性叫醒服务而不需要外部组件。MC9S08DZ60系列的所有器件都带有RTC。1-2功能RTC模块的功能包括:•8位向上计数器—8位模数匹配限制—匹配时软件可控制的定期中断•三个软件可选时钟源,向预分频器输入可选的二进制和十进制分频器值—1-kHz的内部低功率振荡器(LPO)—外部时钟(ERCLK)—32-kHz内部时钟(IRCLK)1-2RTC模块结构图1-3寄存器定义RTC包括一个状态和控制寄存器、一个8位计数器寄存器和一个8位模数寄存器。1-3-1RTC状态和控制寄存器(RTCSC)RTCSC包含实时中断状态标记(RTIF)、时钟选择位(RTCLKS)、实时中断启动位(RTIE)和预分频器选择位(RTCPS)。RTC预分频除数1-3-2RTC计数寄存器(RTCCNT)1-3-3RTC模数寄存器(RTCMOD)RTC模数寄存器(RTCMOD)允许将比较值设置为从0x00到0xFF的任何值。当计数器处于有效状态时,计数器以所选速率递增,直到计数与模数值匹配。当这些值匹配时,计数器复位为0x00并继续计数。任何时候发生匹配时,实时中断标记(RTIF)会被设置。该标记在从模数值过渡为0x00时设置。写入RTCMOD将使预分频器和RTCCNT计数器复位为0x00。RTC允许在设置RTIF时生成中断。要使能实时中断,在RTCSC中设置实时中断使能位(RTIE)。向RTIF写入1可以清除RTIF。1-4功能描述1-5初始化/应用信息//-----------------------------------------------------------------------//函数名:Init_RTC//-----------------------------------------------------------------------//功能:RTC模块初始化配置10ms中断//参数:无//返回值:无//-----------------------------------------------------------------------voidInit_RTC(void){RTCMOD=0x09;//StoregivenvaluetothemoduloregisterRTCSC=0x98;//Clearinterruptflag/enableinterrupt//choose1KHzLPOforclocksourceandprscale1}//-----------------------------------------------------------------------//函数名:Rtc_Fun//-----------------------------------------------------------------------//功能:RTC中断函数-10ms//参数:无//返回值:无//-----------------------------------------------------------------------#pragmaTRAP_PROCinterrupt25voidRtc_Fun(void){RTCSC_RTIF=1;//清除RTIF。Save_Flag=1;}RTC模块(S12系列)//-----------------------------------------------------------------------//函数名:Init_REALTIME//-----------------------------------------------------------------------//功能:定时器模块初始化配置//参数:无//返回值:无//-----------------------------------------------------------------------voidInit_REALTIME(void){RTICTL=0x49;//---10.24ms---8MHz(SeeSheetS12CRGV4.PDF'sP23)//COPCTL=0x07;//---65.536ms---8MHZCRGINT=0x80;//---EnableRealTimeInterrupt(RTI)}//-----------------------------------------------------------------------//函数名:REALTIME_FUN//-----------------------------------------------------------------------//功能:10mS定时器中断处理函数//参数:无//返回值:无//-----------------------------------------------------------------------#pragmaCODE_SEG__NEAR_SEGNON_BANKEDinterrupt7voidREALTIME_FUN(void)//---10.24ms{CRGFLG=0x80;Time_Count++;Time10mS_Flag=1;}普通端口操作端口数据寄存器:PTxD(0:输出0;1:输出1)端口数据方向寄存器:PTxDD(0:输入;1:输出)端口上拉使能寄存器:PTxPE(0:端口位n内部上拉/下拉器件被禁止。1:端口位n内部上拉/下拉器件使能。)端口斜率使能寄存器:PTxSE(0:斜率输出禁止;1:斜率输出使能)端口驱动强度选择寄存器:PTxDS(0:低输出驱动强度;1:高输出驱动强度)应用实例:1.初始化端口2.按键扫描(结合RTC去抖动)3.跑马灯(结合RTC)ADC模块(DZ60系列)3-1特性ADC模块的特性包括:*具有12位分辨率的线性逐次逼近算法;*高达28个模拟输入;*12、10或或8位右对齐输出格式;*单次转换或连续转换(单转换后自动返回空闲状态);*采样时间和转换速度/功率可配置;*转换完成标志和中断;*最多可选择4个输入时钟源;*在等待或STOP3模式下实现了低噪音运行;*异步时钟源实现了低噪音运行;*可选的异步硬件转换触发;*与小于、大于或等于可编程值自动比较的中断;3-2结构图3-3外部信号描述ADC模块最多可支持28个独立模拟输入。它还需要4个电源/参考/接地连接。3-4寄存器定义写入ADCSC1会中断当前转换,并发起一个新转换(如果ADCH位等于全1以外的值)。3-5功能描述复位期间或当ADCH位都高时,ADC模块禁止。当已经完成当前转换,而下一次转换还未发起时,模块进入空闲状态。空闲时,模块处于最低功耗状态。ADC可以对软件选择的任意通道实施模数转换。在12位和10位模式中,所选的通道电压通过逐次逼近算法被转换成12位数字结果。在8位模式中,所选的通道电压通过逐次逼近算法被转换成9位数字结果。转换完成后,结果保存在数据寄存器(ADCRH和ADCRL)中。在10位模式中,结果被圆整到10位并保存在数据寄存器(ADCRH和ADCRL)中。在8位模式中,结果被圆整到8位并保存在ADCRL中。然后设置转换完成标记(COCO),如果已经使能了转换完成中断(AIEN=1),则触发中断。ADC模块能够自动地把转换结果与比较寄存器的内容进行比较。通过设置ACFE位并结合任意一种转换模式和配置一起运行,就使能了比较功能。3-6ADC初始化voidInit_ATD(void){ADCSC1=07|//转换完成标志,只读06|//转换完成中断使能:1,使能;0,禁止05|//连续转换使能:1:使能;0,单次转换(硬件设置ADHWT)14|/**********bit4-bit0***********/13|/*00000:AD0|11101:Vrefh*/12|/*00001:AD1|11110:Vrefl*/11|/*...|11111:禁止*/10;/*11011:AD27|*/ADCSC2=07|//0:AD转换空闲;1:正在转换06|//触发类型选择:0软件;1,硬件05|//比较功能:0,禁忌;1,使能04|//0,小于输入电平;1,高于或等于输入电平03|/******************************/02|/*此4位必须为0*/01|/**/00;/******************************/ADCCFG=07|//低电压选择:0,高速;1,低电压06|/*|分频|00:1分频01:2分频*/05|/*|系数|10:4分频11:8分频*/04|//0,短采样时间;1,长采样时间13|/*|转换|00:8位模式*/02|/*|模式|10:10位模式*/01|/*输入时间选择*/10;/*00:总线时钟;01总线2分频;10:ATLCK;11:ADACK*/APCTL1=07|//0:IO;1:AD706|//0:IO;1:AD605|//0:IO;1:AD504|//0:IO;1:AD403|//0:IO;1:AD312|//0:IO;1:AD211|//0:IO;1:AD110;//0:IO;1:AD0APCTL2=07|//0:IO;1:AD1506|//0:IO;1:AD1405|//0:IO;1:AD1304|//0:IO;1:AD1203|//0:IO;1:AD1102|//0:IO;1:AD1001|//0:IO;1:AD900;//0:IO;1:AD8APCTL3=07|//0:IO;1:AD2306|//0:IO;1:AD2205|//0:IO;1:AD2104|//0:IO;1:AD2003|//0:IO;1:AD1902|//0:IO;1:AD1801|//0:IO;1:AD1700;//0:IO;1:AD16}uintATD_Filter(uintATDchanel){unsignedintad_max,ad_min,ad_value,ad_sum;unsignedinti;ad_min=0xffff;ad_max=0;ad_sum=0;for(i=0;i6;i++){ADCSC1=ATDchanel;//开始转换while((ADCSC1&0x80)==0);//等待转换完成ad_value=ADCR;if(ad_valuead_max)ad_max=ad_value;//滤波if(ad_valuead_min)ad_min=ad_value;ad_sum+=ad_value;}ad_sum=ad_sum-ad_max-ad_min;ad_value=ad_sum/4;//求均值returnad_value;}A/D转换后的软件滤波实现从理论上讲单片机采集的信号就是需要的量化信号。但是由于存在电路的相互干扰、电源噪声干扰和电磁干扰,模拟输入信号上会叠加周期或者非周期的干扰信号,并会被附加到量化值中,给信号带来一定的恶化。考虑到数据采集的实时性和安全性,有时需要对采集的数据进行软处理,以尽量减少干扰信号的影响,这一过程称为数据采集滤波。限幅滤波法(程序判断滤波法)(1)根据经验判断,确定两次采样允许的最大偏差(设为A);(2)每次检测到新值时判断,如果本次值与上次值之差≤A,则本次值有效;如果本次值与上次值之差A,则

1 / 70
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功