STC15系列例程總結(jié) 1、利用軟件實(shí)現(xiàn)精確延時(shí)方法:利用循環(huán)指令輸出方波,用示波器測(cè)量方波周期 2、子函數(shù)中定義static類型變量,可以使得變量保存住變量值 3、LED_PORT=~(0x01<<i);在i=0時(shí)等價(jià)于:LED_PORT=~0x01;i=1、2、3...的分析類似 4、宏定義 //端口操作定義 #define SET 1 //高電平 #define CLR 0 //低電平 //端口操作 #define HC595_DAT_Clr() {HC595_DAT=CLR;} #define HC595_DAT_Set() {HC595_DAT=SET;} 5、temp=dis; temp=temp<<8| dig; temp為int類型,該語(yǔ)句實(shí)現(xiàn)將兩個(gè)8位變量合并成一個(gè)16字節(jié)變量 6、芯片工作之初應(yīng)加幾ms的延時(shí),等待芯片上電穩(wěn)定 7、DispTemp[4]=Low_Dat/1000; //低四位千位 DispTemp[5]=Low_Dat%1000/100; //低四位百位 DispTemp[6]=Low_Dat%100/10; //低四位十位 DispTemp[7]=Low_Dat%10; //低四位個(gè)位 8、P3=P3|0x1c;要讀入P3.2、P3.3、P3.4三個(gè)端口先置高,51單片機(jī)端口做輸入必須先置高 9、IAP_CONTR=0x60; //啟動(dòng)下載 當(dāng)STC單片機(jī)上電啟動(dòng)后,會(huì)先運(yùn)行內(nèi)部的ISP監(jiān)控程序,判斷是否有下載命令,如果有,則下載程序。否則運(yùn)行用戶程序。當(dāng)上位機(jī)發(fā)送下載命令時(shí)P30引腳會(huì)出現(xiàn)下降沿低電平。所以在程序中檢測(cè)P30腳是否有低電平,如果有低電平,就通過(guò)軟件向單片機(jī)的IAP_CONTR控制寄存器中寫入60H即可啟動(dòng)ISP監(jiān)控程序。 10、IAP_CONTR =0x20; //軟件復(fù)位,并且從用戶程序開始執(zhí)行。 11、WDT_CONTR =0x3e; // 0011,1110 EN_WDT =1,CLR_WDT = 1,IDLE_WDT = 1,PS2 = 1,PS1 = 1,PS0 = 0 // EN_WDT = 1:啟動(dòng)看門狗定時(shí)器 // CLR_WDT = 1:看門狗將重新計(jì)數(shù) // IDLE_WDT = 1:,看門狗定時(shí)器在“空閑模式”計(jì)數(shù) // PS2 = 1,PS1 = 1,PS0 = 0:定時(shí)4.5511 S @f=11.0592MHz WDT_CONTR |= 0x10; // CLR_WDT = 1:看門狗將重新計(jì)數(shù) 12、STC15系列單片機(jī)有四種端口模式:準(zhǔn)雙向口、強(qiáng)推挽輸出、僅為輸入和開漏結(jié)構(gòu),復(fù)位后默認(rèn)為準(zhǔn)雙向口。 P0M1=0xf0; //1111 0000 P0M0=0xcc; //1100 1100 端口設(shè)置結(jié)果: P0.0和P0.1為準(zhǔn)雙向口,P0.2和P0.3為強(qiáng)推挽輸出,P0.4和P0.5僅為輸入,P0.6和P0.7開漏 結(jié)果現(xiàn)象分析:準(zhǔn)雙向口吸收電流能力強(qiáng),輸出電流能力差;強(qiáng)推挽輸出吸收電流和輸出電流能力強(qiáng);僅為輸入為高阻,無(wú)法吸收電流;開漏吸收電流能力強(qiáng)。由于開發(fā)板的電路結(jié)構(gòu)吸收電流的端口接的LED才亮,故接在P0.4和P0.5的端口的LED不亮,其他的都亮。 13、所謂有源和無(wú)源是指蜂鳴器內(nèi)部是否有自帶的振蕩電路。無(wú)源蜂鳴器內(nèi)部沒有振蕩電路,通過(guò)端口給它施加一定的頻率驅(qū)動(dòng),不同的頻率可以發(fā)出不同的音調(diào)。而有源蜂鳴器內(nèi)部自帶頻率固定的振蕩電路,一加電就會(huì)發(fā)出固定音調(diào)的聲音,無(wú)法發(fā)出各種不同的音調(diào)。 14、PCON|=0x02; //單片機(jī)進(jìn)入休眠掉電模式,可由外部中斷喚醒 15、CCON=0x80; //初始化PCA控制寄存器 //停止PCA計(jì)數(shù)器 //清除CF標(biāo)記 //清除PCA各個(gè)模塊中斷標(biāo)記 CCAPM0=0x49; //初始化PCA的比較/捕獲寄存器0 //允許比較功能 //比較匹配時(shí)CCF0中斷 CL=0; //清除PCA計(jì)數(shù)器 CH=0; CCAP0L=0x00; //定時(shí)初值50ms 11.0592MHz CCAP0H=0xb4; CMOD=0x80; //設(shè)置PCA計(jì)數(shù)器時(shí)鐘源為Fosc/12 //PCA計(jì)數(shù)器空閑模式停止計(jì)數(shù) //禁止PCA計(jì)數(shù)溢出中斷 16、定時(shí)器不可屏蔽的16位自動(dòng)重裝方式為stc15系列單片機(jī)特有,移植到其他類型單片機(jī)可能不適用。該不可屏蔽中斷的自動(dòng)重裝定時(shí)功能很有用。當(dāng)單片機(jī)使用操作系統(tǒng)的時(shí)候可作為系統(tǒng)的時(shí)基。 TMOD |=0x03; //T0工作于不可屏蔽的十六位自動(dòng)重裝定時(shí)方式,/使用位操作,避免對(duì)其他定時(shí)器產(chǎn)生影響 17、P54端口可以輸出時(shí)鐘信號(hào),輸出分頻多少由CLK_DIV中的MKCO_S1、MKCO_S0控制,輸出的時(shí)鐘不超過(guò)13.5MHz,這是由于STC單片機(jī)端口的性能決定的。CLK_DIV中的CLKS2、CLKS1、CLKS0控制單片機(jī)內(nèi)部工作時(shí)鐘的頻率。 18、單片機(jī)串口1可以選擇定時(shí)器T1或T2為波特率發(fā)生器。單片機(jī)串口2單片機(jī)的第二個(gè)串口。通過(guò)DB9插頭輸出。該第二串口只能選擇定時(shí)器2作為波特率發(fā)生器,不能使用定時(shí)器1做為波特率發(fā)生器。 19、該RS485接口使用的是單片機(jī)的串口2使用定時(shí)器2做為串口2的波特率發(fā)生器選擇波特率9600,8位數(shù)據(jù)位,1位停止位,無(wú)校驗(yàn)。詳細(xì)操作見左側(cè)Doc目錄下的readme文件,單片機(jī)串口為TTL電平,RS485只是硬件上將TTL 轉(zhuǎn)換成RS485電平,程序上與串口程序大體相同。 20、PCA用到以下特殊功能寄存器:CMOD、CCON、CCAPMn、PCA_PWMn、CH、CL、CCAPnH、CCAPnL、AUXR1 21、PWM產(chǎn)生一定占空比波形 CCON=0; //初始化PCA控制寄存器,停止PCA計(jì)數(shù)器,清除CF標(biāo)記,清除PCA各個(gè)模塊中斷, CL=0; //清除PCA計(jì)數(shù)器 CH=0; CMOD=0x82; //設(shè)置PCA計(jì)數(shù)器時(shí)鐘源為Fosc/2,PCA計(jì)數(shù)器空閑模式停止計(jì)數(shù),禁止PCA計(jì)數(shù)溢出中斷 CCAP1H=CCAP1L=0x80;//PWM0端口輸出50%占空比方波,8位PWM模式最大為256,一半為128,即0x80 CCAPM1=0x42;//PCA模塊0工作于8位PWM模式,允許比較器功能,允許PWM輸出,禁止CCF0中斷 22、 |