本帖最后由 芯圣电子官方QQ 于 2023-7-20 11:14 编辑
芯圣的板子收到好久了,今天抽点空分享点东西给大家,共同进步
一直以来,我就不喜欢螺奔,何况官方的库看了下还是不错的,结合官方的例子,很快就可以上手。
哪么问题来了,如何才能简单直观的写程序? 上个操作系统吧, 上个简单点的。
首先我要个定时器,每1ms中断一次,这在任务调度中可有用了,代码麻不用自己写,官方的贴一个。
/************************************************************************************
* 模块性能介绍
* 1、HC89F003的定时器0,1共有四种工作方式
* 方式0:16位自动重装定时器/计数器
* 方式1:16位定时器/计数器
* 方式2:8位自动重装定时器/计数器
* 方式3:T0分成两个(TL0/TH0)独立的8位定时器/计数器(T1无此模式)
* ************************************************************************************
* 应用注意事项
* 1、方式3时T0占用T1的TR1、TF1及中断源,由于TR1被T0占用,此时需要关闭T1可将T1设为工作
* 方式3
* 2、在方式0(Mode0)时THx(x = 0,1)和TLx(x = 0,1)读写操作遵循先高位后低位。并且在修改
* 重载数据时,低位无论有无改变,只要高位被修改,低位都必须再写入一次,方式 1、2、3
* 时无此要求
* ************************************************************************************/
void Time_Init(void)
{
TIM0_Init(TIM0_CLK_12,TIM0_SOFT_CONTROL,TIM0_INTIMING,TIM0_16BIT_AUTO_CNT_TIMING);
//时钟12分频,只需软件置TRx即可启动Tx,Tx用于内部定时,16位重装载定时器/计数器
//Tim0计算时间 = (65536 - 0xFACB) * (1 / (Fosc /Timer分频系数))
// = 1333 / (16000000 / 12)
// = 1 ms
//定时1ms
//反推初值 = 65536 - ((1/1000) / (1/(Fosc / Timer分频系数)))
// = 65536 - ((1/1000) / (1/(16000000 / 12)))
// = 65536 - 1333
// = 0xFACB
TIM0_TimerCnt(0xFACB); //T0定时时间1ms
TIM0_ITCmd(ENABLE); //T0中断使能
TIM0_Cmd(ENABLE); //T0使能
EA_Enable(); //使能总中断
}
|