4.19 Fsys _ SLOW MODE HT66F70A
操作選擇結構
SMOD 控制暫存器 Bit [7:5] : CKS[2:0] 系統時脈選擇位元 Bit [4] : FSTEN 快速喚醒功能控制位元 NAME CKS2 CKS1 CKS0 FSTEN LTO HTO IDLEN HLCLK Bit 7 6 5 4 3 2 1 Bit [7:5] : CKS[2:0] 系統時脈選擇位元 僅HLCLK=「0」時有效,此時系統時脈為 : 000 : fsys=fSUB(fLXT或fLIRC) 100 : fsys=fH/16 001 : fsys=fSUB(fLXT或fLIRC) 101 : fsys=fH/8 010 : fsys=fH/64 110 : fsys=fH/4 011 : fsys=fH/32 111 : fsys=fH/2 Bit [4] : FSTEN 快速喚醒功能控制位元 1 = 致能快速喚醒功能 0 = 禁能快速喚醒功能 Bit [3] : LTO 低頻系統震盪器狀態旗標 1 = 低頻系統震盪器已經備妥 0 = 低頻系統震盪器尚未備妥 Bit [2] : HTO 高頻系統震盪器狀態旗標 1 = 高頻系統震盪器已經備妥 0 = 高頻系統震盪器尚未備妥
SMOD 控制暫存器 Bit [1] : IDLEN 「IDLE」模式控制位元 Bit [0] : HLCLK 系統時脈選擇位元 NAME CKS2 CKS1 CKS0 FSTEN LTO HTO IDLEN HLCLK Bit 7 6 5 4 3 2 1 Bit [1] : IDLEN 「IDLE」模式控制位元 1 = 致能「IDLE」模式 0 = 禁能「IDLE」模式 Bit [0] : HLCLK 系統時脈選擇位元 1 : fsys = fH 0 : fsys = fL或fH/2~ fH/64
SLOW MODE 設定HLCLK為「0」切換至SLOW MODE低速模式 設定CKS[2:0]選擇頻率
4.19 Fsys _ SLOW MODE #include <HT66F70A.h> #define SEG_Port _pc //DEFINE 7-SEG PORT #define SEG_PortC _pcc //DEFINE 7-SEG PORT CONTROL REG const u8 SEG_TAB[] = { //七段顯示碼(共陰) 0x3F,0x06,0x5B,0x4F,0x66, 0x6D,0x7D,0x07,0x7F,0x67}; typedef unsigned char u8; typedef unsigned short u16; void Delay100us(u16); //函式原型宣告 void Display029(void);
主程式 void main() { u8 Mode; _wdtc=0b10101111; //關閉看門狗計時器 SEG_Port=0; SEG_PortC=0; //將SEG_Port清為0並配置為輸出模式 while(1) { _hlclk=1; //HLCLK=1, fSYS=fH Display029(); Mode=0b10000000; //SMOD[7:5]由100遞增至111 do _smod&=0b00011110; //CKS[2:0]=000, HLCLK=0 _smod|=Mode; //依據Mode[7:5]更新CKS[2:0] Mode+=0b00100000; //更新Mode } while (Mode!=0); }
副程式 void Display029(void) //顯示0~9 { u8 i; for(i=0;i<10;i++) { SEG_Port=SEG_TAB[i]; //顯示資料 Delay100us(1000); //延遲 } void Delay100us(u16 del) //延遲del*200指令週期 u16 i,j; //@fSYS=8MH,延遲del*100us for(i=0;i<del;i++) for(j=0;j<=25;j++) GCC_NOP();