交大陈连坤老师单片机实验报告侧周期.docx
- 文档编号:728056
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:12
- 大小:322.52KB
交大陈连坤老师单片机实验报告侧周期.docx
《交大陈连坤老师单片机实验报告侧周期.docx》由会员分享,可在线阅读,更多相关《交大陈连坤老师单片机实验报告侧周期.docx(12页珍藏版)》请在冰点文库上搜索。
交大陈连坤老师单片机实验报告侧周期
单片机实验报告
——测周期
一、实验内容:
二、实验目的:
三、实验环境:
WindowsXP操作系统,keiluvision4软件。
四、实验过程:
1.建立新的工程cezhou1。
打开uvision4,在project的下拉菜单中选newuvisionproject建立新的工程,命名cezhou1,存储在电脑的相应文档中,在cpu的选择中选取80/87c52。
2.新建文件
(1)main.c:
主程序,将文件命名为main.c,并加入到刚刚建好的工程中。
(2)uart.c串行口初始化程序
将两个建好的c源程序加载进group
加载成功
3.将程序写入main.c和uart.c中,并点击编译。
程序编译成功
4.编译无误后,点击
进行软件仿真。
5.建立按钮。
在DEBUG中选择functioneditor一项进入,将程序代码输入窗口中,然后点击SAVE,保存为.INI的文件。
并点compile,如果操作正确会出现所编辑的按钮。
进入编辑按钮
输入代码
保存为INI的文件
出现所编辑的按钮
6.退出DEBUG,点击
,在DEBUG中
(1)将晶振的频率改为11.0592MHz。
(2)加入刚刚所编辑好的按钮BUTTON.INI。
再次进入DEBUG后,按钮便直接显示出来了。
7、在逻辑分析仪中加入输入信号和输出信号。
(1)加入输入信号port1.1。
8、点击run进行全速运行,点击按钮,观察逻辑分析仪的波形,并进行测量。
测量输入信号:
从图中读出,频率为99.48HZ
从图中读出,频率为9.95HZ
9、串行口输出。
100HZ
10HZ
五、实验代码分析
(一)文件main.c分析
1、#include
标准8032器件描述。
#include
由于后面要用到printf所以需要此头文件
2、#defineSYSCLK11059200:
由于需要用到串行口,所以时钟频率
应选择11.0592M
3、unsignedchardataTMR2_COUNTER:
定义此寄存器将在测量时间内的定时器2的溢出次数几率,由于溢出次数不会太多,又因为单片机的内存较少,应该省着用,所以选择char(8位)即可。
unsignedintdataRCAP2_BAK:
定义此寄存器将第一次捕捉到的数值放入寄存器中保留,然后和新测出来的相比较,得出周期。
由于此数为16位的,所以需要定义为int整型。
4、主函数main
Uart_Init();调用串行口初始化函数
T2CON|=5;
对定时器2进行设置:
根据上图为00000101,即允许中断,并选择捕捉功能。
ET2=1;打开定时器2中断允许
EA=1;打开总的中断允许
START_EN=1;将一次测量完成后的标志位=1
while
(1)
{staticfloatdataFREQ1;
if(START_EN)判断一次测量是否结束,若结束了,进入
{if(FREQ1-FREQ!
=0)判断新的测量结果是否与原来的相同,
相同则直接跳出,不相同输出新的周期
{FREQ1=FREQ;
printf("%f\n",FREQ1)}
START_EN=0;输出结束后,将标志位=0,等待进入下一
次测量
start();}}进行下一次测量
5、start()函数分析:
此函数进行初始化。
BEGIN=1;
TMR2_COUNTER=0;
FREQ=SYSCLK;根据测量周期的原理,通过在测量信号一个周期
内参考信号脉冲的个数进行测量,所以将时钟频
率/12作为参考脉冲
FREQ=FREQ/12;
TMR2=0;//BIXUDE
EXF2=0;将定时器2溢出标志为=0,即测量前清零
EXEN2=1;允许捕捉
TR2=1;打开定时器2
6、定时器2中断服务程序
定时器2有两个标志位=1后可以进入中断服务程序,所以进入程序后需要判断是哪一个标志位=1,同时需要软件清零标志位。
if(TF2)如果溢出,进入,软件清零标志位,寄存器+1
{TF2=0;
TMR2_COUNTER++;}
if(EXF2)如果是捕捉,进入,计算测量结果
{EXF2=0;软件清零标志位
EA=0;关闭中断允许(为了尽量减少误差)
if(BEGIN)根据捕捉的原理,要进行两次捕捉,其差值为所测,
所以要设立BEGIN标志位判断是第一次进入还是第
二次
{BEGIN=0;
RCAP2_BAK=RCAP2;将第一次捕捉到的数放入RCAP2_BAK
TMR2_COUNTER=0;}将溢出次数的寄存器清零,重新计
else
{EXEN2=0;第二次进入后,将捕捉功能关闭,进行计算
TR2=0;关闭定时器2,减小误差
FREQ=FREQ/(TMR2_COUNTER*65536+RCAP2-RCAP2_BAK);
根据公式可以计算出频率
START_EN=1;}
EA=1;}
(二)按键程序分析
definebutton"P1.1100hz","POUT()"
definebutton"P1.110hz","POUT1()"
definecharstop1由于软件中不支持递归,所以需要设置此标志
definecharstop2位进行按键之间的切换
signalvoidPOUT()
{STOP1=1;
STOP2=0;
while(STOP1)判断,如果按下下一个按键,由于stop1=0
所以退出此按键程序
{PORT1&=~0x02;对P1.1=0;
swatch(0.005);延时0.005s
PORT1|=0x02;对P1.1=1
swatch(0.005);}延时0.005s
return;}
后面第二个按键的程序童第一个相同,不再在此赘述。
六实验总结
1、通过此次实验,我掌握了如何应用定时器2的定时功能和捕捉功能。
对于定时器2的捕捉功能和定时功能的使用,为我以后利用单片机解决问题打下了良好的基础。
2、在此次实验中,大部分的程序是没有什么问题的,但是总是在一些细节上出现疏忽、马虎,以导致程序的结果总是出现问题。
陈老师教育我,只有将细节用好了,才是真正的掌握,我谨记在心,我更明白,不仅仅在学习单片机这门课上,在以后的其他各个方面都要照此去做。
最后,感谢陈老师的教育和指导,谢谢。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交大 陈连坤 老师 单片机 实验 报告 周期