- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
交大单片机实验3(1khz分频)----陈连坤老师单片机课
单片机实验报告
——1KHz分频10分频
一、实验内容:
实现对1KHz信号的十分频
二、实验目的:
学习并掌握利用51内核单片机的定时器/计数器0(1)的计数功能实现对外部信号的分频。
三、实验环境:
WindowsXP操作系统,keil uvision4软件。
四、实验过程:
建立新的工程fenpin10。打开uvision4,在project的下拉菜单中选 new uvision project 建立新 的工程,命名fenpin10,存储在电脑的相应文档中,在cpu的选择中选取80/87c52。
新建文件
main.c:主程序,将文件命名为main.c,并加入到刚刚建好的工程中。
将程序写入main.c中,并点击编译。
编译无误后,点击进行软件仿真。
建立按钮。
在DEBUG中选择function editor一项进入,将程序代码输入窗口中,然后点击SAVE,保存为.INI的文件。并点compile,如果操作正确会出现所编辑的按钮。
进入编辑按钮
输入代码
保存为INI的文件
出现所编辑的按钮
退出DEBUG,点击,在DEBUG中
将晶振的频率改为12.0 MHz。
(2)加入刚刚所编辑好的按钮BUTTON.INI。
再次进入DEBUG后,按钮便直接显示出来了。
7、在逻辑分析仪中加入输入信号和输出信号。
(1)加入输入信号port3.5。
加入输出信号P1.0
8、点击run进行全速运行,点击按钮,观察逻辑分析仪的波形,并进行测量。
测量输入信号:
可以看出:约为1KHZ
测量输出信号:
可以看出:信号约为100HZ。
由以上两图可以看出,输入一个1KHZ的信号,输出信号为100HZ,即单片机实现了对1KHZ的10分频。
五、实验代码分析
(一)文件main.c分析
1、#include reg52.h:
标准8032器件描述。
2、sbit P1_0 = P1^0:
定义输出引脚
3、unsigned int data f_div = 10:
定义分频系数。在前面定义可以方便以后改动,使得程序使用起来更加灵活方便。
4、void TIM1_INIT (unsigned int div):
声明定时器1的初始化函数。其中形参为需要的分频系数。
5、main函数。
TIM1_INIT (f_div);
EA = 1;
while (1);
调用定时器1的初始化函数,由于定时器1的初始化只需要进行一次即可,所以将调用初始化函数放在主函数中。调用之后,通过while(1)进行等待,等待外部信号产生下降沿后进入定时器中断服务程序。
6、对定时器1进行初始化函数。
(1) TMOD |= 0x60;
由TMOD的功能表可以得出,定时器1:工作在计数器功能;工作模式为模式2.
又因为TMOD的SFR地址为OX89,所以不能够进行位寻址,只能够通过或的方式进行赋值。
必须通过或的方式进行赋值:因为只改变需要改变的位,而不影响其他的位,这样可以方便合作编程。
(2)TH1 = -(div/2);
TL1 = TH0;
根据题目要求为10分频,即每来5个脉冲变一次电平,所以初值的选择为-(div/2);又因为模式2为8位自动重装模式,所以TH1=TL1。
(3)TR1 = 1;打开定时器1。
ET1 = 1;开放所有中断允许位。
7、定时器1的中断服务程序。
void tmr1_ISR(void) interrupt 3
{ P1_0 =~P1_0;}
(1)中断入口:
通过查表5-1可以得到外部定时器1的中断号为3,向量地址为001BH。
(2)由于定时器1是硬件自动清除中断标志位,所以不需要进行软件清除。
(3)P1_0 =~P1_0:进入中断后,需要完成将输出电平翻转。
(二)按键程序分析
端口的设定。
PORT3 = ~0x20;
使P3口相与,只将P3.5口改为0,而其他不变。
PORT3 |= 0x20;;
使P3口相或,只将P3.5口改为1,而其他不变。
延迟时间
swatch (0.0005);延时0.5ms
由于输入信号为1KHZ的周期函数,所以通过while(1)使得信号为周期信号。
六 实验总结
通过此次实验我对定时器的应用有了进一步的理解,知道应该如何进行定时器的设定,如何通过按键对外输入信号进行仿真等等。
文档评论(0)