欢迎来到天天文库
浏览记录
ID:45616176
大小:71.58 KB
页数:19页
时间:2019-11-15
《陵阳单片机实验指导书》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验一:定时器使用及中断处理【实验目的】1.通过实验熟悉定时器TimerA/B的工作原理。2.掌握预置数单元P_TimcrA/B_Data和定时控制单元P_TimerA/B_Ctr1的设置方法。3.掌握定时器TimerA/B的编程方法。【实验设备】1.装有u,nspIDE仿真环境的PC机一台。2.卩'nSP™十六位单片机开发板一套。【实验要求】1.编程要求:编写一个C语言程序。2.实现功能:设计程序使一个LED发光管以1秒为周期闪烁,即发光管每0.5秒点亮或熄灭一次。3.实验现象:计数初值不同、时钟源不同
2、,发光二极管的亮灭状态变化就不同。【实验原理】分析题目要求,主要涉及两方面的操作,即控制LED发光管的亮灭以及定时().3秒。对于LED发光管,只用一个10就可以控制了(例如使用IOA0):而对于0.5秒定时,我们可以利用TimerA定时器轻易地实现,也可以采用2Hz吋基中断实现。首先设置P_TimerA_Ctrl寄存器。当P_TimerA_Ctrl设置为0x0032时,定时器的计数频率将被设置为32768Hzo也就是说,CPU每1/32768秒向TimerA发出一次计数信号。我们需要定时0.5秒,也就是
3、每次要等CPU发出0.3/(1/32768)=16384个计数信号之示对LED发光管进行一次点亮或熄灭操作。怎样才能知道CPU己经发出了16384个计数信号?大体上有两种做法:方法一:给定吋器一个初始计数值0,开始定吋后,程序不断查询P_TimerA_Data的值,当P_TimerA_Data达至lj16384时,表示0.5秒已经到了,再通过程序把P_TimerA_Data的值恢复为0,进彳亍卜-一轮定时。这种方法比较简洁易懂,但缺点是明显的:程序需要不停地判断计数值是否达到了9830,一方曲难以“集屮精
4、力”完成其他工作(木例题只需完成一项工作,因此这一点在木例中体现得并不明显),另一方面也浪费了大量的CPU时间。方法二:少方法一和比,方法二的效率将大大提高,但是婆利用“中断”了。定时0.5s釆用哪个吋基信号比较方便呢?SPCE061A单片机时基信号频率丰富,有2Hz、4Hz、8Hz、16Hz>32Hz、64Hz、128Hz、256Hz、512Hz、102411、2048Hz、4096Hz等多种频率。我们可以很明显的看出2Hz时基信号中断是最方便的。只要触发2Hz的时基信号屮断,就可以达到0.5s的定时目
5、的。【程序流程图】定时器实现方法流程如图所示,中断实现方法流程图略。【实验步骤】1.将nSP™IDE打开后,建立一个新工程。2.编写程序代码。3.编译程序,观察结果。4.修改定时器、屮断参数。5.编译程序,观察结果。【程序范例】根据上而方法一的程序流程,用C语言编写程序如下:#defineP_TimerA_Data(unsignedint*)0x700A#dcfincP_TimcrA_Ctrl(unsignedint*)0x700B#defineP_IOA_Data(unsignedint*)0x7000
6、#defineP_IOA_Dir(unsignedint*)0x7002#defineP_IOA_Allrib(unsignedint*)0x7003#defineP_Watchdog_Clear(unsignedint*)0x7012main(){intLED_Flag=0;//LED灯亮灭标志*P_IOA_Dir=0x0001;〃设置IOAO为同相输出*PIOAAttrib=0x0001;*PIOAData=0x0000;//LED初始状态为熄火*P_TimerA_Ctrl=0x0032;〃计数频率3
7、2768Hz*P_TimerA_Data=0;〃计数器初值设为0while(1){if(*P_TimerA_Data>=16384)//计数达到16384{*P_TimerA_Data=0;〃计数清0if(LED_Flag==0)〃如果LED的状态是熄火的{*P_IOA_Data=0x0001;〃点亮LEDLED_Flag=1;〃改变状态标志}else〃如果LED的状态是点亮的{*P_IOA_Data=0x0000;〃熄灭LEDLED_Flag=0;〃改变状态标志}}*P_Watchdog_Clear=0
8、x0001;〃淸看门狗}}根据上面方法二的程序流程,用C语言编写程序如下:^include“SPCE061V004.H”#include“tmSPMACRO.h”图1、定时器定时实现LED闪亮流程main(){INT_OFF();*P_IOA_Dir二OxOOFF;*PTOAAttrib二OxOOFF;*P_IOA_Data=OxOOOO;INT_Ctri=C_IRQ5_2Hz;//Setupinterrupt1NT-1RQO
此文档下载收益归作者所有