定时器1s是多少秒,T0做定时器定时1ST1做计数器计算在一秒钟内有几个脉冲通过
来源:整理 编辑:亚灵电子网 2023-10-30 09:20:18
本文目录一览
1,T0做定时器定时1ST1做计数器计算在一秒钟内有几个脉冲通过
如果脉冲频率比较高,不建议用定时器,因为程序有扫描周期影响会影响计数的准确性,建议用定时中断来做
2,采用FX2N系列PLC实现定时1s的控制功能如果选用定时器T10其
你好!T210为十毫秒计数器,1秒等于1000毫秒。 所以常数K=100仅代表个人观点,不喜勿喷,谢谢。
3,单片机定时器 延时一秒代码如下感觉没一秒晶振频率12M
软件延迟误差很大,特别是循环,while(),for()等没办法控制,软件延迟最好只能是用汇编语言,这样每个指令周期都是可控的,还有就是定时器了。看手册,(1/12m) *256 = 多少秒 然后使用定时器定时的方式,得出计数一次需要的时间。再用0.5ms除这个时间,就是定时需要计数这个时间需要的数值。
4,求助STC 单片机使用定时器 定时1S
STC 单片机就是51单片机,现在的单片机教材,几乎都讲51单片机的,定时器更是必讲的。只不过,教材上讲的是MCS51单片机,而STC单片机的定时器使用完全一样的。不论哪个单片机,都不能直接定时1S,可以定时50ms,然后设置中断,对中断计数20次就是1秒了。这种程序,在百度知道里,到处都是,随便搜索下,就可能搜索到无数个。stc单片机 使用pwm功能,有pwm专用定时器,和定时器 t0 与 t1 无关。stc单片机 的 数据手册 上有 pwm 例程,有c 语言的,也有汇编语言的,】可以上官网下载 个 相关 单片机的 数据手册 看看。
5,1s1min1h都叫什么时间
1h=60min=3600s(1min=60s)1s----秒1min-分1h----小时1s——1秒1min——1分钟1h——1小时s、min、h是常用的时间单位秒、分、小时的符号。void delay1s(void) //误差 0us unsigned char a,b,c; for(c=46;c>0;c--) for(b=152;b>0;b--) for(a=70;a>0;a--); } 上面为1s的子程序 1min可以调用60次,1h就调用3600次吧,呵呵,这么长的时间,干嘛不用定时器呢 欢迎提问
6,51单片机定时器模式1定时1us为什么用了好几秒啊
你的程序只有这几行吗?那没有ET1=1,开定时器中断没有啊。定时到了,是不能中断的。其实,这么设置没有什么意义的,因为,执行完TR1=1,这条指令,就开始计时了,只要1个机器周期就定时到。执行完TR1=1,定时就到了。但是还没有执行EA=1;就不能中断,还得等到ET1=1以后,才能中断。其实,早就定时到了,但没有执行ET1=1是不能中断。单片机响应中断后,转去执行中断服务子程序,这需要更多的机器周期,远远超过1个机器周期,因此,你的设置是无理的。而你的程序就没有ET1=1,所以,不可能中断的。等了好几秒.........为什么啊?就应该等啊。方案1:51的定时器定时时间不长,为了解决这一问题,可以设置一全局变量(假设你用c编程序)作计数器,等到定时中断发生时中断函数给这一全局变量加一,在主程序中判断这一变量的大小,从而推算出定时时间。譬如说,定时器设置成0.5秒中断一次,中断时给变量t加一,那么当t等于16时,就是8秒了。这种方案的缺点是必须在中断函数中加入给变量加一的额外语句,使得定时出现误差,但是也能通过减少定时器的定时时间来补偿,不过计算较麻烦,而且不便于精确定时。方案2:使用低频的晶振或低频外部震荡。有些型号的单片机支持0至12mhz的震荡频率,只要频率足够低绝对能够在定时器最大定时时间内产生出想要的脉冲。这种方案是以牺牲单片机的运行速度为前提的,不过要是做一些简单控制的话,倒是一种不错的选择。
7,定时器延时问题51单片机c语言
while(num!=20) //循环一秒改为:while(num < 20) //循环一秒即可。你的这两个函数void delayms(uint)和void display(uchar,uchar,uchar,uchar)我可以肯定的告诉你,没有问题。你的这个程序其实就是想显示0000~5959之间的数,而且这个数是每20秒+1顺序递增的。之所以没有任何反应,那是你的主程序没有挂起,也就是在while(1)里没有没有大括号,程序执行一次就结束了,所以你什么都看不到。应该这样while(1) for(thou=0;thou<=5;thou++) //千位 for(hun=0;hun<=9;hun++) //百位 for(ten=0;ten<=5;ten++) //十位 for(one=0;one<=9;one++) //个位 while(num!=20) //循环一秒 display(thou,hun,ten,one);//数码管显示四个数字 } num=0; }}这样你就可以看到程序运行的结果了,但结果是这样的:四个LED显示管闪得很严重,计划是一亮一灭的,而且0000~5959这个数字几乎显示得不成样子。主要是delayms(5),这个延迟程序你应该尽量控制在20ms之内(主要是人眼残辉的时间极限),短了感觉就全亮,长了就一闪一灭。不过我很看不惯你的这个程序,我给你一个CPU负担更小,而显示又非常好的程序供你参考:#include#define uint unsigned int #define uchar unsigned char sbit LED4=P2^0; //数码管千分位 sbit LED3=P2^1; //数码管百分位 sbit LED2=P2^2; //数码管十分位 sbit LED1=P2^3; //数码管个分位 uchar ms20,s1;//20毫秒和1s变量定义(声明) //定时器T0初始化,10ms秒初值 void InitTimer0(void) { TMOD=0x01; TH0=0x0D8; TL0=0x0F0; EA=1; ET0=1; TR0=1; } void Display(uchar dat4,uchar dat3,uchar dat2,uchar dat1) { static uchar k; P2=P2|0xf0; switch(k++) { case 0: P0=dat4; LED4=1; break; case 1: P0=dat3; LED3=1; break; case 2: P0=dat2; LED2=1; break; case 3: P0=dat1; LED1=1; break; default:k=0;return; } } void Timer0(void) interrupt 1//1ms中断 { TH0=0x0D8; TL0=0x0F0; ms20++; s1++; } void Main(void) { uchar thou,hun,ten,one; InitTimer0(); while(1) { if(s1>=100)//每1秒钟one+1 { s1=0; if(one++>=9) { one=0; if(ten++>=5) { ten=0; if(hun++>=9) { hun=0; if(thou++>=5) thou=0 } } } } if(ms20==2)//每20毫秒调用一次显示函数 { Display(thou,hun,ten,one); ms20=0; } } }首先在程序开始时初始化一下num。另外while中的num=0;就会将定时器0中num的增加值又设置成0,这样每循环一次,num就会被设置成0,所以程序程序就退不出while循环。另外,还要看你的display程序是不是有问题,最好先把显示调试好再去做这个程序。。。没记到20的时候呢,if花括号后面加else{ p2=0xff;}不然你那样就会一直亮了。。。
文章TAG:
定时定时器1s是多少秒 T0做定时器定时1ST1做计数器计算在一秒钟内有几个脉冲通过