实验七 NE555脉冲发生器实验(定时/计数器)
一、实验目的
1.熟悉实验软件和硬件,进行正确的接线;
2.1602显示脉冲频率,调节电位器可改变频率。
二、实验软硬件
1.Keil uVision4
2.PZISP自动下载软件
3.HC6800S开发板
三、实验原理
实验界面及跳线帽位置
NE555是一种应用特别广泛作用很大的的集成电路,属于小规模集成电路,在很多电子产品中都有应用。
NE555的作用是用内部的定时器来构成时基电路,给其他的电路提供时序脉冲。其他HA17555、IM555、CA555分属不同的公司生产的产品。内部结构和工作原理都相同。
NE555的内部结构可等效成23个晶体三极管.17个电阻.两个二极管.组成了比较器.RS触发器.等多组单元电路.特别是由三只精度较高5k电阻构成了一个电阻分压器.为上.下比较器提供基准电压.所以称之为555. NE555属于CMOS工艺制造。
NE555引脚图
1 地 GND 2 触发
3 输出 4 复位
5 控制电压 6 门限(阈值)
7 放电 8 电源电压Vcc
555计数器硬件图
由555定时器和外接元件R1、R2、C构成多谐振荡器,脚2与脚6直接相连。电路没有稳态,仅存在两个暂稳态,电路亦不需要外接触发信号,利用电源通过R1、R2向C充电,以及C通过R2向放电端Dc放电,使电路产生振荡。电容C在2/3Vcc和1/3Vcc之间充电和放电,从而在输出端得到一系列的矩形波,对应的波形如图所示。
555计数器原理图
四、软件流程图
NE555脉冲发生器实验软件流程图
五、实验代码
1.#include<reg51.h>
2.#include"lcd.h"
3.
4.#define uchar unsigned char
5.#define uint unsigned int
6.#define ulong unsigned long
7.uchar code EN_CHAR1[16]={" CYMOMETER "};
8.uchar code EN_CHAR2[16]={"FREQ: HZ"};
9.ulong Freq,TimeCount;;
10.void main()
11.{
12. uchar i, freqValue[6];
13. LcdInit();
14. TMOD=0x51;
15. //设置定时器晶振为12MHZ时定时50ms
16. TH0=0x3C;
17. TL0=0xB0;
18. //打开中断
19. ET0=1;ET1=1;EA=1;
20. //打开定时器
21. TR0=1;TR1=1;
22. for(i=0;i<16;i++)//第一行显示
23. {
24. LcdWriteData(EN_CHAR1[i]);
25. }
26. LcdWriteCom(0xc0);//第二行显示
27. for(i=0;i<16;i++)
28. {
29. LcdWriteData(EN_CHAR2[i]);
30. }
31. while(1)
32. {
33. if(TR0==0) //当计数器停下的时候,表明计数完毕
34. {
35. Freq = Freq + TL1; //读取TL的值
36. Freq = Freq + (TH1 * 256); //读取TH的值
37. LcdWriteCom(0xc8);
38. //求频率的个十百千万十万位
39. freqValue[0]='0'+Freq%1000000/100000;
40. freqValue[1]='0'+Freq%100000/10000;
41. freqValue[2]='0'+Freq%10000/1000;
42. freqValue[3]='0'+Freq%1000/100;
43. freqValue[4]='0'+Freq%100/10;
44. freqValue[5]='0'+Freq%10;
45. for(i=0;i<5;i++)//从最高位开始
46. {
47. if(freqValue[i]==0x30)
48. {
49. freqValue[i]=0x20; //若为0则赋值空格键
50. }
51. else
52. {
53. break;
54. }
55. }
56. for(i=0;i<6;i++)
57. {
58. LcdWriteData(freqValue[i]);
59. }
60. Freq=0;TH1=0; TL1=0;TR0=1; TR1=1;
61. }
62. }
63.}
64.
65.void Timer0() interrupt 1
66.{
67. TimeCount++;
68. if(TimeCount==20)//计时到1S
69. {
70. TR0=0;
71. TR1=0;
72. TimeCount=0;
73. }
74. TH0=0x3C;
75. TL0=0xB0;
76.}
77.void Timer1() interrupt 3
78.{
79. Freq=Freq+65536;
80.}
六、实验步骤
1.连接实验相关模块电路
实验界面
2.编写脉冲发生器程序
编程思路:调节电位器,改变电阻阻值,555定时器产生脉冲的周期也会随之改变,自然频率也会改变。编程记录1S内脉冲的个数即可得到频率,需要用到定时器进行1S的定时和计数器进行脉冲的计数。然后将频率拆分成位,显示在LCD1602显示屏上。
3.下载脉冲发生器程序
程序下载界面
4.调试验证试验效果
调节电位器,LCD屏幕显示对应的频率,显示效果清晰,反应速度较快。文章来源:https://www.toymoban.com/news/detail-463436.html
七、实验思考
本次实验室目前做的实验中最复杂的一个程序,用到两个定时计数器。两个中断,主程序也相对复杂。但是思路比较清晰,就是通过计数器555在一秒内产生的脉冲个数,这里的一秒需要定时器来定时,然后将记得的脉冲数显示到LCD1602屏幕上。
定时器或者计数器最大的计数或者定时是65536,超出会溢出或者产生中断,要处理这个溢出而产生的中断,防止程序出行逻辑错误。这里就采用了每次计时50ms计数20次,然后相当于1s的这样的处理,也采用了计数器到65536之后频率加上65536。这些都是需要注意的问题。
LCD1602已经成为一个模块,配有c和h的文件,下一次需要使用1602直接在工程中添加它的c文件。然后在需要用的地方导入这个h文件,非常方便。以后再编程的时候注意这些地方,产生模块化的程序,方便迁移到其它程序中,增加整体效率。有一个词叫低耦合,我想编程也应该保证耦合度低。但换句话说,也不能局限于已经编好的函数,如果自己可以编出一个效率更高效果更好的程序,自然还是要自己动手。文章来源地址https://www.toymoban.com/news/detail-463436.html
到了这里,关于单片机实验七 NE555脉冲发生器实验(定时/计数器)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!