SN8F5703 : Time 2 使用方法 (基本-手動重裝)

用法與 Timer 0 和 Timer 1 一樣


// 0.001秒(1ms) : 65535-((16M/12)*0.001s)=65535-1333=64202(FACA)
// 0.01秒(10ms) : 65535-((16M/12)*0.01s)=65535-13333=52202(CBEA)
// 0.03秒(30ms) : 65535-((16M/12)*0.03s)=65535-40000=25535(63BF)
// 0.049秒(49ms) : 65535-((16M/12)*0.049s)=65535-65333=202(00CA)

#include <SN8F5703.h>

bit f = 0; // 標誌位

void Timer2ISR(void) interrupt ISRTimer2   // Vector @  0x1B
{ 
	//TF2 = 0;     // Clear Timer2 overflow flag  	
	f = 1;
	TH2 = 0xFA;    // Time 2 Hight byte (1ms)(重裝)
    TL2 = 0xCA;    // Time 2 Hight byte (1ms)(重裝)
}

void main(){
	// ----------------------------
	// 設定 MCU 主頻	
	CLKSEL = 0x06;				// Fcpu = 32M/2 = 16M
	CLKCMD = 0x69;				// 套用並設定 CLKSEL 的值
	CKCON = 0x30;
	
	// ----------------------------
	// Timer 0 初始化
	// Timer 2 預設就是 16bit 模式,所以不用像 Timer0+1 設置 TMOD
	T2CON = 0x01;		  //Fclk = Fcpu/12 = 16M/12
    TH2 = 0xFA;           //  Time 2 Hight byte (1ms)
    TL2 = 0xCA;			  //  Time 2 Low byte (1ms)
    ET2 = 1;              // 啟用 Time 2 中斷
	
	// ----------------------------
	// 啟用全局中斷
	EAL = 1;
		
	// ----------------------------
    // GPIO 初始化
	P0M	 = 0xFF; // 把 P0x 設置輸出
	P0UR = 0x00; // 禁用上拉電阻
		
	while(1){
		WDTR = 0x5a; // 清看門狗
				
		if(f==1){
			f = 0;
			P03 = !P03; // 輸出
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值