周期是一次运动的时间,也就是几秒每次,单位是:秒/次。
而频率是1秒钟多少次,单位是:次/秒。
从单位看便可推断出二者呈倒数关系。
下面以匀速圆周运动为例:做匀速圆周运动的物体运动一周所用的时间叫做周期。
那么周期的倒数就叫做频率。———————源自百度
利用定时器0工作方式1,实现第一个发光管以1s亮灭闪烁。(如下图)
#include三、自己练习途中发现的问题:#define uchar unsigned char #define uint unsigned int sbit led1=P1^0; uchar num; void main() { TMOD=0x01; TH0=(65536-45872)/256; TL0=(65536-45872)%256; EA=1; ET0=1; TR0=1; while(1) ; } void T0_time() interrupt 1 { TH0=(65536-45872)/256; TL0=(65536-45872)%256; num++; if(num==20) { led1=~led1; num=0; } }
1、少打了“while(1)”,结果发现实验板上的led灯并不会进行亮灭。
——原来是实际上没加“while(1)”进行循环,那么主函数只运行一次,中断也只进行一次,未达到次数,led也就没反应。
2、注意:在中断服务程序中一般不要写过多的处理语句,因为如果语句过多,中断服务程序中的代码未执行完毕,而下一次中断来临,这样就会丢失这次中断。
那么我就把if程序块放到了主函数中。结果实验板上的led灯又不会进行亮灭。 (如下图)
#include#define uchar unsigned char #define uint unsigned int sbit led1=P1^0; uchar num; void main() { TMOD=0x01; TH0=(65536-45872)/256; TL0=(65536-45872)%256; EA=1; ET0=1; TR0=1; if(num==20) { led1=~led1; num=0; } while(1) ; } void T0_time() interrupt 1 { TH0=(65536-45872)/256; TL0=(65536-45872)%256; num++; }
——结果翻书才发现,这if程序块,我要放入while语句中,结果成功实现灯的亮灭。(如下图)
while(1)
{
if(num==20)
{
led1=~led1;
num=0;
}
}
后知后觉,发现如果放在while语句外面,则实际if程序也只是执行一次。若放在while语句中,就会一直循环,符合条件即能实现灯的亮灭。



