当前位置:首页 » 存储配置 » 定时器加特殊标志位存储器

定时器加特殊标志位存储器

发布时间: 2022-11-26 02:00:16

⑴ 51单片机定时器1方式2怎么设置为什么TMOD=0x20(是怎么换算得) 定时器0方式2TMOD又是多少

1、首先第一步是定时器2是新增资源,也是51单片机定时器里面功能最强大的一个定时器。注意的是掌握好定时器2还是非常有必要的。

⑵ 关于单片机定时器设置标志位问题

明确告诉你这样做是可以的,但是是不推荐的。所有的中断都应尽量简化。

检测口是否为0完全可以放在主程序。不明白你为什么非要隔一段时间扫描一次。唯一的可能是你计算好时间认为此时就是会为0?如果这样你太相信CPU时钟了。。。虽然定时器精确但是只是相对普通的循环DEALY而已,其实远不够精确的。

⑶ mcs-51系列单片机中的定时器/计数据有哪几个特殊功能寄存器作用是什么怎样

不包含计数器本身,两个特殊功能寄存储器,TCON 和TMOD,TMOD用来设置工作方式,是8位还是16位,是内部计数还是对外部计数,TCON用来控制启停及存放溢出标志。

⑷ 如何运用西门子PLC的变量存储器及什么程序能用到

用西门子PLC的变量存储器V只有S7- 200中才有。相当于300中的M变量。按v1,v2,v3 字节搞下去。
变量存储器(V)(相当于内辅继电器)PLC执行程序过程中,会存在一些控制过程的中间结果,这些中间数据也需要用存储器来保存。变量存储器就是根据这个实际的要求设计的。变量存储器是S7-200CPU为保存中间变量数据而建立的一个存储区,用V表示。可以按位、字节、字、双字四种方式来存取。(1)按“位”方式:从V0.0~I5119.7,共有40960点。CPU221、CPU222变量存储器只有2048个字节,其变量存储区只能到V2047.7位。(2)按“字节”方式:从VB0~VB5119,共有5120个字节(3)按“字”方式:从VW0~VW5118,共有2560个字(4)按“双字”方式:从VD0~VD5116,共有1280个双字
(1) S7-200存储器类型
S7-200 PLC可以采用多种形式的存储器来进行PLC程序与数据的存储,以防止数据的丢失。S7-200可以使用的存储器主要有如下类型:
①RAM: CPU模块本身带有动态数据存储器(RAM)。RAM用于存储PLC的运算、处理结果等数据。根据需要,RAM的数据可以通过电容器或电池盒(选件)进行保持,但其存储时间较短,一般只能保持几天。
②EEPROM(或Flash ROM):除RAM外,CPU模块本身带有的保持型存储器(EEPROM或Flash ROM),可以进行数据的永久性存储。保持型存储器用于存储PLC用户程序、PLC参数等重要数据;根据需要,也可以将PLC程序执行过程中所产生的局部变量V、内部标志M、定时器T、计数器C等保存在保持型存储器中。
③存储器卡:存储器卡在S7-200中为可选件,用户可以根据需要选用。存储器卡为保持型存储器,可以作为PLC保持型存储器的扩展与后备,用于保存PLC用户程序、PLC参数、变量V、内部标志M、定时器T、计数器C等。 (2)存储器分区
S7-200的内部存储器分为程序存储区、数据存储区、参数存储区。其中,程序存储区用于存储PLC用户程序;数据存储区用于存储PLC运算、 处理的中间结果(如输入/输出映像,标志、变量的状态,计数器、定时器的中间值等);参数存储区用于存储PLC配置参数(包括程序保护密码、地址分配设 定、停电保持区域的设定等)。

⑸ 一个定时器如何设定多个时间标志位

我想你大概是想如何用一个定时器同时给多个事件定时。如果是这样的话,你可以给定时器一个基准定时,比方说100ms,然后每定时中断一次就判断每个事件的定时次数不就行了

⑹ MCS-51系列单片机中的定时器有哪几个专用寄存器它们各自的作用是什么

要讲定时离不开中断,两者结合使用的。定时计数器主要用到TMOD工作模式寄存器,TCON定时器的控制寄存器,EA中断允许控制寄存器,IP中断优先级寄存器 定时器控制寄存器TCON (88H)TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TCONTF0/TF1:定时器0/定时器1溢出中断申请标志位: =0:定时器未溢出; =1:定时器溢出申请中断,进中断后自动清零。TR0/TR1:定时器运行启停控制位: =0:定时器停止运行; =1:定时器启动运行。TCON:Timer控制寄存器,是管理定时器工作的SFR(其中低4位管外部中断)定时器控制寄存器TCON (88H)TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TCONIE0/IE1:外部中断申请标志位: =0:没有外部中断申请; =1:有外部中断申请。IT0/IT1:外部中断请求的触发方式选择位: =0:在INT0/INT1端申请中断的信号低电平触发; =1:在INT0/INT1端申请中断的信号负跳变触发.TCON:Timer控制寄存器,低4位管理外部中断�8�4在CPU已经开放了外部中断允许的前提下:�8�4在INT0/INT1引脚输入一个负脉冲或低电平, �8�4TCON寄存器中的IE0/IE1标志位自动变“1”, 检测到IE0/IE1变“1”后,将产生指令:执行中断服务程序,�8�4并将IE0/IE1标志位自动清“0”,以备下次申请。外部中断(INT0,INT1)申请过程 单片机的定时/计数器定时器计数器的概念一、计数的概念
选票:画“正”。这就是计数,生活中计数的例子处处可见。比如一个水盆在水龙头下,水龙没关紧,水一滴滴地滴入盆中。水滴持续落下,盆的容量是有限的,过一段时间之后,水就会逐渐变满。51单片机中有两个计数器,分别称之为T0和T1,这两个计数器分别是由两个8位的RAM单元组成的,即每个计数器都是16位的计数器,最大的计数量是65536。

二、定时
计数器是如何作为定时器来用的呢?比如一个闹钟,将它定时在1个小时后响闹,我们也能说成是秒针走了(3600)次,所以时间就转化为秒针走的次数的,也就是计数的次数了,可见,计数的次数和时间之间十分相关。那么它们的关系是什么呢?也就是秒针每一次走动的时间要正好是1秒。

只要计数脉冲的间隔相等,则计数值就代表了时间的流逝。由此,单片机中的定时器和计数器是同一个东西,只不过计数器是记录的外部的触发脉冲,而定时器则是由单片机供给一个非常稳定的计数源。供给定时器的是计数源是机器周期也就是由单片机的晶体震荡器经过12分频后获得的一个脉冲源(机器周期)。晶振的频率是很准确的,所以这个计数脉冲的时间间隔也很准。一个12M的晶振,它供给给计数器的脉冲时间间隔是1微秒。计数脉冲的间隔与晶振有关,12M的晶振,计数脉冲的间隔是1微秒。这是逻辑图,可以看到T1是一个单刀双掷开关,说明定一个定时/计数器同一时刻要么作定时用,要么作计数用,不能同时用;接通T1引脚时作为外部计数用。(T0的引脚是P3.4,T1的引脚是P3.5)。

比如滴水的例子,当水持续落下,盆中的水逐渐变满,最终会有一滴水使得盆中的水全满了。这个时候如果再有一滴水落下,水会漫出来,用术语来讲就是“溢出”,而每一滴水落下,用术语来说就是发出一个计数脉冲。 水溢出是流到地上,而计数器溢出后就会引发一个定时中断事件,就象定时的时间一到,闹钟就会响一样。 现在另一个问题是:要有多少个计数脉冲才会产生事件。 刚才已研究过,计数器的容量是16位,也就是最大的计数值到65536,因此计数计到65536就会产生溢出。这个没有问题,问题是我们现实生活中,经常会有少于65536个计数值的要求,如制药厂包装线上,一瓶药片为100粒,500瓶为一箱 那么怎么样来满足这个要求呢?举例 如果是一个空的水盆要1万滴水滴进去才会满,我在开始滴水之前就先放入一勺水,还需要10000滴吗?对了,这时我们就采用预置数的办法,我要计 100,那我就先放进65436,再来100个脉冲,不就到了65536了吗。定时也是如此,每个脉冲是1微秒,则计满65536个脉冲需时65.536 毫秒,但现在我只要10毫秒,怎么办?10个毫秒为10000个微秒,所以,只要在计数器里面放进55536就可以了。溢出的概念和设置任意定时计数的方法3个16位定时器/计数器 ——(51系列有2个16位Timer少一个T2)定时器:对片内机器时钟(周期方波)进行计数计数器:对Tx引脚输入的负脉冲进行计数与Timer工作有关的特殊功能寄存器: TCON 和 TMODAT89S52单片机的定时器/计数器单片机定时/计数器内部结构单片机定时/计数器内部结构图定时器的2个特殊功能寄存器(TCON)TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0定时器控制寄存器TCON (88H)TF0/TF1: 定时器0/1计数溢出标志位。 =1 计数溢出; =0 计数未满 TF0/TF1标志位可用于申请中断或供CPU查询。 在进入中断服务程序时会自动清零;但在 查询方式时必须软件清零。TR0/TR1: 定时器0/1运行控制位。 =1 启动计数; =0 停止计数TR0/TR1:定时器0/1运行控制位: TR0/TR1 =0 时,Timer0/1停止计数 TR0/TR1 =1 时,Timer0/1启动计数定时器T0/T1 中断申请过程�8�4 在已经开放T0/T1中断允许且已被启动的前提下:�8�4 T0/T1加满溢出时 TF0/TF1标志位自动置“1” �8�4 检测到TCON中TF0/TF1变“1”后,将产生指令: 执行中断服务程序,�8�4 TF0/TF1标志位会自动清“0”,以备下次中断申请。 定时/计数器可按片内机器周期定时,也可对由T0/T1引脚输入一个负脉冲进行加法计数TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TCON (88H)GATE C / T M1 M0 GATE C / T M1 M0定时器方式寄存器TMOD (89H)T1T0M1,M0:工作方式定义位 ( 定义4 种方式 ):C/T :计数器/定时器选择位 = 1 外部事件计数器。对T0/T1引脚的负脉冲计数; = 0 片内时钟定时器。对机器周期脉冲计数定时0 0:13位 定时器——几乎不用0 1:16位 定时器——经常用到1 0:可自动重装的 8位 定时器——经常用到1 1:T0 分为2个8位 Timer;T1 此时不工作 ——几乎不用GATE C / T M1 M0 GATE C / T M1 M0T1T0GATE门控位: Timer可由软件与硬件两者控制 �8�4 GATE = 0 ——普通用法 Timer的启/停由软件对TRx位写“1”/“0”控制定时器方式寄存器TMOD(89H)�8�4 GATE = 1 ——门控用法 Timer的启/停由软件对TR0/TR1位写“1”/“0” 和在INT0/INT1引脚上出现的信号的高/低共同控制GATE=0时,定时/计数是否工作,只取决于TR0是否为1。GATE=1,只有TR0为1,且INT0管脚也是高电平,定时/计数才工作。 从电路上看到GATE是一个非门,它与INTx组成一个或门,这个或门与TR0又组成一个与门。当GATE=0时,则~GATE=1(非门),此时无论INT0为高或低,它们相或之后必然为1,此时只要TR0=1,则工作,TR0=0则不工作,不受INT0的影响。当GATE=1时,~GATE=0,则INT0=1时,它们相或为1,此时定时器是否工作受TR0影响;若INT0=0,则无论TR0为什么,定时器都不能工作,即当GATE=0时,定时器受INT0和TR0共同的作用。 所以,GATE位的状态决定定时器运行控制取决于TR0的一个条件还是TR0和INT0引脚这两个条件。当GATE=1时,由于GATE信号封锁了与门,使引脚 INT0信号无效。而这时候如果TR0=1,则接通模拟开关,使计数器进行加法计数,即定时/计数工作。而TR0=0,则断开模拟开关,停止计数,定时 /计数不能工作。 当GATE=0时,与门的输出端由TR0和INT0电平的状态确定,此时如果TR0=1,INT0=1与门输出为1,允许定时/计数器计数,在这 种情况下,运行控制由TR0和INT0两个条件共同控制,TR0是确定定时/计数器的运行控制位,由软件置位或清“0”。振荡器�8�112TLx THx (8位) (8位)TFx申请中断Tx端TRx位GATE位INTx端≥1&C/T=0C/T=1控制 开关或门与门非门定时器结构与工作方式工作方式1:——16位的定时/计数器在工作方式1下,计数器的计数值范围是: 1~65536(216)
当为定时工作方式1时,定时时间的计算公式为:
(216—计数初值)╳晶振周期╳12或 (216—计数初值)╳机器周期
其时间单位与晶振周期或机器周期相同。

�8�4 THx/TLx赋初值:THx赋高8位,TLx赋低8位工作方式1 的编程要点: �8�4 TMOD选方式: 写“M1,M0”=01 选方式1�8�4 若不用门控位,直接用软件写TRx控制启/停�8�4 若使用门控位,先置位TRx,然后由INTx端 的高/低电平来控制其启/停�8�4 若要允许中断,还须先置位ETx、EA等中断 允许控制位,并编写中断服务程序�8�4 若不用中断,可查询“计数溢出标志TFx” 的方式工作,但溢出标志TFx须软件清0工作方式2:——8 位自动重装的定时/计数器振荡器�8�112TLx (8位)TFx申请中断Tx端TRx位GATE位INTx端≥1&C/T=0C/T=1控制 =1开关接通或门与门THx (8位)溢出位门开�7�4 THx/TLx赋相同初值 在TLx计数达到0FFH 再加“1”时,TL0 将溢出,进位位直接进入“TFx”去申请 中断,同时打开三态门,使THx中的值 自动重装(Copy)进TLx工作方式 2 的编程:�7�4 TMOD寄存器选方式: 写“M1,M0” = 10选中方式2�7�4 其他用法与各种方式1完全相同T0: 组织成TL0和TH0两个8位定时/计数器Timer工作方式 3 ——几乎无用T1: 不再是定时/计数器了 T1 的TR1和TF1出借给TH0当控制位使用, 剩下的TH1/TL1寄存器只能当作普通寄存 器用。振荡器�8�112TL0 (8位)TF0申请中断T0端TR0位GATE位INT0端≥1&C/T=0C/T=1控制 =1开关接通或门与门TH0 (8位)TF1申请中断TR1位控制 =1Timer工作方式 3 结构:�7�4T0成为双 8位Timer �7�4T1不再有Timer功能 �7�4TF1,TR1出借给TH0 定时器小结: (2个16位加法计数器)�7�4运行/停止由TRx位控制,(当GATE=1时: 由TRx位和Tx引脚上的信号共同控制)�7�4工作方式由TMOD决定; 计数/定时由C/T位决定 工作方式0(13位) 永远不用 工作方式3(T0拆为双8位) 几乎无用 工作方式1(16位) 经常用到 工作方式2(8位自动重装) 经常用到�7�4从初值按机器周期或外部脉冲递加,溢出位 TFx申请中断;中断允许由ETx位和EA位控制,定时器/计数器的定时/计数范围 工作方式0:13位定时/计数方式,因此,最多能计到2的13次方,也就是8192次。 工作方式1:16位定时/计数方式,因此,最多能计到2的16次方,也就是65536次。 工作方式2和工作方式3,都是8位的定时/计数方式,因此,最多能计到2的8次方,也说是256次。 预置值计算:用最大计数量减去需要的计数次数即可

⑺ 单片机 TCON 每一位:TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 表示什么意思0或1代表什么谢谢,百度百科都没

这里TF、TR、IE、IT后面跟的0和1是对单片机寄存器中位的命名,因为有两个定时/计数器、两个中断,所以用0、1来区分。

各位的定义如下:

TF1、TF0:分别是定时器1、定时器0的溢出标志位。当定时器x计满溢出时,由硬件使TFx位置“1”,并申请中断。进入中断服务程序后,由硬件自动清“0”,在查询方式下用软件清“0”。

TR1、TR0:分别是定时器1、定时器0的运行控制位。由软件清“0”关闭定时器。当GATE=1,且INTx为高电平时,TR置“1”启动定时器;当GATE=0,TRx置“1”启动定时器。

IE1、IE0:分别为外部中断1、外部中断0的请求标志位。

IT1、IT0:分别为外部中断1、外部中断0的触发方式选择位。当ITx=0,为低电平触发方式;当ITx=1,为下降沿触发方式。

(7)定时器加特殊标志位存储器扩展阅读:

TCON初始化:

1、确定工作方式(即对TMOD赋值);

2、预置定时或计数的初值(可直接将初值写入TH0、TL0或TH1、TL1);

3、根据需要开放定时器/计数器的中断(直接对IE位赋值);

4、启动定时器/计数器(若已规定用软件启动,则可把TR0或TR1置“1”;若已规定由外中断引脚电平启动,则需给外引脚加启动电平。当实现了启动要求后,定时器即按规定的工作方式和初值开始计数或定时)。

⑻ 怎么使用STC89c52的第三个定时器,要设置哪几个特殊功能寄存器

/*AT89S52和STC单片机引脚是通用的,程序可以直接移植
晶振:12MHZ
引脚连接方式见下面定义,该程序经过我仔细调试,只要连接上即可直接运行,*/
#include<reg52.H>
#define seg_data P1 //数码管显示数据输出端口
sbit K1 = P3^0; //按键引脚定义
sbit K2 = P3^1;
sbit K3 = P3^2;
sbit bit1 = P2^0; //数码管位选通端口定义
sbit bit2 = P2^1;
sbit bit3 = P2^2;
/*共阳数码管0-9 */
const unsigned char seg[10]=;
unsigned char seg_data1=0,seg_data2=0,seg_data3=0,delaytime=0;
struct boolean_variable //定义布尔型变量,每个变量只占用一个bit RAM
{
char a :1;
char b :1;
char c :1;
char d :1;
char e :1;
char f :1;
}variable1;
/******************************************************************************
定时器初始化
******************************************************************************/
void time0_time1_initialize()
{
TMOD=0X11; //T0模式1,T1模式1 相当于00010001B
ET0=1; //T0开中断
ET1=1; //T1开中断
PT0=1; //T0为高优先级
PT1=0; //T1为低优先级
EA=1; //中断总开关打开
TH1=0XF8; ////T1装入初值,实现2ms定时
TL1=0X30;

TH0=0X3c; //T0装入初值,实现50ms定时
TL0=0Xb0;

TR1=1; //开启T1
}
#define bit1_shanshuo variable1.c
#define bit2_shanshuo variable1.d
#define bit3_shanshuo variable1.e
#define jishu_key variable1.f
/******************************************************************************
动态扫描显示程序
******************************************************************************/
unsigned char judge_segdata=1;
void seg_display()
{
if (jishu_key == 1)
{
if (judge_segdata > 6)
judge_segdata =1;
switch (judge_segdata)
{
case 1: seg_data=seg[seg_data1];bit1 = 1;break;
case 2: seg_data=seg[seg_data1];bit1 = 0;break;

case 3: seg_data=seg[seg_data2];bit2 = 1;break;
case 4: seg_data=seg[seg_data2];bit2 = 0;break;

case 5: seg_data=seg[seg_data3];bit3 = 1;break;
case 6: seg_data=seg[seg_data3];bit3 = 0;break;
}
goto S;
}
if (jishu_key == 0)
{
if (judge_segdata >200)
judge_segdata =1;
if (bit1_shanshuo == 1)
{
if (judge_segdata == 1)
{
seg_data=seg[seg_data1];bit1 = 1;
goto S;
}
if (judge_segdata == 100)
{
seg_data=seg[seg_data1];bit1 = 0;
goto S;
}
if (judge_segdata == 200)
goto S;
switch (judge_segdata%10)
{
case 2: seg_data=seg[seg_data2];bit2 = 1;bit1 = 0;break;
case 3: seg_data=seg[seg_data2];bit2 = 0;break;

case 4: seg_data=seg[seg_data3];bit3 = 1;bit1 = 0;break;
case 5: seg_data=seg[seg_data3];bit3 = 0;break;

case 6: seg_data=seg[seg_data2];bit2 = 1;bit1 = 0;break;
case 7: seg_data=seg[seg_data2];bit2 = 0;break;

case 8: seg_data=seg[seg_data3];bit3 = 1;bit1 = 0;break;
case 9: seg_data=seg[seg_data3];bit3 = 0;break;
}
goto S;
}

if (bit2_shanshuo == 1)
{
if (judge_segdata == 1)
{
seg_data=seg[seg_data2];bit2 = 1;
goto S;
}
if (judge_segdata == 100)
{
seg_data=seg[seg_data2];bit2 = 0;
goto S;
}
if (judge_segdata == 200)
goto S;
switch (judge_segdata%10)
{
case 2: seg_data=seg[seg_data1];bit1 = 1;bit2 = 0;break;
case 3: seg_data=seg[seg_data1];bit1 = 0;break;

case 4: seg_data=seg[seg_data3];bit3 = 1;bit2 = 0;break;
case 5: seg_data=seg[seg_data3];bit3 = 0;break;

case 6: seg_data=seg[seg_data1];bit1 = 1;bit2 = 0;break;
case 7: seg_data=seg[seg_data1];bit1 = 0;break;

case 8: seg_data=seg[seg_data3];bit3 = 1;bit2 = 0;break;
case 9: seg_data=seg[seg_data3];bit3 = 0;break;
}
goto S;
}
if (bit3_shanshuo == 1)
{
if (judge_segdata == 1)
{
seg_data=seg[seg_data3];bit3 = 1;
goto S;
}
if (judge_segdata == 100)
{
seg_data=seg[seg_data3];bit3 = 0;
goto S;
}
if (judge_segdata == 200)
goto S;
switch (judge_segdata%10)
{
case 2: seg_data=seg[seg_data1];bit1 = 1;bit3 = 0;break;
case 3: seg_data=seg[seg_data1];bit1 = 0;break;

case 4: seg_data=seg[seg_data2];bit2 = 1;bit3 = 0;break;
case 5: seg_data=seg[seg_data2];bit2 = 0;break;

case 6: seg_data=seg[seg_data1];bit1 = 1;bit3 = 0;break;
case 7: seg_data=seg[seg_data1];bit1 = 0;break;

case 8: seg_data=seg[seg_data2];bit2 = 1;bit3 = 0;break;
case 9: seg_data=seg[seg_data2];bit2 = 0;break;
}
}
}
S: judge_segdata++;
}
/******************************************************************************
定时计数器1的中断服务子程序, 用于定时扫描数码管
******************************************************************************/
unsigned char dc1=1;
void time1_interrupt() interrupt 3 using 2
{
TH1=0XF8; //T1重新装入初值
TL1=0X30;
dc1++;
if (dc1 == 100) //200ms到了?数码管计数加1
{
dc1 = 0;
if (jishu_key == 1)
{
seg_data1++;
if (seg_data1 == 10)
{
seg_data1 = 0;
seg_data2++;
}
if (seg_data2 == 10)
{
seg_data2 = 0;
seg_data3++;
}
if (seg_data3 == 10)
seg_data3 = 0;
}
}
seg_display();
}
#define second variable1.a
static unsigned char dc2=0;
/******************************************************************************
定时计数器0的中断服务子程序, 用于定时扫描数码管
******************************************************************************/
void time0_interrupt() interrupt 1 using 3
{
TH0=0X3c; //T0装入初值,继续50ms定时
TL0=0Xb0;
dc2++; //50ms计数变量加1
if (dc2 == delaytime) //2s到了?
{
second = 1; //布尔型变量second置位
dc2=0;
}
}
/******************************************************************************
延时程序
******************************************************************************/
void delay(int time0)
{
unsigned char i;
for(;time0 >= 0;time0--)
{
for(i=0;i<120;i++);
}
}
/******************************************************************************
按键执行程序
******************************************************************************/
#define timedelay1 50
void key_function()
{
unsigned char j=0;
bit1_shanshuo = 1; //数码管第一位闪烁
delay(500); //延时500ms
delaytime = 100 ; //定时器0 定时100*50ms = 5000ms=5s
TH0=0X3c;
TL0=0Xb0;
TR0 = 1; //开启T0,定时5s
while(!second) //如果5秒内没有按键,则按键设置程序返回
{
if (K1 == 0)
{
dc2 = 0; //清零T0十秒计数变量
j++;
}
if (j > 3)
j=1;
switch (j)
{
case 1:bit1_shanshuo = 1;bit2_shanshuo = 0;bit3_shanshuo = 0;break;
case 2:bit1_shanshuo = 0;bit2_shanshuo = 1;bit3_shanshuo = 0;break;
case 3:bit1_shanshuo = 0;bit2_shanshuo = 0;bit3_shanshuo = 1;break;
default: break;
}
if (K2 == 0)
{
dc2 = 0; //清零T0十秒计数变量
switch (j)
{
case 1: seg_data1++;if (seg_data1>9) seg_data1=0;break;
case 2: seg_data2++;if (seg_data2>9) seg_data2=0;break;
case 3: seg_data3++;if (seg_data3>9) seg_data3=0;break;
}
}
if (K3 == 0)
{
dc2 = 0; //清零T0十秒计数变量
switch (j)
{
case 1: seg_data1--;if (seg_data1>9) seg_data1=0;break;
case 2: seg_data2--;if (seg_data2>9) seg_data2=0;break;
case 3: seg_data3--;if (seg_data3>9) seg_data3=0;break;
}
}
delay(400); //延时400ms
}
jishu_key = 1; //数码管继续计数
TR0 = 0;
}
/******************************************************************************
K1键扫描程序
******************************************************************************/
void key_press()
{
if (K1 == 0) //key1按下?
{
jishu_key = 0; //数码管停止计数
delaytime = 40; //定时器1定时40*50ms = 2s
TH0=0X3c;
TL0=0Xb0;
TR0 = 1; //T0开始定时
delay(10); //消除键盘抖动
while (!K1) //等待
{
if (second == 1)//两秒计数变量为1?
{
TR0 = 0; //关闭T0
second = 0;
key_function();
return;
}
}
TR0 = 0;
jishu_key=1;
}
}
void main()
{
K1 = 1;
K2 = 1;
K3 = 1;
second = 0;
jishu_key = 1;
bit1_shanshuo =0;
bit2_shanshuo =0;
bit3_shanshuo =0;
time0_time1_initialize();
while(1) //不断执行
key_press();
}

花了我一整个上午的时间,再给我70分

⑼ cpu224plc有哪些元件

1、输入映像寄存器
2、输出映像寄存器
3、变量存储器V
4、内部标志位存储器M
5、特殊标志位存储器SM
6、局部变量存储器L
7、定时器T
8、计数器C
9、高数计数器HC
10、累加器AC
11、顺序控制继电器S
12、模拟量输入/输出映像寄存器(AI/AQ)

⑽ 怎么样利用定时器、计数器和特殊存储器位实现长延时

利用定时器定时或延时,其实就是利用计数器对内部时钟信号或机器周期计数,但时间都不长。实现长延时的方法很简单,对每一次定时计数,计数到某一个数时,即为一定时间。例如,定时器可定时20ms,每20ms到,或中断,或查询,并计数,计数到50次,定时的时间就是20ms×50=1000ms=1秒,再计60秒,得到1分,计60分得1小时。依此,可以实现时钟计时。

热点内容
java查询mysql数据库 发布:2025-09-22 13:57:51 浏览:85
c语言count函数 发布:2025-09-22 13:54:39 浏览:974
php开启fsockopen 发布:2025-09-22 13:47:13 浏览:947
相机访问不了 发布:2025-09-22 13:09:34 浏览:401
搭建小型svn服务器 发布:2025-09-22 13:05:09 浏览:382
游标只能利用于存储过程和函数 发布:2025-09-22 13:03:32 浏览:878
c语言循环数组赋值 发布:2025-09-22 12:45:53 浏览:457
电脑提示没有访问权限 发布:2025-09-22 12:18:07 浏览:646
android开发项目源码 发布:2025-09-22 11:41:05 浏览:344
解压踩纸团 发布:2025-09-22 11:30:58 浏览:178