本文目录一览:
- 1、求单片机定时器简单程序(C语言)详解。不胜感激~
- 2、C语言编写的计时器源代码怎么编写?
- 3、利用定时/计数器产生定时时钟,由P1口控制8个指示灯,编写程序(c语言写),
- 4、设单片机系统的晶振为12MHz,要求使用定时计数器1,用C语言 编写程序实现?
- 5、介绍计数器 /定时器 程序 的编写步骤 (C语言的)
- 6、c51定时计数C语言代码
求单片机定时器简单程序(C语言)详解。不胜感激~
用定时器0中断做流水灯,程序如下:#includereg52.h#includeintrins.h //包含_crol_()循环左移函数
unsigned char temp,count;void init() //初始化函数{ TMOD=0x01;//设置定时器0为工作方式1 TH0=(65536-50000)/256;//装初值,高8位 TL0=(65536-50000)%256;//装初值,低8位 EA=1;//开总中断 ET0=1;//开定时器0中断 TR0=1;//启动定时器0 temp=0xfe; count=0;//记数值清0}void main(){ init(); while(1){ P1=temp;}}void timer0() interrupt 1 using 1 //定时器0中断函数{ TH0=(65536-50000)/256;//重装初值,同上 TL0=(65536-50000)%256; count++;//计数值加1 if(count==10)//500ms{ count=0;//计数值清0 temp=_crol_(temp,1);循环左移一位}
C语言编写的计时器源代码怎么编写?
几天前写了个大概
你做个参考把
#includestdio.h
void
main()
{
float
x,y;
char
fuhao;
pintf("请输入第一个数:\t请输入运算符:\t,请输入第二个数:\n");
scanf("%f,%c,%f",x,fuhao,f);
if(fuhao=='+')printf("%f,%c,%f=%f\n",x,fuhao,y,x+y);
else
if(fuhao=='-')printf("%f,%c,%f=%f\n"x,fuhao,y,x-y);
else
if(fuhao=='*')printf("%f,%c,%f=%f\n"x,fuhao,y,x*y);
else
if(fuhao=='/')
{
if(y==0.0)printf("分母不能为0\n");
else
printf("%f,%c,%f=%f\n"x,fuhao,y,x/y);
}
}
利用定时/计数器产生定时时钟,由P1口控制8个指示灯,编写程序(c语言写),
#include reg51.h // 单片机头文件
void delay(void)
{
unsigned char ov_times; // 延时时间计数
TMOD=0x01; // 设置定时器0工作在方式1
TH0= OXBE; // 12Mhz
TL0=OXE0;
TR0=1; // 启动定时器
ov_times=50; // 设置延时时间计数值
while(ov_times!=0) // 查询是否到延时时间
{
if(TF0==1) // 查询定时器计数是否溢出
{TH0=OXBE;TL0=OXE0;TF0=0;ov_times--;}// 重置初值,清除溢出位 }
TR0=0; // 关闭定时器
}
void main()
{
while(1)
{
P1=_crol_(P1);
delay(); // 延时
}
你要告诉我你的单片机的时钟频率,不然没法计算计数初值的
设单片机系统的晶振为12MHz,要求使用定时计数器1,用C语言 编写程序实现?
系统晶振为12MHz时,定时器的计数脉冲周期即为 1uS;
要求输出周期为200us,占空比为50% 的方波,即方波的高电平时间=100uS,低电平时间=100uS。
所以每定时100uS便产生一次中断,并将输出信号状态翻转一次;
sbit cp=P1^7;
void timer1 interrupt 3
{ cp=~cp; }
void main()
{
TMOD=0x20; // 定时器1采用方式2 进行定时;
TH0=256-100; //定时100uS;
TL0=TH0;
EA=1;ET1=1;TR1=1;
cp=1;
while(1){}
}
介绍计数器 /定时器 程序 的编写步骤 (C语言的)
假设你用的晶振为12m,用p1.0口输出周期为2ms的方波。使用定时器工作方式1.
至于计数初值的计算,授之以鱼不如授之以渔!
在定时器模式下,计数器的计数脉冲来自于晶振脉冲的12分频信号,即对机器周期进行计数。若选择12m晶振,则定时器的计数频率为1mhz。假设定时时间为t,机器周期为t1,即12/晶振频率。x为定时器初值。则
x=2^n-t/t1。方式0,n=13,方式1时,n=16,方式2和方式3,n=8
自己算去吧!
#include
void
inittimer0(void)//
{
tmod
=
0x01;
th0
=
0x0fc;
//计数器初值
tl0
=
0x18;
ea
=
1;
et0
=
1;
tr0
=
1;//开启定时器t0
}
void
main(void)
{
inittimer0();
}
void
timer0interrupt(void)
interrupt
1
{
th0
=
0x0fc;//重新赋初值
tl0
=
0x18;
p1.0=~p1.0;
//输出方波
}
c51定时计数C语言代码
#includereg51.h
#includeINTRINS.h
#define u16 unsigned int
#define u8 unsigned char
/*********************************************************/
u8 ds[3]; //数码管显示缓存
//共阳
code u8 w[]={0x01,0x02,0x04,0x08}; //位码
code u8 d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};//断码
void dispaly(){//显示函数
static u8 a;
if(++a=3)a=0;
P0=0xff;
P2=w[a];
P0=d[ds[a]];
}
/****************************************/
void init() //初始化函数
{ TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
}
u16 count=0; //计数
u16 V=0;//速度
u16 js;//计时
u8 mc=P1^1;//脉冲引脚
u8 tt=0xff;
void smmc(){
tt=1;
if(mc)tt|=0x01;
if((tt0x03)==0x02){//下降沿脉冲
if(count65535)count++;
}
}
/***********************************/
void main()//主函数
{
init();//系统初始化
TR0=1; //定时器开始计时
while(1){
ds[0]=V/100%10; //计数送到数码管显示缓存中
ds[1]=V/10%10;
ds[2]=V%10;
smmc();
if(js=10000){//10s
js=0;
V=4*count/10+2;//计算速度
count=0;
}
}
}
/****************************/
void timer0() interrupt 1//1ms定时器
{
TH0=(65536-1000)/256;//重载初值
TL0=(65536-1000)%256;
dispaly();//显示
js++;
}