本篇博文最後修改時間: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;
}
}