日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]這里把EEPROM 24c02封裝起來,今后可以直接調(diào)用,其連線方式為:SDA-P2.1;SCL-P2.0;WP-VCC>_

這里把EEPROM 24c02封裝起來,今后可以直接調(diào)用,其連線方式為:SDA-P2.1;SCL-P2.0;WP-VCC

>_<:i2c.c

1 /*-----------------------------------------------

2 名稱:IIC協(xié)議

3 內(nèi)容:函數(shù)是采用軟件延時(shí)的方法產(chǎn)生SCL脈沖,固對(duì)高晶振頻率要作 一定的修改....(本例是1us機(jī)器

4 周期,即晶振頻率要小于12MHZ)

5 ------------------------------------------------*/

6 #include "i2c.h"

7 #define _Nop() _nop_() //定義空指令

8 bit ack; //應(yīng)答標(biāo)志位

9 sbit SDA=P2^1;

10 sbit SCL=P2^0;

11 /*------------------------------------------------

12 uS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值

13 unsigned char 是定義無符號(hào)字符變量,其值的范圍是

14 0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編,大致延時(shí)

15 長(zhǎng)度如下 T=tx2+5 uS

16 ------------------------------------------------*/

17 void DelayUs2x(unsigned char t)

18 {

19 while(--t);

20 }

21 /*------------------------------------------------

22 mS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值

23 unsigned char 是定義無符號(hào)字符變量,其值的范圍是

24 0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編

25 ------------------------------------------------*/

26 void DelayMs(unsigned char t)

27 {

28 while(t--)

29 {

30 //大致延時(shí)1mS

31 DelayUs2x(245);

32 DelayUs2x(245);

33 }

34 }

35 /*------------------------------------------------

36 啟動(dòng)總線

37 ------------------------------------------------*/

38 void Start_I2c()

39 {

40 SDA=1; //發(fā)送起始條件的數(shù)據(jù)信號(hào)

41 _Nop();

42 SCL=1;

43 _Nop(); //起始條件建立時(shí)間大于4.7us,延時(shí)

44 _Nop();

45 _Nop();

46 _Nop();

47 _Nop();

48 SDA=0; //發(fā)送起始信號(hào)

49 _Nop(); //起始條件鎖定時(shí)間大于4μ

50 _Nop();

51 _Nop();

52 _Nop();

53 _Nop();

54 SCL=0; //鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)

55 _Nop();

56 _Nop();

57 }

58 /*------------------------------------------------

59 結(jié)束總線

60 ------------------------------------------------*/

61 void Stop_I2c()

62 {

63 SDA=0; //發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào)

64 _Nop(); //發(fā)送結(jié)束條件的時(shí)鐘信號(hào)

65 SCL=1; //結(jié)束條件建立時(shí)間大于4μ

66 _Nop();

67 _Nop();

68 _Nop();

69 _Nop();

70 _Nop();

71 SDA=1; //發(fā)送I2C總線結(jié)束信號(hào)

72 _Nop();

73 _Nop();

74 _Nop();

75 _Nop();

76 }

77 /*----------------------------------------------------------------

78 字節(jié)數(shù)據(jù)傳送函數(shù)

79 函數(shù)原型: void SendByte(unsigned char c);

80 功能: 將數(shù)據(jù)c發(fā)送出去,可以是地址,也可以是數(shù)據(jù),發(fā)完后等待應(yīng)答,并對(duì)

81 此狀態(tài)位進(jìn)行操作.(不應(yīng)答或非應(yīng)答都使ack=0 假)

82 發(fā)送數(shù)據(jù)正常,ack=1; ack=0表示被控器無應(yīng)答或損壞。

83 ------------------------------------------------------------------*/

84 void SendByte(unsigned char c)

85 {

86 unsigned char BitCnt;

87 for(BitCnt=0;BitCnt<8;BitCnt++) //要傳送的數(shù)據(jù)長(zhǎng)度為8位

88 {

89 if((c<

90 else SDA=0;

91 _Nop();

92 SCL=1; //置時(shí)鐘線為高,通知被控器開始接收數(shù)據(jù)位

93 _Nop();

94 _Nop(); //保證時(shí)鐘高電平周期大于4μ

95 _Nop();

96 _Nop();

97 _Nop();

98 SCL=0;

99 }

100 _Nop();

101 _Nop();

102 SDA=1; //8位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位

103 _Nop();

104 _Nop();

105 SCL=1;

106 _Nop();

107 _Nop();

108 _Nop();

109 if(SDA==1)ack=0;

110 else ack=1; //判斷是否接收到應(yīng)答信號(hào)

111 SCL=0;

112 _Nop();

113 _Nop();

114 }

115 /*----------------------------------------------------------------

116 字節(jié)數(shù)據(jù)傳送函數(shù)

117 函數(shù)原型: unsigned char RcvByte();

118 功能: 用來接收從器件傳來的數(shù)據(jù),并判斷總線錯(cuò)誤(不發(fā)應(yīng)答信號(hào)),

119 發(fā)完后請(qǐng)用應(yīng)答函數(shù)。

120 ------------------------------------------------------------------*/

121 unsigned char RcvByte()

122 {

123 unsigned char retc;

124 unsigned char BitCnt;

125

126 retc=0;

127 SDA=1; //置數(shù)據(jù)線為輸入方式

128 for(BitCnt=0;BitCnt<8;BitCnt++)

129 {

130 _Nop();

131 SCL=0; //置時(shí)鐘線為低,準(zhǔn)備接收數(shù)據(jù)位

132 _Nop();

133 _Nop(); //時(shí)鐘低電平周期大于4.7us

134 _Nop();

135 _Nop();

136 _Nop();

137 SCL=1; //置時(shí)鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效

138 _Nop();

139 _Nop();

140 retc=retc<<1;

141 if(SDA==1)retc=retc+1; //讀數(shù)據(jù)位,接收的數(shù)據(jù)位放入retc中

142 _Nop();

143 _Nop();

144 }

145 SCL=0;

146 _Nop();

147 _Nop();

148 return(retc);

149 }

150 /*----------------------------------------------------------------

151 應(yīng)答子函數(shù)

152 原型: void Ack_I2c(void);

153 ----------------------------------------------------------------*/

154 void Ack_I2c(void)

155 {

156 SDA=0;

157 _Nop();

158 _Nop();

159 _Nop();

160 SCL=1;

161 _Nop();

162 _Nop(); //時(shí)鐘低電平周期大于4μ

163 _Nop();

164 _Nop();

165 _Nop();

166 SCL=0; //清時(shí)鐘線,鉗住I2C總線以便繼續(xù)接收

167 _Nop();

168 _Nop();

169 }

170 /*----------------------------------------------------------------

171 非應(yīng)答子函數(shù)

172 原型: void NoAck_I2c(void);

173 ----------------------------------------------------------------*/

174 void NoAck_I2c(void)

175 {

176 SDA=1;

177 _Nop();

178 _Nop();

179 _Nop();

180 SCL=1;

181 _Nop();

182 _Nop(); //時(shí)鐘低電平周期大于4μ

183 _Nop();

184 _Nop();

185 _Nop();

186 SCL=0; //清時(shí)鐘線,鉗住I2C總線以便繼續(xù)接收

187 _Nop();

188 _Nop();

189 }

190 /*----------------------------------------------------------------

191 向無子地址器件發(fā)送字節(jié)數(shù)據(jù)函數(shù)

192 函數(shù)原型: bit ISendByte(unsigned char sla,ucahr c);

193 功能: 從啟動(dòng)總線到發(fā)送地址,數(shù)據(jù),結(jié)束總線的全過程,從器件地址sla.

194 如果返回1表示操作成功,否則操作有誤。

195 注意: 使用前必須已結(jié)束總線。

196 ----------------------------------------------------------------*/

197 /*bit ISendByte(unsigned char sla,unsigned char c)

198 {

199 Start_I2c(); //啟動(dòng)總線

200 SendByte(sla); //發(fā)送器件地址

201 if(ack==0)return(0);

202 SendByte(c); //發(fā)送數(shù)據(jù)

20

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在現(xiàn)代工業(yè)自動(dòng)化控制系統(tǒng)中,可編程邏輯控制器(PLC)扮演著至關(guān)重要的角色。三菱PLC以其強(qiáng)大的功能和可靠的穩(wěn)定性,在各類控制任務(wù)中得到了廣泛應(yīng)用。流水燈控制作為一種典型的PLC應(yīng)用案例,不僅有助于理解PLC的基本工作原...

關(guān)鍵字: 三菱PLC 流水燈

P430顱內(nèi)出血檢測(cè)設(shè)備的研制策略 1 引言 在中國有許多因創(chuàng)傷性顱腦損傷的患者急需搶救,但相當(dāng)一部分顱內(nèi)出血患者因未能及時(shí)診斷,延誤了搶救和治療時(shí)機(jī).因而出現(xiàn)腦血腫或腦疝后壓

關(guān)鍵字: 單片機(jī) LCD 醫(yī)療設(shè)備 eeprom

1 前言   近年來,數(shù)字化電視技術(shù)迅猛發(fā)展,特別是遙控系統(tǒng)的面市,各廠商在電視機(jī)中加人微處理器(MCU),各種人工智能化彩電完全替代了老式電視手動(dòng)(機(jī)械式)控制和記憶方式。隨著電視專用

關(guān)鍵字: eeprom 串行通信 i2c總線

學(xué)習(xí)目標(biāo) STM32F103C8T6芯片簡(jiǎn)介 核心板原理圖 搭建流水燈電路 修改工程模板 代碼實(shí)現(xiàn) 成果展示 資料獲取 推薦閱讀 后臺(tái)網(wǎng)友建議制作一個(gè)流水燈,正好發(fā)現(xiàn)自己有之前購買的STM32F103C8T6核心板,今天...

關(guān)鍵字: 流水燈 STM32F103 最小系統(tǒng)板

物聯(lián)網(wǎng)(IoT)沒有表現(xiàn)出短期流行的跡象。每一新應(yīng)用都添加許多端點(diǎn)到互聯(lián)網(wǎng)。不同的無線技術(shù)激增,在大部分射頻(RF)頻譜運(yùn)行,就是最好的證明。 工程師在對(duì)廣泛的IoT端點(diǎn)進(jìn)行調(diào)

關(guān)鍵字: eeprom RFID 物聯(lián)網(wǎng)

電路仿真軟件的使用越來越多,大家對(duì)電路仿真軟件也越來越了解。該系列對(duì)于電路仿真軟件的介紹均基于proteus軟件,本文針對(duì)電路仿真軟件的講解同樣不例外。本文中,主要介紹電路仿真軟件proteus和Keil軟件進(jìn)行流水燈電...

關(guān)鍵字: proteus 指數(shù) 流水燈 電路仿真軟件

通過在單個(gè)器件中集成EEPROM存儲(chǔ)和RFID聯(lián)接,工程師可以設(shè)計(jì)IoT端點(diǎn),使其可存儲(chǔ)工作數(shù)據(jù)并與服務(wù)工程師通信,即使電源故障或完全斷電。 這呈現(xiàn)了服務(wù)和維護(hù)的全新范例,并且完全適用于IoT。

關(guān)鍵字: eeprom RFID 電源資訊

I2C總線是一種用于IC器件之間連接的二線制總線。它通過SDA(串行數(shù)據(jù)線)及SCL(串行時(shí)鐘線)兩根線在連到總線上的器件之間傳送信息,并根據(jù)地址識(shí)別每個(gè)器件:不管是單片機(jī)、存儲(chǔ)器、LCD驅(qū)動(dòng)器還是鍵盤接口。

關(guān)鍵字: 24c02 串行e2prom 讀寫資料

24C02:256 個(gè)字節(jié)的 EEPROM。一般情況下,EEPROM 擁有 30 萬到 100 萬次的壽命。基于 I2C 通信協(xié)議的器件。I2C 是一個(gè)通信協(xié)議,它擁有嚴(yán)密的通信時(shí)序邏輯要求,而EEPROM 是一個(gè)器件,...

關(guān)鍵字: 51單片機(jī) eeprom

在向 EEPROM 連續(xù)寫入多個(gè)字節(jié)的數(shù)據(jù)時(shí),如果每寫一個(gè)字節(jié)都要等待幾 ms 的話,整體上的寫入效率就太低了。因此 EEPROM 的廠商就想了一個(gè)辦法,把 EEPROM 分頁管理。24C01、24C02 這兩個(gè)型號(hào)是...

關(guān)鍵字: eeprom 單片機(jī) 頁寫入
關(guān)閉