计数器实验五实验目的1、掌握8051单片机计数器的工作原理;2、掌握STC-ISP工具软件延时计算器的使用;3、了解看门狗定时器的工作原理。实验设备与文件、PC机、Stc89c52实验箱、USB线、stc89c52实验板原理图、杜邦线。地5358##585心8868838869174HC57312WE11P27/WELA8.8.8.8.8.8.8.8.吉RU58#8#区5668886883886974HC5731JRLA3数码管锁存器模块8位共阴极数码管图1原理图
1 实验五 计数器 一、 实验目的 1、掌握 8051 单片机计数器的工作原理; 2、掌握 STC-ISP 工具软件延时计算器的使用; 3、了解看门狗定时器的工作原理。 二、 实验设备与文件 PC 机、stc89c52 实验箱、USB 线、stc89c52 实验板原理图、杜邦线。 图 1 原理图
三、实验原理3.1计数器的原理计数器的原理和使用与定时器相同,请参考定时器的实验原理。在特殊功能寄存器TMOD中将C/T位设为1即使用定时器/计数器的计数器功能。D7D5D4D3D2DIDOD6C/TC/T89HTMODGATEMIMOGATEMIMOTI方式字段TO方式字段图2寄存器TMOD的格式C/T计数器模式和定时器模式选择位C/T=0,定时器模式,对系统时钟12分频后的脉冲进行计数。C/T=1,计数器模式,计数器对外部输入引脚TO(P3.4)或T1(P3.5)的外部脉冲(负跳变)计数。3.2软件延时的计算利用STC-ISP工具可自动计算出精确的软件延时,如图3:STC-ISP(V6.860)(销售电话:0513-55012928)官网:ww.STCMCUDATA.com(技术支持QQ:80003751)本软件定价:60.—单片机型号61088052引教uto范例程序波持室计算器定时器计算器软件过时计算器头文件 官方网站强串口号COK3一扫描随用于如下系列用系统频率 11.0592mHz100老秒STCocm/STCSO最低波持率2400最高皮特室15200-定时长度起胎地址8051指令集STC-11.团清徐代码线:中区打开程序文件0x000void Delay100ss 0//011.0592MX2D2000团清徐EEPRO线中区打开EPR文件unsigmd char i, j硬件选顶数机下载/8/F程序加宝后传输|ID1:190使能6T信速)模式降低探落器的放大增益I whi,thie (-):只有断电才可停止看门狗内部扩展同用ALE韩用作F4.5口回下次冷启自时,P1.0/11为0/0才可下载程序下次下用户程序时控用户EEPRON区生减C代码生成ASW代码夏制代码选择P1空白区域的填充值FF芯片型号STC89C52天于此芯尚的来费说明字节为全球唯—1D号新以代码室自学重复缩程下载/程停止重夏延时移检测CU选项注意/韩助国每次下载前都重新装载自标文件发布项目程库发布项目架欧联本机硬盘号提示音底功计数21寿零当目标文件变化时自动载并发送下就命令图3利用STC-ISP工具自动计算软件延时2
2 三、 实验原理 3.1 计数器的原理 计数器的原理和使用与定时器相同,请参考定时器的实验原理。在特殊功能 寄存器 TMOD 中将 C/T 位设为 1 即使用定时器/计数器的计数器功能。 图 2 寄存器 TMOD 的格式 C/T 计数器模式和定时器模式选择位 C/T=0,定时器模式,对系统时钟 12 分频后的脉冲进行计数。 C/T=1,计数器模式,计数器对外部输入引脚 T0(P3.4)或 T1(P3.5)的外 部脉冲(负跳变)计数。 3.2 软件延时的计算 利用 STC-ISP 工具可自动计算出精确的软件延时,如图 3: 图 3 利用 STC-ISP 工具自动计算软件延时
3.3看门狗定时器由于单片机的工作常常会受到来自外界电磁场的干扰,造成各种寄存器和内存的数据混乱,严重的会导致程序指针错误,取出错误的程序指令等,这样程序的正常运行会被打断,使得单片机控制的系统无法继续正常工作,发生不可预料的后果。为了防止这种错误,通常采用看门狗定时器。看门狗定时器(WDT),是一个定时器电路。如果启动了看门狗定时器,在单片机正常工作的时候,每隔一段时间需要将WDT清零,也叫喂狗操作,如果在规定的时间内没有清零WDT(这种情况一般在程序跑飞时发生),WDT定时器超时,会给出一个复位信号到单片机,使单片机复位,防止单片机程序跑飞、系统不受控制。在单片机重启后,可以进行开机自检处理,排查上次导致复位的错误。Stc89c52系列单片机内部集成了看门狗,可利用特殊功能寄存器WDTCONTR(寄存器地址Oxel),对内部的看门狗进行操作,如图4:bitB7B6B5B4B3B2B1BOSFRnameAddressEIH-上EN_WDTCLR_WDTIDLE_WDTPS1PSOWDT_CONTRname-PS2图4特殊功能寄存器WDTCONTR的格式WDTCONTR各位说明如下:(1) EN_WDT看门狗允许位,当设置为“1”时,看门狗启动。(2)CLR_WDT看门狗清“0”位,当设置为“1”时,看门狗将重新计数。硬件将自动清“0”此位。(3)IDLE_WDT看门狗“IDLE”模式位,当设置为“1”时,看门狗定时器在“空闲模式”计数,当清“0”该位时,看门狗定时器在“空闲模式”不计数。(4)PS2,PS1,PSO看门狗定时器预分频值看门狗溢出时间=(12×预分频值×32768)/晶振频率溢出时间的具体数值见表1,表2所示:表1看门狗定时器的溢出时间(晶振12MHz)看门狗溢出时间=(12xPre-scale×32768)/12000000=Pre-scalex393216/12000000Pre-scalePS1PSOWDToverflowTime@12MHzPS2预分频200065.5mS0014131.0mS0081262.1mS16011524.2mS32001.0485S10164-2.0971S101284.1943S-112568.3886S103
3 3.3 看门狗定时器 由于单片机的工作常常会受到来自外界电磁场的干扰,造成各种寄存器和内 存的数据混乱,严重的会导致程序指针错误,取出错误的程序指令等,这样程序 的正常运行会被打断,使得单片机控制的系统无法继续正常工作,发生不可预料 的后果。为了防止这种错误,通常采用看门狗定时器。 看门狗定时器(WDT),是一个定时器电路。如果启动了看门狗定时器,在 单片机正常工作的时候,每隔一段时间需要将 WDT 清零,也叫喂狗操作,如果 在规定的时间内没有清零 WDT(这种情况一般在程序跑飞时发生),WDT 定时器 超时,会给出一个复位信号到单片机,使单片机复位,防止单片机程序跑飞、系 统不受控制。在单片机重启后,可以进行开机自检处理,排查上次导致复位的错 误。 stc89c52 系列单片机内部集成了看门狗,可利用特殊功能寄存器 WDT_CONTR (寄存器地址 0xe1),对内部的看门狗进行操作,如图 4: 图 4 特殊功能寄存器 WDT_CONTR 的格式 WDT_CONTR 各位说明如下: (1)EN_WDT 看门狗允许位,当设置为“1”时,看门狗启动。 (2)CLR_WDT 看门狗清“0”位,当设置为“1”时,看门狗将重新计数。硬件将自动清“0” 此位。 (3)IDLE_WDT 看门狗“IDLE”模式位,当设置为“1”时,看门狗定时器在“空闲模式” 计数,当清“0”该位时,看门狗定时器在“空闲模式”不计数。 (4)PS2,PS1,PS0 看门狗定时器预分频值 看门狗溢出时间 = (12×预分频值×32768)/晶振频率 溢出时间的具体数值见表 1,表 2 所示: 表 1 看门狗定时器的溢出时间(晶振 12MHz)
表2看门狗定时器的溢出时间(晶振11.0592MHz)看门狗溢出时间=(12xPre-scalex32768)/11059200=Pre-scalex393216/11059200WDToverflowTimeLPS2PS1PSOPre-scale@11.0592MHz200071.1ms0041V142.2mSAr8010284.4mS01611568.8mS32001.1377S1101642.2755S0111284.5511S1112569.1022S四、实验内容及步骤:内容与要求4.11、利用keil4软件搭建好实验环境;2、利用P1.0输出周期为100ms的方波,时间间隔用定时器/计数器0产生(实验板上晶振为11.0592MHz):3、将定时器/计数器1设置为计数器,记录P1.0脉冲的次数,利用数码管显示计数值;4、实验参考程序中启动了看门狗定时器,但是没有进行清零看门狗的操作单片机会自动重启,请在合适的时间间隔内(WDT溢出之前),添加对WDT的清零操作,使程序正常运行。4.2连线说明需要用一根杜邦线把P1.0接到P3.5。P1.0输出脉冲,定时器/计数器1的输入引脚P3.5对脉冲进行计数。断开P1.0和P3.5的连接数码管计数停止,恢复连接继续计数。A
4 表 2 看门狗定时器的溢出时间(晶振 11.0592MHz) 四、 实验内容及步骤: 4.1 内容与要求 1、 利用 keil4 软件搭建好实验环境; 2、 利用 P1.0 输出周期为 100ms 的方波,时间间隔用定时器/计数器 0 产生 (实验板上晶振为 11.0592MHz); 3、 将定时器/计数器 1 设置为计数器,记录 P1.0 脉冲的次数,利用数码管显 示计数值; 4、 实验参考程序中启动了看门狗定时器,但是没有进行清零看门狗的操作, 单片机会自动重启,请在合适的时间间隔内(WDT 溢出之前),添加对 WDT 的清零操作,使程序正常运行。 4.2 连线说明 需要用一根杜邦线把 P1.0 接到 P3.5。P1.0 输出脉冲,定时器/计数器 1 的 输入引脚 P3.5 对脉冲进行计数。断开 P1.0 和 P3.5 的连接数码管计数停止,恢 复连接继续计数
五、实验参考程序:#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit we = P2^7;//数码管位选锁存器接口sbit du = P26;1数码管位选锁存器接口sbit LEDI = P1^0,//LED1接口sfrWDT_CONTR=0xel;//看门狗定时器特殊功能寄存器1/数码管段选表uchar code leddata[]={1"0"0x3F,I"1"0x06,1"2"0x5B,1"3"0x4F,1"4*0x66,1"5"0x6D,1"6"0x7D,1"7"0x07,1"8"0x7F,0x6F,1/"9"I"A"0x77,0x7C,"B"I"C"0x39,I"D"0x5E,I"E"0x79,I"F"0x71,I"H"0x76,I"L"0x38,0x37,I/"n"I"u"0x3E,I"p"0x73,0x5C,1"0""_"0x40,0x00,1/熄灭1/自定义0x001;5
5 五、 实验参考程序: #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit we = P2^7; //数码管位选锁存器接口 sbit du = P2^6; //数码管位选锁存器接口 sbit LED1 = P1^0; //LED1 接口 sfr WDT_CONTR = 0xe1;//看门狗定时器特殊功能寄存器 //数码管段选表 uchar code leddata[]={ 0x3F, //"0" 0x06, //"1" 0x5B, //"2" 0x4F, //"3" 0x66, //"4" 0x6D, //"5" 0x7D, //"6" 0x07, //"7" 0x7F, //"8" 0x6F, //"9" 0x77, //"A" 0x7C, //"B" 0x39, //"C" 0x5E, //"D" 0x79, //"E" 0x71, //"F" 0x76, //"H" 0x38, //"L" 0x37, //"n" 0x3E, //"u" 0x73, //"P" 0x5C, //"o" 0x40, //"-" 0x00, //熄灭 0x00 //自定义 };