本篇博文最後修改時間:2017年08月23日 16:30。
一、簡介
本文以79F8513A編程爲例,介紹79F8513A定時器H0 1Hz的頻率驅動LED。
二、實驗平臺
電腦平臺:Windows7 64位旗艦
編譯軟件:PM+ V6.30
硬件平臺:79F8513A
三、版權聲明
博主:_懵懂
聲明:此博客僅供參考不做任何商業用途,最終解釋權歸原博主所有。
原文地址:http://blog.csdn.NET/qq_18842031
QQ:951795235
E-mail :[email protected]
懵懂之MCU交流羣:136384801
四、實驗前提
1、在進行本文步驟前,請先安裝PM+ V6.30版本;準備好79F8513A硬件平臺。
五、基礎知識
暫無
六、源碼地址
暫無
七、關聯文章
鏈接:暫無
八、實驗內容
1.系統時鐘初始化爲外部8M
參考http://blog.csdn.net/qq_18842031/article/details/77984026
PM3 &= ~0x01; //OutPut:P3.0
PU3 = 0x00;
void Init_TMH0(void) // 設置H0 爲間隔 0.1ms 的定時器
{
TMIFH0 = 0; //清中斷標誌
TMMKH0 = 1; //禁止中斷服務
TMHMD0 = 0x20; // 設置時鐘爲 Fx/4 8MH/4=2MH 0.5us
CMP00 = 199; // 0.5*200=100us
TMMKH0 = 0; //允許中斷服務
TMIFH0 = 0; //清中斷標誌
TMHE0 = 1; //使能計時
}
4.編寫主函數
/*********************************************************************
* pragma
**********************************************************************/
#pragma SFR /*程序中可以直接使用數據手冊上描述的特殊寄存器名*/
#pragma DI /*關全局中斷*/
#pragma EI /*開全局中斷*/
#pragma NOP /*允許嵌入NOP指令*/
#pragma ASM /*允許嵌入彙編指令*/
#pragma STOP /*允許嵌入STOP指令*/
#pragma HALT /*允許嵌入HALT指令*/
#pragma interrupt INT_TMH0
//#include<> /*這裏包含文件*/
__interrupt void INT_TMH0(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(); //初始化時鐘
Init_TMH0(); //初始化定時器
while(1)
{
WDTE = 0xAC;
}
}
5、編寫中斷服務函數
__interrupt void INT_TMH0(void)
{
static uint16 i;
WDTE = 0xAC;
// TMIFH0 = 0; //清中斷標誌
++i;
if(i == 10000)
{
static uint8 k;
i = 0;
k = ~k;
P3.0 = k;
}
}
6、結果
每1000msLED翻轉一次,實驗成功。