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