當前位置:首頁 » 編程語言 » 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