|
玩的51系列對(duì)吧? 你現(xiàn)在估計(jì)才剛開(kāi)始接觸單片機(jī).記住一個(gè)重點(diǎn),重中之重:不要用delay_延時(shí).不要用delay_延時(shí).不要用delay_延時(shí).
現(xiàn)在給你一個(gè)思路,你可以做下參考.
void main (void)
{
POWER_INITIAL(); //單片機(jī)初始化:IO口輸出輸入定義;上下拉設(shè)置;IO口初始電平;單片機(jī)晶振頻率選擇,晶振頻率根據(jù)需要選
//合適的頻率.選好之后后面需要用到的都是在選的頻率之上計(jì)算
TIME0_INITIAL(); //定時(shí)器初始化設(shè)置.這個(gè)開(kāi)中斷,設(shè)置4MS一次定時(shí)中斷.后面所有的計(jì)數(shù)都是在4MS以上進(jìn)行計(jì)算的
//比如你要延時(shí)1秒,直接用變量累加,累加到250次的時(shí)候執(zhí)行你延時(shí)1秒之后的程序,沒(méi)有累加到1S的時(shí)候
//可以執(zhí)行其它程序,因?yàn)閐elay延時(shí)程序是在哪里空跑,其它的程序跑不了,用變量延時(shí),可以跑其它的程序,
//比如我按鍵還沒(méi)有到的時(shí)候我可以執(zhí)行燈里面的程序.
TIME1_INITIAL(); //模擬蜂鳴器的定時(shí)4K的頻率,125US進(jìn)一次中斷,進(jìn)一次翻轉(zhuǎn)一直蜂鳴器電平,組成一個(gè)250US,4K頻率的蜂
//鳴器方波
WTD_INITAL(); //看門(mén)狗初始化 ,這個(gè)我不知道C51系列用到?jīng)]有但是前面的肯定是用到了
//開(kāi)T0 定時(shí)器中斷 //這個(gè)我沒(méi)有玩過(guò)C51不知道那一段代碼
//開(kāi)T1 定時(shí)器中斷 //
//開(kāi)總中斷.
while(1)
{
if(F_4MS)
{
F_4MS=0;
//清看門(mén)狗程序 //這一段代碼是清看門(mén)狗的,防止看門(mén)狗復(fù)位
//////////////////////// //下面是所有程序的子函數(shù),你把子函數(shù)模塊寫(xiě)好嵌套進(jìn)去就可以了
KEY_SCAN(); //按鍵掃描
LED_DISPLAY(); //指示燈
PWM_OUT(); //馬達(dá)輸出
}
}
}
因?yàn)槲也皇菍?xiě)C51的.但是我寫(xiě)的都是51內(nèi)核的.和它差距不大.所以整體上是一個(gè)思路.這是出來(lái)工作后的思路, 你的那個(gè)思路學(xué)習(xí)可以.但是想要學(xué)習(xí)好,學(xué)習(xí)精,你那個(gè)思路要把不好的去掉. 因?yàn)槲覜](méi)有玩過(guò)51,我只看了它的教程,所以不知道定時(shí)器怎么配,下面是中斷函數(shù)處理:
void interrupt(void)
{
//T0中斷處理
//這個(gè)T0主程序定時(shí)的到了之后把4_4MS這個(gè)標(biāo)志位置1;下面while(1)哪里就是靠這個(gè)標(biāo)志位來(lái)進(jìn)入主程序里面的子程序模塊
F_4MS=1;
//T2處理 模擬蜂鳴器的
//51的我不知道到了之后有沒(méi)有標(biāo)志位什么的,你只需要把下面這個(gè)放到T2中斷里面去就可以了
if(F_BELL_WORK)
{
P_BELL=!P_BELL;
}
}
void TIME0_INITIAL(void)
{
//操作T0定時(shí)器中斷的寄存器,讓它定時(shí)為4MS進(jìn)一次中斷
}
void TIME2_INITIAL(void);
{
//操作T2定時(shí)器中斷的寄存器,讓它定時(shí)為125US進(jìn)一次中斷
}
可能寫(xiě)的有點(diǎn)亂. 但是我想這個(gè)你應(yīng)該能看懂 |
|