1t和12t单片机的区别
标准51单片机是12t的,就是说12个时钟周期(晶振周期,例如12m的,周期是1/12m,单位秒),机器做一个指令周期,刚好就是1/12m*12=1us,常见指令例如_nop_就是一个周期,刚好1us,其他的大多多于一个周期,乘除法更多。所以如果计算指令时间可以这样算。
而现在很多51核的单片机工艺质量上去后,频率大大提高,增强型51有6t的,如果接12m的话,一个nop就只需要0.51us,如果是stc的部分单片机1t的话,那只需要1/12us。
单片机的晶振不是随便选,要看技术手册,看最高频率,看支持类型等等。一般12m,接串口的话11.0592m。如果是pic,很多4m,8m。
不是越高越好,对很多不需要大量处理,只是控制的情况,为了增加可靠性,降低编程难度,降低功耗,往往可选用低频的,例如实时时钟的32768晶振。故计算nt单片机的指令周期公式为:
例如: 使用12m晶振的1t单片机的指令周期为: t = 1 / 12 * 1 = 1 / 12 us
1t和12t单片机的编程注意事项:
定时器部分不用改。1t单片机的计时器是兼容传统12t单片机的。也就是说只是执行一般的指令会快12倍,但是它的定时器却是先进行12分频,再计时的,与原来的一样。只是用软件延时的话,就要改。
1t和12t单片机软件延时程序实例对比:
1.对于使用12m晶振的12t单片机,如:stc90c52rc
延时n个10us的程序:
void delayxus(unsigned char n)
{
while( n-- )
{
_nop_();
_nop_();
}
}
2.而对于使用12m晶振的1t单片机,如:stc12c5206ad
延时n个1us的程序
void delayxus(unsigned char n)
{
while( n-- )
{
_nop_();
_nop_();
}
}
对比可见,相同的程序在不同时钟周期的单片机下延时是不同的,所以当我们在不同时钟周期的单片机中移植程序的时候要注意软件延时需要修改成适当的程序,否则会造成不必要的错误。
1t单片机和12t单片机延时程序:
/*
* 文 件 名:delay.c
* 芯 片:stc12c5a60s2
* 晶 振:12mhz
* 创 建 者:冷月
* 创建日期:2010.8.20
* 修 改 者:
* 修改日期:
* 功能描述:单片机us和ms级延时,适用于12mhz的12t和1t单片机 */
#include “delay.h”
#define uchar unsigned char
#define uint unsigned int /*
* 函 数 名:delayus12t
* 功能描述:12t单片机us级延时,7us~515us,精度2us
* 输入参数:delayusval = (t-5)/2
* 返 回 值:无
*/
void delayus12t(uchar delayusval)
{
while (--delayusval);
}
/*
* 函 数 名:delayus1t
* 功能描述:1t单片机us级延时,2us~85us,精度1us
* 输入参数:delayusval = 3t - 3
* 返 回 值:无
*/
void delayus1t(uchar delayusval)
{
while (--delayusval);
}
/*
* 函 数 名:delayms12t
* 功能描述:12t单片机ms级延时
* 输入参数:delaymsval:延时多少ms,1ms~65535ms
* 返 回 值:无
*/
void delayms12t(uint delaymsval)
{
uchar i, j;
while (delaymsval--)
for (i = 0; i《3; i++)
for (j = 0; j《106; j++);
/*
* 函 数 名:delayms1t
* 功能描述:1t单片机ms级延时
* 输入参数:delaymsval:延时多少ms,1ms~65535ms
* 返 回 值:无 */
void delayms1t(uint delaymsval) {
uchar i, j;
while (delaymsval--)
for (i = 0; i《10; i++)
for (j = 0; j《169; j++); }
delay.h /*
* 模 块 名:delay.h
* 芯 片:stc12c5a60s2
* 晶 振:12mhz
* 创 建 者:冷月
* 创建日期:2010.8.20
* 修 改 者:
* 修改日期:
* 功能描述:12t单片机和1t单片机的us级和ms级延时函数(12t单片机未测试),适用于晶振12mhz
*/
#ifndef _delay_h_
#define _delay_h_
#define uchar unsigned char
#define uint unsigned int /*
* 函 数 名:delayus12t
* 调 用:delayus12t(1);
* 延时7us
* delayus12t(255);
* 延时515us
* 功能描述:12t单片机us级延时,delayusval = (t-5)/2
* 延时时间t = 2delayusval+5,7us~515us,精度2us */
void delayus12t(uchar delayusval);
/*
* 函 数 名:delayus1t
* 调 用:delayus1t(2);
* 延时1us
* delayus1t(254);
* 延时85us
* 功能描述:1t单片机us级延时,delayusval = 3t - 3 》 1
* 延时时间t = (delayusval+3)/3,2us~85us,精度1us
*/
void delayus1t(uchar delayusval);
/*
* 函 数 名:delayms12t
* 调 用:delayms12t(100);
* 延时100ms
* 功能描述:12t单片机ms级延时,可延时1ms~65535ms
*/
void delayms12t(uint delaymsval);
*
* 函 数 名:delayms1t
* 调 用:delayms1t(100);
* 延时100ms
* 功能描述:12t单片机ms级延时,可延时1ms~65535ms
*/
void delayms1t(uint delaymsval);
#endif
系留无人机系统在波尔多竞技场提供安全保障
LED显示屏厂商:全面奋战一线市场,锁定用户范围
废旧动力电池回收核心技术创新驱动
哈希函数的概念及结构解析
磷酸铁锂的装车量预计超过三元锂电池重新回到动力电池第一
1t和12t单片机延时程序写法
红米Note 5拆包体验 手感好评
AMAZFIT智能手表2复仇者联盟限量版将于10月18日开启限量预售
瑞萨电子陷困境 日本官商拟收购
一款智能镜子显示屏的应用,将定义全新的智能生活
硬件比拼放缓:大牌厂商等何去何从?
单片机最小系统的组成部分 使用proteus软件搭建最小单片机系统的操作方法
二分查找及其变种的总结
芯片设计:美国领先地位明显,中国升至第三
华为芯片大动作:英国投资3亿圈地剑桥,紧邻ARM自建工厂
如何挑选一款高素质的智能门锁,让TCL来告诉你
百度大脑发智能对话引擎推出客服、消费电子及出行三大方案
益莱储与NI宣布开启全球租赁合作
物联网影响教育和学习的五种方式
802.11n最大传输速率_802.11n支持5g频段吗