1. 程式人生 > >鬆翰微控制器--SN8F5702學習筆記(二)HelloWorld

鬆翰微控制器--SN8F5702學習筆記(二)HelloWorld

第一個程式的基本流程

1、時鐘初始化、看門狗配置

注意:對於用C語言或組合語言開發的程式,程式的第一行“必須設定”CKCON=0x70,然後設定CLKSEL=0x07~ 0x00,CLKMD=0x69,CKCON=0x00 ~ 0x70,這個優先順序不能修改

 為了節能的目的,微控制器內建三種不同的執行模式:

  • 正常模式:正常模式是指CPU和外圍功能正常執行,系統時鐘基於源選擇、時鐘分頻器和程式儲存器等待狀態的組合
  • IDLE模式:IDLE模式是暫時暫停CPU時鐘及其執行的情況,但它仍然處於危險狀態。EALL的功能(例如定時器、PWM、SPI、UART和I2C)
  • STOP模式
    :STOP模式禁用所有函式和時鐘生成器,直到喚醒訊號返回正常模式

 微控制器包括片上時鐘發生器(IHC 32 MHz)。重置和電源接通控制器在電源接通序列期間自動載入時鐘源選擇配置。因此,所選擇的時鐘源被視為“fosc”域,在任何時候都是固定頻率。

隨後,選擇時鐘源(fosc)除以1-128次,由CLKSEL暫存器控制。CPU輸入分割的時鐘作為其操作基礎(命名為fcpu)。當CLKCMD暫存器被寫入0x69時,應用CLKSEL的設定。

在這裡插入圖片描述

CLKSEL (fosc=32M) fcpu
000 : (0x00) fosc/128
001 : (0x01) fosc/64
010 : (0x02) fosc/32
011 : (0x03) fosc/16
100 : (0x04) fosc/8
101 : (0x05) fosc/4
110 : (0x06) fosc/2
111 : (0x07) fosc/1
    CKCON  = 0x70;					// From = 8M
CLKSEL = 0x07; // Fcpu = 32M/1 CLKCMD = 0x69; // Clock switch start WDTR = 0x5A; // 如果看門狗使能了就清空看門狗
void main(void)
{
    uint8_t tmp;
    
    CKCON  = 0x70;					// From = 8M
    CLKSEL = 0x07;					// Fcpu = 32M/1
    CLKCMD = 0x69;					// Clock switch start
    WDTR   = 0x5A;           		// 如果看門狗使能了就清空看門狗

    P0 = 0x20;        								// UTX pin set high
    P0M = 0x20;     									// UTX is output, URX is input
    P0UR = 0xFF;

    P1 = 0;
    P1M = 0;
    P1UR = 0xFF;

    P2 = 0;
    P2M = 0;
    P2UR = 0xFF;

    UART_Init();
    UART_WriteOneByte('1');

    while (1)
    {
        WDTR = 0x5A;           						// clear watchdog if watchdog enable

//		    UART_WriteOneByte(0X33);
        if(u8RxBufLength1!=u8RxBufLength)	//Èç¹ûÊÕµ½Êý¾Ý
        {
            tmp=u8RxBuf[u8RxBufLength1++];	//·¢ËÍÊÕµ½µÄÊý¾Ý
            UART_WriteOneByte(tmp);
            if (u8RxBufLength1 >= BufSize)  //È¡Ö¸Õ볬¹ýÉ趨ֵ£¬´Ó0¿ªÊ¼È¡Êý¾Ý£¬Ö¸Ïò0
            {
                u8RxBufLength1 = 0;
            }
        }
    }
}