本文目錄一覽:
- 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++;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/187112.html