当前位置:首页 » 编程语言 » C语言t0
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

C语言t0

发布时间: 2022-05-20 14:05:00

㈠ 求大神帮忙:T0外部计数3个中断一次,中断处理中让p1口和p2口分别显示T0中断次数的信息。c语言编程,谢谢

#include <reg52.h>

unsigned int INT_n=0; //中断次数

unsigned int CON_n=0; //计数次数


void main()

{

P1=0;P2=0; //关闭显示

TMOD= 0x05; //设置T0为方式1,即16位计数器

TH0 = 0xff; //高8位初值填满

TL0 = 0xfd; //低8位预留3次

EA=1;ET0=1; //开中断

TR0 = 1; //启动

while(1); //无限循环,等待中断发生

}


void t0_count() interrupt 1

{

TH0 = 0xff; //重装高8位初值填满

TL0 = 0xfd; //重装低8位预留3次

INT_n++; //中断次数+1

CON_n+=3; //计数次数+2

P1 = INT_n; //中断次数送P1口显示

P2 = CON_n; //计数次数送P2口显示

}

㈡ 求一个51单片机用T0做计数器的C语言代码。

//timer0设定为计数器模式1
TMOD &= 0xf0; //清除原来的设定
TMOD |= 0x05; //T0为计数器模式1
TH0 = 0;
TL0 = 0; //从0开始计数
TR0 = 1; //使能T/C0
// IE |= 0x82; //Timer0中断使能,不需要就注释掉该行
另外执行不了有可能是你的实验板没有连接T0引脚

㈢ c语言为什么用定时器输出的频率不能作的很高如16兆晶振用 t1或 t0作定时器 p

是单片机吗?输出频率的高低与C还是汇编语言没有关系,与单片机本身有关,之所以不是很高,是由于单片机的定时器受限于内部周期,比如普通的51,机器周期是晶振的12分频,所以其输出频率不会高于晶振的1/12,再加上用定时器,溢出后输出才能进行取反操作,所以实际上输出频率最多只能是是晶振频率的1/24

㈣ c语言时间限制

" 运行一个语句一段时间(如3分钟)。" --
这个语句 或程序块 需要 的执行 时间 是多少?
如果 这个 语句 或程序块 执行 需要 的 时间 长于 3 分钟,那么 这个 语句 或程序块 中 需要 嵌入 时间 测定 语句。
如果 时间 短于 3 分钟,你需要 加入 等待。
----------
等待函数:
void wait_ms ( int ms )
{
clock_t endwait;
endwait = clock () + ms;
while (clock() < endwait) {}
}

c 语言 时间:
clock_t t0, t1,t;
int dt;
dt = 3*60*1000; // 3分钟 == 毫秒数
if ( 满足条件了){
t0 = clock (); //开始时刻 毫秒
t1 = t0 + dt; //目标终止 时刻
这里执行语句或程序块,假定 时间 短于 3 分钟
t = t1 - clock (); // 等待时间 毫秒数
wait_ms(t); // 等待
}
===============
执行语句或程序块,假定 时间 长于 3 分钟 , 执行语句或程序块中要 嵌入:
t = clock();
比较 t 与 目标 t1 , if (t>=t1) 终止 程序。
===================================
一般这类程序 要用 c++ . 定时控制 用 timer ( 定时器) 或
运行 线程:
std::thread xc1 (foo,t0,3);
时间控制,到时间则 关闭线程。

㈤ 51单片机使用T0和T1外部脉冲计数,C语言如何编程

1、使用T0和T1外部脉冲计数,控制两个电机,到1700个脉冲电机停止,
--统计脉冲个数,用外部中断更好。
--T0和T1,留着定时用。
用四个按键控制,按键1控制电机正转,按键2控制电机反转,按键3控制电机1正转,按键4控制电机2正转。


2、例程:

#include<reg51.h>
sbitk1=?;//自己定义
sbitk2=?
sbitk3=?
sbitk4=?
sbitDIAN1=?
sbitDIAN2=?
sbitDIAN3=?
sbitDIAN4=?
sbitSEN1=?
sbitSEN2=?
voiddelay(unsignedintx)
{
unsignedintm,n;
for(m=x;m>0;m--)for(n=115;n>0;n--);
}
voidmain(void)
{
TMOD=0x55;
IE=0x8a;
while(1){
if(!k1){
delay(10);
if(!k1){
while(!k1);
TH0=(65536-1700)/256;
TL0=(65536-1700)%256;
SEN1=0;
DIAN1=0;DIAN2=1;
SEN1=1;
TR0=1;
}
}
if(!k2){
delay(10);
if(!k2){
while(!k2);
TH0=(65536-1700)/256;
TL0=(65536-1700)%256;
SEN1=0;
DIAN1=1;DIAN2=0;
SEN1=1;
TR0=1;
}
}
if(!k3){
delay(10);
if(!k3){
while(!k3);
TH1=(65536-1700)/256;
TL1=(65536-1700)%256;
SEN2=0;
DIAN3=0;DIAN4=1;
SEN2=1;
TR1=1;
}
}
if(!k4){
delay(10);
if(!k4){
while(!k4);
TH1=(65536-1700)/256;
TL1=(65536-1700)%256;
SEN2=0;
DIAN3=1;DIAN4=0;
SEN2=1;
TR1=1;
}
}
}
}

㈥ c语言中,T0与T1的中断信号分别是多少

C语言中,定时器T0和T1要产生中断的话,需要初始化比如:
init()
{
TMOD=0x11
TH0=TH1=(65536-10000)/256
TL0=TL1=(65536-10000)%256;
TR0=1;
TR1=1;
ET0=1;
ET1=1;
EA=1;
}
之后中断号分别为:
T0:
voidt0isr()interrupt1
{...........}
T1:
voidt1isr()interrupt3
{............}

㈦ 用定时器T0 工作方式一 控制P0口 4个led实现流水灯,闪烁1秒,用C语言编

#include<reg51.h>
#defineucharunsignedchar
ucharcnt,pos;
ucharled[4]={0xfe,0xfd,0xfb,0xf7};
bitflag;
voidt0isr()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++;
if(cnt>=20)
{
cnt=0;
flag=~flag;
if(flag)
{
P1=led[pos];
pos++;
pos%=4;
}
elseP1=0xff;
}
}
main()
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}

㈧ 单片机c语言编程t0输入脉冲LCD显示计数

#include#defineuintunsignedintuintnum,num1;voidmain(){TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;while(1);}voidtime_t0interrupt1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;num++;if(num==设定时间为50ms的整数倍){TR0=0;返回数;}}

㈨ 用52单片机C语言编写程序,实现00~59计时。要求用T0,工作方式1。

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit la=P2^6; //段选
sbit wela=P2^7; //位选
uchar shi,ge,num1,num2; //变量
uchar code table[]={0x3f,0x06,0x5b,0x4f, //共阴极字型码
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint x) //延时子程序
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
void init()
{
TMOD=0x01; //设置定时器0的工作方式
TH0=(65536-50000)/256; //装初值
TL0=(65536-50000)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
}
void display() //显示子程序
{
la=1;
P0=table[ge]; //送段选数据
la=0;
P0=0xff; //送位选数据前关闭所有显示
wela=1;
P0=0xfe; //送位选数据
wela=0;
delay(5); //延时

la=1;
P0=table[shi];
la=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(5);
}
void main()
{
init();
while(1)
{
display();
}
}
void timer() interrupt 1
{
TH0=(65536-50000)/256; //重装初值
TL0=(65536-50000)%256;
num1++;
if(num1==20) //到了20次,1秒时间到
{
num1=0; //清0重新计数
num2++;
if(num2==60)
num2=0;
P1=0x00;
delay(500);
P1=0xff;
shi=num2/10; //把一个2位数分离后分别送数码管显示
ge=num2%10; //十位和个位
}
}

试了的,可以放心,采纳吧!

㈩ 关于单片机C语言的定时器T0,T1的问题

一般向上计数的单片机定时器,都是从当前值开始计数,一直计数到0xffff(65535)的时候,再来一个脉冲就产生溢出,所以初值一般都是用0x10000减去需要计数的值得来的,0x10000就等于十进制的65536