[STC单片机] 38K的周期时间如何计算?

[复制链接]
 楼主| armxu 发表于 2015-8-8 19:16 | 显示全部楼层 |阅读模式
/*************  本程序功能说明  **************
用户可以在宏定义中改变MCU主时钟频率. 范围 8MHZ ~ 33MHZ.
红外接收程序。模拟市场上用量最大的NEC的编码。
用户可以在宏定义中指定用户码.
使用PCA2高速输出产生38KHZ载波, 1/3占空比, 每个38KHZ周期发射管发射9us,关闭16.3us.
使用开发板上的16个IO扫描按键, MCU不睡眠, 连续扫描按键.
当键按下, 第一帧为数据, 后面的帧为重复争,不带数据, 具体定义请自行参考NEC的编码资料.
键释放后, 停止发送.
******************************************/

//========================================================================
// 函数: void   PCA_Handler (void) interrupt PCA_VECTOR
// 描述: PCA中断处理程序.
// 参数: None
// 返回: none.
// 版本: V1.0, 2012-11-22
//========================================================================

#define D_38K_DUTY  ((MAIN_Fosc * 26) / 1000000UL + MAIN_Fosc / 3000000UL)  /*  38KHZ周期时间   26.3us */
#define D_38K_OFF   ((MAIN_Fosc * 17) / 1000000UL + MAIN_Fosc / 3000000UL)  /* 发射管关闭时间   17.3us */
#define D_38K_ON    ((MAIN_Fosc * 9) / 1000000UL)                           /* 发射管导通时间   9us */

请问“#define D_38K_DUTY  ((MAIN_Fosc * 26) / 1000000UL + MAIN_Fosc / 3000000UL)  /*  38KHZ周期时间   26.3us */”中的0.3us的算式是如何推导出来的?


joyme 发表于 2015-8-12 17:19 | 显示全部楼层
这里计算的是指令数,比如8M的晶振,8个指令为1us,8M/1M就是1us的指令数,8M/3M就是0.3us的指令数,主频高才能产生精度达到0.几us的脉宽波形,主频低就会不准甚至产生不了这种波形
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

105

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部