中北大学NORTHUNIVERSITYOFCHINA单片机实验报告9实验2定时器实验一、实验目的:1.学习8051内部计数器的使用和编程方法。2.进一步掌握中断处理程序的编写方法。二、实验设备:CPU挂箱、8051CPU模块三、实验原理:1、定时常数的确定定时器/计数器的输入脉冲周期与机器周期一样,为振荡频率的1/12。本实验中时钟频率为6.0MHZ,现要采用中断方法来实现0.5秒延时,要在定时器1中设置一个时间常数,使其每隔0.1秒产生一次中断,CPU响应中断后将R0中计数值减一,令R0=05H,即可实现0.5秒延时。时间常数可按下述方法确定:机器周期=12÷晶振频率=12/(6×10⁶)=2us设计数初值为X,则(216-X)×(2us=2×10-6s)=0.1s,可求得X=15535化为十六进制则X=3CAFH,故初始值为TH1=3CH,TL1=AFH2、初始化程序包括定时器初始化和中断系统初始化,主要是对IP、IE、TCON、TMOD的相应位进行正确的设置,并将时间常数送入定时器中。由于只有定时器中断,IP便不必设置。3、设计中断服务程序中断服务程序除了要完成计数减一工作外,还要将时间常数重新送入定时器中,为下一次中断做准备,同时控制发光二极管按要求顺序燃灭。四、实验题目由8051内部定时器0按方式1工作,即作为16位定时器使用,每隔相应的秒钟T1溢出中断一次。P1口的P1.0~P1.7分别接发光二极管的L1~L8。要求编写程序模拟一循环彩灯。彩灯变化花样可自行设计,本程序中的彩灯循环:第一种循环模式,从左到右将彩灯一一点亮;第二种循环模式,从右到左将彩灯一一点亮。中北大学NORTHUNIVERSITYOFCHINA单片机实验报告10五、实验原理图原理图六、实验步骤(一)软件设置(1)打开KeilC环境,界面如图1所示。(2)新建工程或打开工程文件:在主菜单上选“Project”项,在下拉列表中选择“NewProject”新建工程,浏览保存工程文件为扩展名为“.Uv2”的文件。或在下拉列表中选择“Openproject”打开已有的工程文件,如图2所示。图1图2(3)环境设置:新建工程文件后,在工具栏中选择如下图选项设置调试参数及运行环境,,或从主菜单“Project”项中选择“OptionsforTarget‘Target1’”,打开如图3设置窗口。在“Device”项下选择要仿真的芯片类型,如:Generic–8051。在“Target”项下的晶振设置中修改为硬件电路所用晶振频率,如:6MHz。选择合适存储模式。中北大学NORTHUNIVERSITYOFCHINA单片机实验报告11在“Output”项下如在CreatHEXFile选项前打勾,则在编译的同时生成可下载执行的HEX文件,用仿真芯片仿真时可以不进行此项设置。在“Debug”项下选择“Use:KeilMoniter-51Driver”使用硬件仿真。设置完成后如图4所示。图3图4(4)点击“Settings”按钮,进入串口选择及波特率设置窗口如图5所示。(5)选择合适的波特率及串口号。“SerialInterrupt”项不可选,把前面的勾打掉。点OK保存设置。(6)在“OptionforTarget‘Target1’”窗口中,点确定,退出环境设置。(7)新建文件:在主菜单的“File”下拉列表中选“New…”新建文件。编辑文件并保存文件。文件保存为扩展名为“.C”或“.ASM”的文件,如图6所示。图5图6(8)添加文件:在左边的“ProjectWindow”窗口中,用右键选取“SourceGroup1”,在弹出的列表中选择“AddFilestoGroup‘SourceGroup1”,弹出浏览窗口。如图7所示。(9)浏览添加编辑好的C或ASM文件。添加完毕点“Close”,关闭窗口,如图8所示。中北大学NORTHUNIVERSITYOFCHINA单片机实验报告12图7图8(10)这时发现添加的文件名已出现在“ProjectWindow”窗口中。双击刚添加的C或ASM文件。打开编辑文件窗口,如图9所示。(11)译链接:在“BuildBar”,,工具条中,选第二项编译当前文件,第三项为编译全部。编译完成,在下方“Output”窗口中出现编译结果,如图10所示。(12)仿真调试:点击调试按钮,或从主菜单选取调试“Start/StopDebguSessionCTRL+F5”(快捷键CTRL+F5),程序下载到仿真芯片中。窗口下方显示下载进度条。100%下载完成后出现如下窗口,如图11所示。(13)序仿真:运用运行“DebugBar”调试工具条,进行单步、进入、跳出、运行到光标、全速运行等,如图12所示。图9图10图11图12(14)全速运行后,程序不受控。如需再次单步调试,需点击调试工具停止按钮,停止调试。停止后,硬件复位仿真芯片,再次运行第7步。(二)硬件设置(1)将单片机仿真板安装到CPU挂箱上。中北大学NORTHUNIVERSITYOFCHINA单片机实验报告13(2)连接单片机仿真板与电脑的数据线。(3)连接CPU挂箱的电源线,并打开CPU挂箱的电源。(4)将单片机仿真板输出端口与COU挂箱上的LED灯的端口相连接(P1.0~P1.7分别接发光二极管L1~L8即可。)。(5)打开CPU挂箱的开关(三)程序框图用C语言编译的程序如下:////////////////////////版本信息//中北大学信息通信工程学院电气工程系;实验设备EL-MUL-111////////////////////////硬件安装说明//P1.0~P1.7接发光二极管L1~L8。////////////////////////调试方法//初次使用时按下debug按钮后按下run,重新烧写时先按下复位,然后再按debug最后按run////////////////////////功能说明//彩灯循环:第一种循环模式,从左到右将彩灯一一点亮;第二种循环模式,从右到左将彩灯一一点亮。//////////////////////#includereg52.h#defineuintunsignedint#defineucharunsignedcharucharnum,tt,temp,flag;ucharcodetable1[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};ucharcodetable2[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f};voidmain(){num=0;tt=0;TMOD=0x01;//设置定时器0为工作方式1TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//启动定时器0while(1);}voidtimer0()interrupt1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(flag!=1)中北大学NORTHUNIVERSITYOFCHINA单片机实验报告14生成的工程文件如下:###uVision2Project,(C)KeilSoftware###Donotmodify!Target(Target1),0x0000//Tools:'MCS-51'Group(SourceGroup1)File1,2,.\STARTUP.A51STARTUP.A51File1,1,.\test.ctest.cOptions1,0,0//Target'Target1'Device(AT89C51)Vendor(Atmel)Cpu(IRAM(0-0x7F)IROM(0-0xFFF)CLOCK(24000000))FlashUt()StupF(LIB\STARTUP.A51(Standard8051StartupCode))FlashDR()DevID(2976)Rgf(REGX51.H)Mem()C()A()RL()OH()DBC_IFX()DBC_CMS()DBC_AMS()DBC_LMS()UseEnv=0EnvBin()EnvInc()EnvLib()EnvReg(Atmel\)OrgReg(Atmel\)TgStat=16OutDir(.\)OutName(test)GenApp=1GenLib=0GenHex=0Debug=1Browse=1LstDir(.\)HexSel=0MG32K=0TGMORE=0RunUsr00RunUsr10BrunUsr00BrunUsr10CrunUsr00CrunUsr10SVCSIDMODEL5=0RTOS5=0ROMSZ5=2DHOLD5=0XHOLD5=0T51FL=80XT51FL=0CBANKS5=0XBANKS5=0RCB51{0,0,0,0,0,0,0,0,0}RXB51{0,0,0,0,0,0,0,0,0}OCM51{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}OCR51{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}IRO51{1,0,0,0,0,0,16,0,0}IRA51{0,0,0,0,0,128,0,0,0}XRA51{0,0,0,0,0,0,0,0,0}XRA512{0,0,0,0,0,0,0,0,0}IROM512{0,0,0,0,0,0,0,0,0}C51FL=21630224C51VA=0C51MSC()C51DEF()C51UDF()INCC5()AX51FL=4AX51MSC()AX51SET()AX51RST()INCA5()PropFld{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}IncBld=1AlwaysBuild=0GenAsm=0AsmAsm=0PublicsOnly=0中北大学NORTHUNIVERSITYOFCHINA单片机实验报告15七、实验结果图13实验结果GenAsm=0AsmAsm=0PublicsOnly=0StopCode=3CustArgs()LibMods()BankNo=65535LX51FL=292LX51OVL()LX51MSC()LX51DWN()LX51LFI()LX51ASN()LX51RES()LX51CCL()LX51UCL()LX51CSC()LX51UCS()LX51COB()LX51XDB()LX51PDB()LX51BIB()LX51DAB()LX51IDB()LX51PRC()LX51STK()LX51COS()LX51XDS()LX51BIS()LX51DAS()LX51IDS()OPTDL(S8051.DLL)()(DP51.DLL)(-p51)(S8051.DLL)()(TP51.DLL)(-p51)OPTDBG48125,-1,()()()()()()()()()()()()()()FLASH1{0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0}FLASH2()FLASH3()FLASH4()EndOpt中北大学NORTHUNIVERSITYOFCHINA单片机实验报告16八、实验总结通过此次实验,我学会学习8051内部计数器的使用和编程方法,学会了延时子程序的编写和使用。通过在实验室的不断摸索也了解了CPU挂箱和单片机仿真板的大部分功能,我认为交流对学习很重要.碰到不会的问题,通过与同学的交流很快解决了问题,这对我也起到了很大的帮助。