51单片机—再论IIC—软件通用包(汇编、c语言)—03
我们知道51单片机中具有IIC总线接口的毕竟是少数(其实我就不知道那款~~)如果是是不带IIC总线的单片机,并不必扩展IIC总线接口,只是需要通过软件模拟,这无疑会给IIC总线的应用提供更广泛的空间。通常大多数的单片机应用系统中只有一个CPU,这种单主系统如果采用IIC总线技术,则总线上只有单片机对IIC总线从器件的访问,没有总线的竞争问题。这是后只需要模拟主发送和主接收时序。基于上述考虑,(这才是重点,呵呵),提供在这种使用情况下的时序模拟软件,使IIC总线的使用不受单片机必须带有IIC总线接口的限制。
下面的9个例子可以作为一个软件包,这个软件放入单片机系统的程序程序存储器中,以便用来调用。
1、IIC总线典型信号时序及模拟子程序(其实上一篇已经介绍过了,不过我这里有点补充,顺便小小介绍一下吧)
IIC总线上数据传送时,有起始位,停止位,应答位,非应答位等信号。按照典型IIC总线传送速率的要求,如图:
对于IIC总线的典型信号,可以用指令操作来模拟其时序过程。
若89C51单片机的系统时钟为12MHz,相信的单周期指令为1us,则起始位(START)、停止位(STOP)、发送应答位(MACK)、发送非应答位(MNACK)的5个模拟子程序如下:
1)启动IIC总线子程序START(先是汇编,然后是c语言的)
;--------------------------------------------------------
;发开始信号子程序
START:
//----------------------------------------------------------
//开始信号函数
void IIC_start()
{
}
2)停止IIC总线程序STOP(先是汇编,后是c语言)
;--------------------------------------------------------
;发结束信号子程序
STOP:
//---------------------------------------------------------------
//结束信号函数
void IIC_stop()
{
}
3)主控器向被控器发送应答位信号子程序MACK(由于这个信号和发送非应答信号在c语言里写在了一起,所以最后写c语言的程序)
;--------------------------------------------------------------
;发送应答信号子程序
MACK:
4)主控器向被控器发送非应答新号子程序MNACK
;------------------------------------------------------------
;发送非应答信号子程序
MNACK:
然后就是上两个的c的程序:
//---------------------------------------------------------------------
//主控器件向被控器件发送应答函数
void IIC_ack_send(bit a)
{
}
5)主控器件检查被控器件发送来的应答位
;---------------------------------------------------------------
;检测应答位子程序
;返回值ACK=1时表示应达
CACK:
CEND:
//-----------------------------------------------------------------
//主控器件接收应答函数
void IIC_ack_acc()
{
}
在使用上述的子程序时,如果单片机不是12MHz,自己调整啊~~哈哈
2、IIC总线数据传送的模拟子程序
从IIC总线的数据操作中可以看出,出了起始位、停止位、发送应答函数、发送
51单片机IIC软件通用 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)