求c8051f310定时器 定时10s的c语言程序.急急急!!!!

作者&投稿:巧时 (若有异议请与网页底部的电邮联系)
求51单片机c语言程序,使用定时器中断,当接受的下降沿时,开始定时,定时一分钟,定时结束后跳出中断~

//假设晶振12MHZ,检测的是P1.1下降沿
#include "reg51.h"
unsigned int YSJS;
sbit K1 = P1^1;
void main(void)
{
TMOD |= 0X10; //定时器1工作于方式1,16位定时器
TL1 = 0x78; //设置定时初值
TH1 = 0xEC; //定时器1定时时间=5000us
ET1 = 1; //使能定时器1中断
EA =1; //开总中断
K1 = 1;
YSJS = 0;

while(1)
{
if(K1==0)TR1 = 1; //启动定时器1
if(YSJS == 12000) //已定时一分钟
{
//这里加入你自己定时一分钟后要做的处理
}
}
}

void TIMER1(void) interrupt 3 //定时器1中断函数使用默认寄存器组
{
TL1 = 0x78; //设置定时初值
TH1 = 0xEC; //定时器1定时时间=5000us

YSJS++;
if(YSJS==12000) //已定时一分钟
{
TR1 = 0;关闭定时器1
}
}

/*****定时器T0*****/
void init() //定时器初始化函数
EA=1; //开总中断
ET0=1; //打开定时器0
TMOD=0x01; //设置计数器工作模式
TH0=0x3c;
TL0=0xb0; //为定时器赋初始值
TR0=1; //允许定时器中断
}

void time() interrupt 1 //中断函数 (在中断中要执行的语句)
{
TH0=0x3c;
TL0=0xb0; //初始值
ee++; //计数位 记录定时器溢出次数
if(ee==10) //判断是否达到预定时间间隔
{
h=~h; // 用户的任务
ee=0; //清除 标志位重新计数
}
}

先来个完整的程序
定时十秒只要把 50毫秒*tt=10秒。即把tt改为200。
参考一下这个,肯定会懂的。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit WL=P2^0;
sbit DL=P2^1;
sbit K=P2^7;
uchar tt,aa,bb,cc;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};

void display3(uchar aa);
void display2(uchar bb);
void display1(uchar cc);

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void init()
{
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
TR0=1;
}

void main()
{
init();
DL=1;
P1=0x00;
DL=0;
WL=1;
P1=0x00;
WL=0;
K=1;
P1=0;
K=0;

while(1)
{
if(tt==2)
{
tt=0;
aa++;
if(aa==10)
{
aa=0;
++bb;
}
if(bb==10)
{
bb=0;
++cc;

}
if(cc==10)
{cc=0;}

}
display3(aa);delay(10);
display2(bb); delay(5);
display1(cc);delay(5);

}
}
void display3(uchar aa)
{ WL=1;
P1=0xfb;
WL=0;
DL=1;

P1=table[aa];
DL=0;
}
void display2(uchar bb)
{ WL=1;
P1=0xfd;
WL=0;
DL=1;

P1=table[bb];
DL=0;
}
void display1(uchar cc)
{ WL=1;
P1=0xfe;
WL=0;
DL=1;

P1=table[cc];
DL=0;
}

void timer0() interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
tt++;

}

#include<reg52.h>
unsigned char counter;
void main()
{
TMOD = 0X01;// 定时器0 工作方式1
TH0 = 0X4C;
TL0 = 0X00;//定时50ms;
EA = 1;
ET0 = 1;
TR0 = 1;
if(counter == 200) //10秒到
{
counter = 0;
这里进行你的判断
}

}

void timer0 () interrupt 1
{
TH0 = 0X4C;
TL0 = 0X00;//重新赋初值
counter++;
}

#include<reg51.h>
#define uchar unsigned char//宏定义
#define uint unsigned int
uchar num
void main()
{
TMOD=0x01;//定时器0为工作方式1 M1M0 01
TH0=(65536-50000)/256;装初值 12mhz
TL0=(65536-50000)%256;
EA=1;开总中断
ET0=1;开定时器0中断
TR0=1;启动定时器
while(1);等待中断发生
}
void T0_time() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
for(num==200)
num=0;
}


C8051F310单片机如何实现秒、分、小时计时的?
用定时器计时,计算很麻烦,而且误差大,断电后时间丢失等,最好的办法是用片外时钟芯片,最通用的如DS1302,国产的有HYM1302,使用一样,很简单,熟悉后对做具体的产品设计也很有帮助,因为做产品都是用专业时钟芯片的

关于8051f310单片机的头文件问题?我想问#include <c8051f310.h>...
这个中头文件一般在你的KEIL文件目录下 INC文件夹中 但多数是需要自己写,然后在工程文件中添加。我的KEIL文件夹下面没有,不知道新华龙提供的IDE环境中有没有这个文件。如果没有的话,就只能自己写了。

c8051f310的int0引脚是哪一个啊?为什么我找不到对应的引脚?和交叉开关...
要进行交叉端口配置 例如配置:XBR0=0x00;XBR1=0x10; INT0就被分配到P0.0口

C8051F310工作电压多少
2.7-3.6V

C8051F310 有几个端口
P0.0~P0.7,P1.0~P1.7,P2.0~P2.7,P3.0~P3.4

求C8051F310单片机与DS18B20传感器用Keil c语言设计程序
DS18B20温度传感器C51程序,无CRC 2008-06-30 11:18 \/ DS18B20温度传感器 C51 yajou 2008-06-28 无CRC \/ include "reg51.h"include "intrins.h"include "DS18B20.h"\/ us延时程序 \/ void Delayus(uchar us){ while(us--); \/\/12M,一次6us,加进入退出14us(8M晶振,一次9us)} \/ DS1...

您好,我想问一下C8051F310你的9600的波特率是怎么配置的呀,可以把你...
这是官方给的例程里面的UART0初始化函数,波特率可任意设定,给你参考一下吧。define BAUDRATE 9600 \/\/ Baud rate of UART in bps void UART0_Init (void){ SCON0 = 0x10; \/\/ SCON0: 8-bit variable bit rate \/\/ level of STOP bit is ignored \/\/ RX enabled \/\/ ...

超声波驱鸟器技术
3. 超声波驱鸟器的独特魅力 超声波驱鸟器以其高效节能的特点脱颖而出。它采用太阳能光电路板供电,分为即时供电和能量储存两部分,确保全天候可用。内置时钟电路可调控发射周期,光敏感应电路能自动适应光照变化。独特的超声波发射电路,用户可调频,针对不同鸟类选择最有效的频率。主控电路由C8051F310控制...

单片机AD采集时候,外部通道和内部通道是什么意思啊?有什么区别?_百度...
一般单片机的AD转换器 ,可以将外部模拟信号转化为数字量,一般也保留了一个通道作为温度测量,比如C8051F310的ADC,一个通道作为温度测量,一个通道测量VDD。如图所示:

如何利用C8051F310单片机设计一个九秒倒计时定时器
我猜你的难点在于不会定时1秒钟 一般来说51单片机定时大概在毫秒级,假定是50ms 那你就再加一个软件计数器譬如R7,在检测到20次定时器的中断后,再执行真正地中断程序就好了

明光市17253674008: 怎么用单片机C8051F定时0.1us?
翠奇恒运: 用12MHz的晶振单条指令执行的时间是1us..24MHz的话也只有0.5us...要定时0.1us,51做不到.

明光市17253674008: C8051F310单片机如何实现秒、分、小时计时的? -
翠奇恒运: 用定时器计时,计算很麻烦,而且误差大,断电后时间丢失等,最好的办法是用片外时钟芯片,最通用的如DS1302,国产的有HYM1302,使用一样,很简单,熟悉后对做具体的产品设计也很有帮助,因为做产品都是用专业时钟芯片的

明光市17253674008: c8051f020定时器如何精确定时 -
翠奇恒运: 要根据时钟频率来,比如你接的是12MHZ的晶振,定时器用的是系统时钟12分频,那么定时器每加一就是1us.如果你想定时一ms,就将定时器的初值设置成1000,就行了.如果要软件精确定时也可以问我,经过实际测试了哈

明光市17253674008: 利用C8051F310单片机设计一个LED灯控制器 -
翠奇恒运: 嘿嘿 俺可以帮你 具体算法:1 利用定时计数器0,定时工作在方式1 即16位的定时计数器,定时时间=50ms,允许中断. 2 设计一个软件LED灯闪动时间计数器,该计数器初始值=5,每当定时时间到,软件LED灯闪动时间计数器减1,当减到0时...

明光市17253674008: 51系列单片机用c语言编程实现1s定时、1khz方波、512hz方波输出,麻烦多在程序后注释解释程序意思,谢谢 -
翠奇恒运: 以C8051F120为例: 要先配置启动时钟,可以是内部时钟也可以是外部时钟; 再配置交叉端口输出; 之后编写定时器的配置和输出(模式要配置好); 走后别忘了页总线的 切换.具体和51没什么区别,可以参考51

明光市17253674008: 怎么用单片机C8051F定时10us? -
翠奇恒运: 条件:12M晶振; 打开T0中断不用我说了吧?TMOD=0x02; //把定时器模式设定为自动装载初值的8位模式即最大计数255; TH0=0x5f; TL0=0x5f; //把定时器定时器初值设为245 如果用T1,则初始设置(打开中断不说了) TMOD=0x20; //设定...

明光市17253674008: 请问C8051F340的定时器/计数器初值怎么设置? -
翠奇恒运: CKCON = 0x01; //设置定时器0,1使用系统时钟4分频 TMOD = 0x22; //设置T0,T1工作在模式2,即8位自动重载模式 TH1 = 0x64; //设置高位 TL1 = TH1; //设置低位重载值 TR1 = 1; //开启计时器1计时

明光市17253674008: 单片机 定时器初值计算 -
翠奇恒运: X=65536-(1000*10^3/22.1184) TH0=(65536-(1000*10^3/22.1184))/256 TL0=(65536-(1000*10^3/22.1184))%256

明光市17253674008: 用c语言编程实现C8051F300单片机1s定时,50Hz的方波输出 -
翠奇恒运: #include sbit wave=P1^0; void SetupTimer0() { TMOD &= 0XF0; //仅保留T1信息 TMOD |= 0X02; //设置T0: 定时功能,方式2,自动重载8位定时器/计数器 TH0 = 256-250;//定时每0.25ms中断一次 TL0 = 256-250; TR0 = 1; //开启定时器 ET0 ...

明光市17253674008: 单片机中用C语言怎么设置TOMD,模式0,1,2,3,对应的定时器0,1,求大神帮忙 啊 -
翠奇恒运: 那得看你用什么单片机,51单片机的话有两定时器T0和T1; TMOD是一个八位的寄存器,分别对应两个定时器的一些状态,如工作方式、启动方式的设置,设置TMOD时是字节寻址,就是直接写一个字节. 如:如果我要使用T0定时器,让它工作在方式1、软件启动; TM0D=0x01;

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网