網路城邦
上一篇 回創作列表 下一篇   字體:
STC15F2K60S2-28 與 STC15W4K56S4-30 使用ISP設定內部XTAL頻率的程式分享
2019/10/19 12:59:04瀏覽509|回應0|推薦0

STC15F2K60S2-28 與 STC15W4K56S4-30 使用ISP設定內部XTAL頻率的程式分享


 跨別半年乾眼症發作後,無法壓抑內心想將苦心研究的MCU程式,只藏在內心之中,只好重新提筆將這個月研究的部份,再次發表之,敬告各位,未來有機會與尚有能力時,仍會發表新作,但是次數將大幅減才少,還請見諒。
 本次發表之主題"STC15F2K60S2-28 與 STC15W4K56S4-30 使用ISP設定內部XTAL頻率的程式",主要是針對之前使用這兩款STC系列中的51強化版的特性,期望再提升其運算速率至最頂峰,一方面STC在再兩款內部提供了在ISP下載程式時,可以設定運作的頻率,但是過去使用外部XTAL時,往往常用的兩個選擇是11。0592Mhz與22。000Mhz,因為此兩個頻率可配合UART的BAUDRATE 9600與115200,所以當同時有用到UART,就會被限定在那兩個XTAL的頻率,所以才在構思如何突破此限制,而且能維持使用115200 BAUDRATE的環境。
 發表重點:
 1)XTAL頻率依ISP選擇可使用之最高頻率。
 2)UART使用的BAUDRATE為115200bps
一) STC—ISP於燒錄時之設定選項

 
以上圖示中,分別標示了3個選擇的重點,此為使用STC15F2K60S2—28的機型,勾選為使用內部RC頻率為27。000Mhz,與松型。

下圖則是另一款STC15W系列的設定,XTAL頻率是選擇了30MHZ,
機型是STC15W$K56S4—30,BAUDRATE為115200。
 


二)程式部份
 程式方面在 STC15F 與 STC15W 兩種不同的MCU機型在TIMER 2的有些暫存器設定丘會不同
#define BAUDRATE 115200
#define XTAL  27000000 // FOR STC15F2K60S2-28系列
sfr AUXR = 0x8e; //輔助寄存器
sfr T2H = 0xd6; //定時器2高8位
sfr T2L = 0xd7; //定時器2低8位

sfr P_SW1 = 0xA2; //外設功能切換寄存器1

#define S1_S0 0x40 //P_SW1.6
#define S1_S1 0x80 /​​/P_SW1.7
void main()
{
    ACC = P_SW1;
    ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0
    P_SW1 = ACC; //(P3.0/RxD, P3.1/TxD)

..........................
PCON2 &= 0xf8;  //only for STC15F2K60S2
Init_Timer2();  // UART 1
.........................
}

/*------------------------------------------------
  計時器 2 的初始化 for UART   115200,8,n,1 ( STC15F2K60S2適用)
------------------------------------------------*/
void Init_Timer2(void)  // 計數器 2 的初始化
{
 SCON = 0x50;   //8bits,n,1p Baudrate changeble
 AUXR  = 0x94;   // Timer 2 開始計時
 AUXR |= 0x01;
 T2H=(65536-XTAL/4/BAUDRATE)>>8;
 T2L=(65536-XTAL/4/BAUDRATE);
 
 IE2 = 1;    //
 ET2 = 1;       
}

===========================================
另外使用ST15W4K56S4-30的機型之程式如下:
#define BAUDRATE 115200
#define XTAL  30000000 // FOR STC15W4K56S4-30系列
void main()
{
 PCON2 &= 0xf8;  //only for STC15W4K32S4
 
 P_SW1 &= ~S1_S0;  //S1_S0=0 S1_S1=0
 P_SW2 &= ~S1_S1;  //(P3.0/RxD, P3.1/TxD)
 P_SW2 &= ~S2_S;  //S2_S=0x01 (P1.0/RxD2, P1.1/TxD2)
 P_SW1 &= ~SPI_S0;  //SPI_S0=0 SPI_S1=0
 P_SW2 &= ~SPI_S1;  //(P1.2/SS, P1.3/MOSI, P1.4/MISO, P1.5/SCLK)
 P_SW2 &= ~S3_S;  //S3_S(P0.0/RxD3, P0.1/TxDS3)
 P_SW2 &= ~S4_S;  //S4_S(P0.2/RxD4, P0.3/TxDS4)
 P0M1=0;P0M0=0;
 P1M1=1;P1M0=1;
 P2M1=0;P2M0=0;P3M1=0;P3M0=0;P4M1=0;P4M0=0;  //for STC15W4K56S4 I/O setting
 P5M1=0;P5M0=0;P6M1=0;P6M0=0;P7M1=0;P7M0=0;  //初始化 I/O PORT
 Init_Timer2();  // UART 1
...................
}

/*------------------------------------------------
  計時器 2 的初始化 for UART 115200,8,n,1 @30Mhz
------------------------------------------------*/
void Init_Timer2(void)  // 計數器 2 的初始化
{
 S2CON = 0x53;   //8bits,n,1p Baudrate changeble
 AUXR  = 0xf5;   // Timer 2 開始計時
 T2H=(65536-XTAL/4/BAUDRATE)>>8; 
 T2L=(65536-XTAL/4/BAUDRATE);
 
 IE2 = 1;    //
 ET2 = 1;      
}
三) 測試結果
 在實測時,這兩款MCU的頻率不同下,雖然用邏輯分析儀量測每個bit的時間數與原先使用XTAL=22。1184Mhz時略為不同,但是誤差很小,仍在可控制範圍,實際傳輸時,都能完整收發訊息無誤。
 各位來訪的同好,敬請原諒,過往沒有乾眼症問題時,可以盡其所能將文章登打的愈詳細愈好,但是如今愈來愈吃力,往後就只能提重點,請自行各位再自行深入了解。
PS:乾眼症之問題,從新聞中,已有醫生表示患者愈來愈多,有些與3C重度使用者有關,大家不要忽視,必竟發生時,是非常辛苦,影響生活甚巨,個人在此期間醫生有交代,要勤於點人工淚液以緩和乾澀與酸累的感覺,夜間睡前更是不能忘了點藥膏,再者就是要多熱敷眼睛,因此在PCHOME購得一只"USB定時調溫遠紅外線草本熱敷眼罩",使用上很方便,可供各位參考。
 

 

( 興趣嗜好電腦3C )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=PYANG&aid=130167177