|
|
本帖最后由 鬼推磨 于 2020-3-11 17:57 編輯
成功了,
經(jīng)過(guò)反復(fù)測(cè)試修改,。終于找到問(wèn)題。糾正了,。下面是正確的代碼了,
以后寫(xiě)程序就可以使用定時(shí)器來(lái)做延時(shí),精準(zhǔn)可靠,放棄使用delay延時(shí)不準(zhǔn),
特別是新手可以借鑒下面的代碼。為這個(gè)問(wèn)題網(wǎng)上找資料搞了好幾天了,
#include "reg52.h"
#define uchar unsigned char
typedef unsigned int u16; //對(duì)數(shù)據(jù)類(lèi)型進(jìn)行聲明定義
typedef unsigned char u8;
u16 a =0;//計(jì)中斷次數(shù)的全局變量
sbit led=P2^6;
sbit led1=P2^7;
//晶振頻率是11.0592M,可算出,計(jì)數(shù)脈沖個(gè)數(shù)是921個(gè)=1ms
//TH0=(65536-921)/256=252=0xFC
//TL0=(65536-921)%256=103=0x67
////////T0定時(shí)器///////////////////
void Timer0Init()//晶振頻率是11.0592M
{
//0X00:0 0 方式0 13位計(jì)數(shù)器
//0X01:0 1 方式1 16位計(jì)數(shù)器
//0X10:1 0 方式2 自動(dòng)重裝8位計(jì)數(shù)器
//0X11:1 1 方式3 T0分為2個(gè)8位獨(dú)立計(jì)數(shù)器,T1為無(wú)中斷重裝8位計(jì)數(shù)器
TMOD|=0X01;// 工作方式1,16位計(jì)數(shù)器。此處0X01;下面定時(shí)1000就是1秒,若設(shè)置為0X10下面1000就是0.1秒
TH0=0XFC; //給定時(shí)器賦初值,定時(shí)1ms
TL0=0x67;
ET0=1;//打開(kāi)定時(shí)器0中斷允許
EA=1;//打開(kāi)總中斷
TR0=1;//打開(kāi)定時(shí)器
}
void main()
{
Timer0Init(); //定時(shí)器0初始化
while(1)
{
led=0;//亮
TR0=1;//打開(kāi)定時(shí)器0
while(a!=1000); //1000 次中斷是1000ms=1s
TR0=0; //關(guān)閉定時(shí)器0
a=0; //中斷計(jì)數(shù)清零
led=1;//滅
TR0=1;//打開(kāi)定時(shí)器0
while(a!=1000); //1000 次中斷是1000ms=1s
TR0=0; //關(guān)閉定時(shí)器0
a=0;//中斷計(jì)數(shù)清零
led1=0;//亮
TR0=1;//打開(kāi)定時(shí)器
while(a!=1000); //1000 次中斷是1000ms=1s
TR0=0; //關(guān)閉定時(shí)器0
a=0;//中斷計(jì)數(shù)清零
led1=1;//滅
TR0=1;//打開(kāi)定時(shí)器0
while(a!=1000); //1000 次中斷是1000ms=1s
TR0=0; //關(guān)閉定時(shí)器0
a=0;//中斷計(jì)數(shù)清零
}
}
//中斷程序:
void Timer0() interrupt 1//晶振頻率是11.0592M
{
TH0=0XFC; //給定時(shí)器賦初值,定時(shí)1ms
TL0=0x67;
a++;
}
、、、
//////////////////////////////////////////////////////
新問(wèn)題來(lái)了:吧上面void main()里面代碼換成下面的,
下面代碼只是加了個(gè)按鍵IF判斷。
里面定時(shí)中斷延時(shí)就不執(zhí)行了,沒(méi)有反應(yīng)了,
這句代碼出問(wèn)題了while(k!=650); //650ms
不知何故,望大師們幫忙解答。,謝謝
void main()
{
Timer0Init(); //定時(shí)器0初始化
a=0;//清零
while(1)
{
if(k3==0)
{
delay(10);
if(k3==0)
{
k1=0;
TR0=1;
while(k!=650); //650ms
TR0=0;
k=0;
k1=1;
TR0=1;
while(k!=350); // 350ms
TR0=0;
k=0;
k1=0;
}
}
}
}
|
|