中文名稱(chēng) | 總線(xiàn)時(shí)序 | 實(shí)質(zhì) | 即CPU通過(guò)總線(xiàn)進(jìn)行操作 |
---|---|---|---|
內(nèi)容 | 各信號(hào)時(shí)間順序上的配合關(guān) | 操作 | 系統(tǒng)復(fù)位和啟動(dòng)操作 |
總線(xiàn)時(shí)序
所謂總線(xiàn)時(shí)序,即CPU通過(guò)總線(xiàn)進(jìn)行操作(讀/寫(xiě)、釋放總線(xiàn)、中斷響應(yīng))時(shí),總線(xiàn)上各信號(hào)之間在時(shí)間順序上的配合關(guān)系,它是同CPU的操作功能有關(guān)的。微處理器所完成的操作可分為如下幾種:
1.系統(tǒng)復(fù)位和啟動(dòng)操作
2.最小方式下的總線(xiàn)讀時(shí)序
3.最小方式下的總線(xiàn)寫(xiě)時(shí)序
4.最小方式下的總線(xiàn)保持
5. 外部中斷響應(yīng)時(shí)序
6.最大方式下的總線(xiàn)讀時(shí)序
7.最大方式下的總線(xiàn)寫(xiě)時(shí)序
8.最大方式下的總線(xiàn)請(qǐng)求/允許時(shí)序
擴(kuò)展總線(xiàn)是串行總線(xiàn)還是并行總線(xiàn)
DSP芯片TMS320F2812 DSP片外擴(kuò)展 64K * 16位SRAM(基本配置),最大可擴(kuò)展到512K * 16位。內(nèi)部RAM不夠用時(shí),用來(lái)擴(kuò)充內(nèi)存,當(dāng)然是并行的。
總線(xiàn)制是2根線(xiàn)控制很多根,多線(xiàn)制是每個(gè)控制點(diǎn)都有單獨(dú)的線(xiàn)
電源總線(xiàn)和探測(cè)總線(xiàn)問(wèn)題
剖面圖上斜杠標(biāo)注4的管線(xiàn)是電源支線(xiàn)和探測(cè)支線(xiàn),不標(biāo)4的是探測(cè)支線(xiàn),
格式:pdf
大小:1.0MB
頁(yè)數(shù): 6頁(yè)
評(píng)分: 4.7
本文主要介紹了目前工業(yè)自動(dòng)化控制系統(tǒng)中廣泛使用的幾種現(xiàn)場(chǎng)總線(xiàn)及其總線(xiàn)電纜的特點(diǎn),并以基金會(huì)現(xiàn)場(chǎng)總線(xiàn)FF-H1(低速)和Profibus PA總線(xiàn)電纜為例,探討了現(xiàn)場(chǎng)總線(xiàn)電纜的設(shè)計(jì)。
格式:pdf
大小:1.0MB
頁(yè)數(shù): 4頁(yè)
評(píng)分: 4.3
MIC總線(xiàn)是專(zhuān)門(mén)為了解決現(xiàn)代軍事及工業(yè)領(lǐng)域中極其復(fù)雜和惡劣的工作環(huán)境下電力/數(shù)據(jù)的分配和管理而開(kāi)發(fā)的一種具有結(jié)構(gòu)簡(jiǎn)單及高可靠性的現(xiàn)場(chǎng)總線(xiàn);在詳細(xì)分析MIC總線(xiàn)的體系結(jié)構(gòu)和通信協(xié)議之后,提出了基于PXI總線(xiàn)體系結(jié)構(gòu)的MIC總線(xiàn)通訊模塊的軟硬件設(shè)計(jì)方案;系統(tǒng)可通過(guò)PXI總線(xiàn)靈活配置MIC的各種通訊模式參數(shù),具有即插即用、高可靠性和小型化易集成等特點(diǎn);實(shí)驗(yàn)證明,主模塊PIM工作模式與遠(yuǎn)程從模塊間數(shù)據(jù)通訊穩(wěn)定且可靠,對(duì)國(guó)內(nèi)MIC總線(xiàn)的研究與應(yīng)用有重要意義。
在做 通信過(guò)程中,我們很少會(huì)用到這樣方法,一般在我們選擇MCU的時(shí)候都會(huì)帶有你所需要的通信接口。但是,對(duì)于一些簡(jiǎn)單的通信應(yīng)該用的場(chǎng)合,一 般在一些 的數(shù)據(jù)通信過(guò)程中,傳感器廠商會(huì)將通信協(xié)議做一些改變,這些通信協(xié)議也沒(méi)有一個(gè)標(biāo)準(zhǔn)的協(xié)議規(guī)定。以至于傳感器的兼容性很差,甚至有時(shí)候找不 到能夠與其通信的MCU,這個(gè)時(shí)候有一種方法就是用 / 來(lái)模擬通信總線(xiàn)(由于I/O速度的限制一般只適用于低速的通信總線(xiàn))的 。之前,用I2C通信做一個(gè)溫濕度測(cè)量的工程,本篇文章就以一個(gè)例子來(lái)看看如何用I/O口對(duì)總線(xiàn)時(shí)序進(jìn)行模擬。
我們平時(shí)計(jì)算機(jī)常用的RS232/工作在異步工作狀態(tài)時(shí)是有嚴(yán)格的數(shù)據(jù)時(shí)鐘限制,也就是我們所說(shuō)的波特率,通信的兩個(gè)設(shè)備有相同的波特率才能正確的通信。對(duì)于同步通信一般沒(méi)有嚴(yán)格的時(shí)間限制,總線(xiàn)通過(guò)高低電平來(lái)分辨數(shù)據(jù)是"0"還是"1",有兩個(gè)關(guān)鍵的時(shí)刻:上升沿,下降沿。它 是用過(guò)上升沿和下降沿的時(shí)刻來(lái)讀寫(xiě)數(shù)據(jù)的,也就是說(shuō)這樣的話(huà)通信頻率不是固定的,因?yàn)橥ㄐ诺脑O(shè)備"數(shù)"的是上升沿和下降沿的數(shù)目,然后讀寫(xiě)數(shù)據(jù)線(xiàn)上的數(shù) 據(jù)。筆者做過(guò)實(shí)驗(yàn),將I2C通信的頻率降到了10Hz左右,這樣用能夠很好的捕捉到每一個(gè)時(shí)鐘,通信的結(jié)果也是正確的。
好了,直接來(lái)看案例吧。
通常我們的I2C的通信時(shí)序應(yīng)該如下圖所示,在時(shí)鐘線(xiàn)拉高的情況下,將數(shù)據(jù)線(xiàn)拉低就會(huì)產(chǎn)生一個(gè)啟動(dòng)信號(hào)。但是傳感器SHT的啟動(dòng)信號(hào)卻是一個(gè)數(shù)據(jù)線(xiàn)拉低后,時(shí)鐘線(xiàn)產(chǎn)生一個(gè)脈沖,而后再將數(shù)據(jù)線(xiàn)拉高,這樣做的好處是在一定程度上確保了總線(xiàn)正確的啟動(dòng),但是幾乎與之匹配的MCU。這個(gè)時(shí)候就需要通過(guò)I/O模擬的方式來(lái)與SHT11完成通信。
#define IIC_SCL RC0 //I2C時(shí)鐘線(xiàn)
#define IIC_SDA RC1 //I2C數(shù)據(jù)線(xiàn)
#define IIC_SCL_DIR TRISC0 //I2C時(shí)鐘線(xiàn)傳輸方向
#define IIC_SDA_DIR TRISC1 //I2C數(shù)據(jù)線(xiàn)傳輸方向
#define PORT_INPUT 1
#define PORT_OUTPUT 0
#define IIC_SCL_HIGH() IIC_SCL_DIR = PORT_INPUT //時(shí)鐘線(xiàn)拉高
#define IIC_SCL_LOW() IIC_SCL_DIR = PORT_OUTPUT;IIC_SCL=0//時(shí)鐘線(xiàn)拉低
#define IIC_SDA_HIGH() IIC_SDA_DIR = PORT_INPUT //數(shù)據(jù)線(xiàn)拉高
#define IIC_SDA_LOW() IIC_SDA_DIR = PORT_OUTPUT;IIC_SDA=0//數(shù)據(jù)線(xiàn)拉低
/***************
*SHT11啟動(dòng)時(shí)序
***************/
void SHT_START(void)
{
IIC_SCL_HIGH();
IIC_SDA_HIGH();
delay_us(5);
IIC_SDA_LOW();
delay_us(5);
IIC_SCL_LOW();
delay_us(5);
IIC_SCL_HIGH();
delay_us(5);
IIC_SDA_HIGH();
delay_us(5);
IIC_SCL_LOW();
}
/***************
*SHT11發(fā)送數(shù)據(jù)時(shí)序
***************/
void SHT_SEND(uchar data)
{uchar i,data1;
for(i=0;i<8;i++)
{
data1=data<<i;
if(!(data1&0x80))
IIC_SDA_LOW();
if(data1&0x80)
IIC_SDA_HIGH();
IIC_SCL_LOW(); //寫(xiě)完1位數(shù)據(jù)將時(shí)鐘線(xiàn)拉低,等待發(fā)送
delay_us(5);
IIC_SCL_HIGH(); //時(shí)鐘線(xiàn)上升沿,發(fā)送1位數(shù)據(jù)
delay_us(5); //等待1位數(shù)據(jù)發(fā)送完成
}
IIC_SCL_LOW();
IIC_SDA_HIGH(); //8位數(shù)據(jù)發(fā)送完成,數(shù)據(jù)線(xiàn)拉高,等待SLAVE器件響應(yīng)
delay_us(5);
IIC_SCL_HIGH(); //時(shí)鐘線(xiàn)拉高,產(chǎn)生上升沿讀取數(shù)據(jù)線(xiàn)是否SLAVE器件有響應(yīng)
//while(IIC_SDA==1);
delay_us(5);
IIC_SCL_LOW();
IIC_SDA_HIGH(); //數(shù)據(jù)線(xiàn)拉高,時(shí)鐘線(xiàn)拉低,等待轉(zhuǎn)換完成
}
/***************
*SHT11接收數(shù)據(jù)時(shí)序
***************/
uint SHT_REC(void)
{
uint i;
uint REC1=0,REC0=0,REC=0;
for(i=0;i<8;i++)
{
IIC_SCL_HIGH(); //轉(zhuǎn)換完成,SLAVE器件將數(shù)據(jù)線(xiàn)拉低,時(shí)鐘線(xiàn)產(chǎn)生上升沿讀取高8位數(shù)據(jù)
REC1=(REC1<<1)+IIC_SDA;
delay_us(5);
IIC_SCL_LOW(); //將時(shí)鐘線(xiàn)拉低,等待下一個(gè)上升沿的到來(lái)
delay_us(5);
}
SHT_ASK(); //高8位數(shù)據(jù)接收完畢,發(fā)送應(yīng)答信號(hào)
for(i=0;i<8;i++)
{
IIC_SCL_HIGH(); //轉(zhuǎn)換完成,SLAVE器件將數(shù)據(jù)線(xiàn)拉低,時(shí)鐘線(xiàn)產(chǎn)生上升沿讀取低8位數(shù)據(jù)
REC0=(REC0<<1)+IIC_SDA;
delay_us(5);
IIC_SCL_LOW();
delay_us(5);
}
SHT_STOP(); //低8位數(shù)據(jù)接收完畢,結(jié)束
REC=(REC1<<8)+REC0;
return REC;
}
/***************
*SHT11應(yīng)答時(shí)序
***************/
void SHT_ASK(void)
{
IIC_SCL_LOW();
IIC_SDA_LOW(); //數(shù)據(jù)線(xiàn)拉低
delay_us(5);
IIC_SCL_HIGH(); //時(shí)鐘線(xiàn)拉高才生應(yīng)答信號(hào)
delay_us(5);
IIC_SDA_HIGH();
IIC_SCL_LOW();
delay_us(5);
}
/***************
*SHT11停止時(shí)序
***************/
void SHT_STOP(void)
{
IIC_SDA_HIGH();
IIC_SCL_LOW();
delay_us(5);
IIC_SCL_HIGH();
delay_us(5);
IIC_SDA_HIGH();
IIC_SCL_LOW();
}
原文鏈接: