upD79F8513A(NEC)或upD78F0511A(NEC)之初始化外部8M晶振做系統時鐘




本篇博文最後修改時間:2017年09月14日 19:04。




一、簡介

本文以upD79F8513A(NEC)或upD78F0511A(NEC)編程爲例,介紹upD79F8513A(NEC)或upD78F0511A(NEC)初始化外部8M晶振做系統時鐘。


二、實驗平臺

電腦平臺:Windows7 64位旗艦

編譯軟件:PM+ V6.30

硬件平臺:upD79F8513A(NEC)或upD78F0511A(NEC)



三、版權聲明

博主:_懵懂

聲明:此博客僅供參考不做任何商業用途,最終解釋權歸原博主所有。

原文地址:http://blog.csdn.NET/qq_18842031

QQ:951795235

E-mail [email protected]

懵懂之MCU交流羣:136384801




四、實驗前提

1、在進行本文步驟前,請先安裝PM+ V6.30版本;準備好upD79F8513A(NEC)或upD78F0511A(NEC)硬件平臺。

         

五、基礎知識

暫無


六、源碼地址

暫無


七、關聯文章

鏈接:暫無



八、實驗內容

1.系統時鐘初始化爲外部8M

void Init_OST(void)
{
  uint8 ucR_StabSet, ucR_StabWait;

  IMS    = 0x04;           //0511--04    8513--C8   0537--CC   內部存儲器容量切換寄存器的設置
  IXS    = 0x00;           //內部擴展 RAM 容量切換寄存器 (IXS) 的設置
  OSCCTL = 0x40;                   /* X1/X2 input mode 選擇晶振模式外部晶振 X1*/
  MOC &= ~0x80;                    /*允許使用來自 EXCLK 引腳的外部時鐘*/
  ucR_StabSet = 0x1F;             /*振盪穩定時間計數器的狀態*/
  do
  {
      ucR_StabWait = OSTC;
      ucR_StabWait &= ucR_StabSet;
  }
  while(ucR_StabWait != ucR_StabSet);   /*等待時鐘穩定*/
  OSTS = 0x05;                    /*振盪穩定時間選擇*/
  PCC  = 0;                       /* 處理器時鐘控制 選擇系統時鐘,無分頻*/
  W5NOP; W5NOP; W5NOP; W5NOP; /* wait 5us */
  MCM |= 0x05;                /* X1 operate for CPU 主時鐘模式 高速系統時鐘 */
  RCM |= 0x01;                /*內部高速振盪器停止*/
}






3.編寫主函數

/*********************************************************************
*                            pragma
**********************************************************************/
#pragma   SFR       /*程序中可以直接使用數據手冊上描述的特殊寄存器名*/
#pragma   DI        /*關全局中斷*/
#pragma   EI        /*開全局中斷*/
#pragma   NOP       /*允許嵌入NOP指令*/
#pragma   ASM       /*允許嵌入彙編指令*/
#pragma   STOP      /*允許嵌入STOP指令*/
#pragma   HALT      /*允許嵌入HALT指令*/

//#include<>   /*這裏包含文件*/

__interrupt void    INT_TM50(void);    //這句放在main函數前面
#define W5NOP         NOP();NOP();NOP();NOP();NOP()      /*5個空指令*/
void main(void)
{
  DI();
  NOP();
/*嵌入彙編是清空內存*/
/*
注意事項:
1. #asm  #endasm __asm 只能小寫
2. 彙編程序段中的標號必須以"?L"開頭
3. 調用C程序中的子程序,必須在子程序名前增加 "_" ;CALL    !_CPU_init
*/
#asm
;清RAM
  MOVW    HL ,#0FB00H
?LRAM_CLEAR:
  MOV     A,   #0
  MOV     [HL],A
  INCW    HL
  MOVW    AX,HL
  CMPW    AX,#0FEDFH
  BC      $?LRAM_CLEAR
#endasm
/*嵌入彙編*/
    __asm(" MOV A,#0 ");   
  EI(); 
  Init_OST();   //初始化時鐘
  while(1)
  {
    WDTE = 0xAC;     
  }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章