76
978
3143
中级工程师
在工作中使用到了合泰单片机,以HT67F5660为例子
void time_base_init() { _tbc=0b10110010; _tb1e=1;//时基1的中断控制位,根據中斷結構看到的 _emi=1; }
使用特权
_tb1e=1; _emi=1; //上面两个bit是用来控制时基中断的中的标志位,可以去datasheet里查询,简单一点就到下面的中断结构图中去查找
void __attribute((interrupt(0x18))) isr_time_base1(void)//這裡要參考“中斷結構”---時基1中斷的地址是0x18 { _tb1f=0; //进入中断函数后,这个请求位要置0 if(off_tmr!=0) { off_tmr--; if(off_tmr==0) { sleep_flag=1;//这个功能是在别的地方给off_tmr赋值,如果off_tmr不为=0,就开始倒计时,倒计时到0的时候,sleep_flag置1 } } }
void time_init() { //我这里的系统频率是4.9152MHz,我要求10ms进入一次计时器中断 _stm3c0=0b00110000; //频率Fh/64= 4.9152Mhz/64=76KHZ=13us即计数器加一次就要13us _stm3c1=0b11000001; //从0加到10ms 需要进入769次(近似) _stm3al=769%256; //这里要除以256(规定) =1 ccra比较器的低8位 _stm3ah=769/256; //这里要除以256(规定就要除256)=3 ccra比较器的高2位 //高2位和低8位合起来就是0b11 00000001 _t3on=1; //计数器加1次要13us 加769次就是10ms 进入中断 _emi=1; _t3ae=1;//標準計時器3的中断控制位,根據中斷結構看到的 _mf3e=1;//多功能中斷控制位,根據中斷結構看到的 }
void __attribute((interrupt(0x24))) isr_time0(void) { //10MS _t3af=0; //进入中断函数后,这个请求位要置0 key_loop++; if(key_loop>9) { key_loop=0; key_scan_flag=1; } //------------------------------- }
发表回复 本版积分规则 回帖后跳转到最后一页
0
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注21ic项目外包
扫码关注21ic视频号
扫码关注21ic抖音号
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才 | 论坛帮助
京公网安备 11010802024343号