寫在前言
? 此為博主自學江科大51單片機(B站)的筆記,方便后續重溫知識
? 在后面的章節中,為了防止篇幅過長和易于查找,我把一個小節分成兩部分來發,上章節主要是關于本節課的硬件介紹、電路圖、原理圖等理論知識,主要是為下章節的代碼部分打基礎。
? 我的單片機是24年12月在tb普中買的,型號是STC89C52,在原視頻中引腳或接口不對應的我都會改正,保證在我的機子上能運行才發上來的,還有一些文字部分是我的理解,并非照搬,所以可能有理解不到位的現象。
? 如有誤或交流,敬請指點提問
一、存儲器
1.介紹
RAM的特點是存儲速度特別快,但是掉電會丟失;ROM的特點是存儲速度特別慢,但是掉電不會丟失
SRAM是所有存儲器最快的,一般用于電腦的CPU高速緩存,容量相對較少,成本較高;DRAM原理是用電容存儲,容值很小,需要配一個掃描電路,需要每隔一段時間補電,一般用于電腦的內存條,手機的運行內存,容量相對較大,成本較低
ROM的前四個都是一個系列的,MaskROM只能讀取不能寫;PROM可編程,但是只能寫入一次;EPROM即可以編程也可以擦除,清除需要拿紫外線照射30分鐘,E2PROM這種只需要用電就可以擦除(本單片機所用);Flash(閃存):電腦固態硬盤,手機存儲,運用最廣泛;硬盤(電腦機械硬盤,利用電磁存儲)、軟盤(淘汰)、光盤(光信號存儲)
2.簡化模型
橫向的線成為地址總線;豎向的線稱為數據總線
我們在橫線賦值就是選擇地址,在豎線賦值就是寫入數據
右邊這樣接一個二極管的連接方式可以有效防止其他行干擾
PROM跟MaskROM其實一樣,藍色的二極管是一種特殊二極管,即很容易擊穿,當我們在橫線給高電壓,藍色二極管就會被擊穿,就會變成右邊的狀態,但是被擊穿之后就永遠被擊穿了,所以我們只能寫入一次,這就是PROM
二、AT24C02
1.介紹
- AT24C02是一種可以實現掉電不丟失的存儲器,可用于保存單片機運行時想要永久保存的數據信息
- 存儲介質:EPROM
- 通訊接口:I2C總線
- 容量:256字節
2.引腳及應用電路
- VCC、GND:電源(1.8V-5.5V)
- WP:寫保護(高電平有效
- SCL、SDA:I2C接口
- A0、A1、A2:I2C地址
3.內部結構框圖??
三、I2C(I方C)總線(重難點)
總覽:先介紹,電路,然后學六種時序函數,寫數據幀,學三種數據幀,再學習AT24C02數據幀
1.介紹
- I2C總線(intel IC BUS)是有飛利浦公司開發的一種通用數據總線
- 兩根通信線:SCL(serial clock)、SDA(serial data)
- 同步、半雙工、帶數據應答
- 通用的I2C總線,可以使各種設備的通信標準統一,對于廠家來說,使用成熟的方案可以縮短芯片設計周期、提高穩定性,對于應用者來說,使用通用的通信協議可以避免學習各種各樣的自定義協議、降低了學習和應用的難度
- 左1圖是一個小巧的OLED屏幕,左2圖是D3231,一種時鐘芯片,比1302精度高很多 ,右1圖是一種陀螺儀傳感器,姿態傳感器,用于平衡車無人機等;這些都可以通過I2C模塊進行通信
2.電路規范
- 所有I2C設備的SCL連在一起,SDA連在一起
- 設別的SCL和SDA均要配置成開漏輸出模式
- SCL和SDA各添加一個上拉電阻,阻值一般為4.7K歐左右
- 開漏輸出和上拉電阻的共同作用實現了“線與”的功能,此設計主要是為了解決多級通信互相干擾的問題
- 左圖是一個連接圖,開漏輸出保證了CPU想通信某一個設備時,其他設備沒有干擾,給1就會進入浮空狀態
- 右圖是內部結構,下面的三角是一個輸入的緩存,輸入阻抗很大相當于斷開,相當于一個電壓表監視著電壓;上面是目視管,相當于電子開關,給低電平導通,給高電平斷開,不干擾外界
3.I2C時序結構
(1)起始和終止
- 起始條件:SCL高電平期間,SDA從高電平切換到低電平S:Start
- 終止條件:SCL高電平期間,SDA從低電平切換到高電平P:Stop
(2)發送和接收
- ?發送一個字節:SCL低電平期間,主機(單片機)將數據位依次放到SDA線上(高位在前),然后拉高SCL,從機將在SCL高電平期間讀取數據位,所以SCL高電平期間SDA不允許有數據變化,依次循環上述過程8次,即可發送一個字節
- 接收一個字節:?SCL低電平期間,從機將數據位依次放到SDA線上(高位在前),然后拉高SCL,主機將在SCL高電平期間讀取數據位,所以SCL高電平期間SDA不允許有數據變化,依次循環上述過程8次,即可接收一個字節(主機在接收之前,需要釋放SDA)
(3)應答
- 發送應答:在接收完一個字節之后,主機在下一個時鐘發送一位數據,數據0表示應答,數據1表示非應答
- 接收應答:在發送完一個字節之后,主機在下一個時鐘接收一位數據,判斷從機是否應答,數據0表示應答,數據1表示非應答(主機在接收之前,需要釋放SDA)
4.I2C數據幀
(1)發送一幀數據
首先是Strat起始時序;第二個是發送“從機地址+讀寫位”,又分為八位,前七位是地址,地位前4位是固定的,不同芯片不同,我們24C02固定為1010,最后一位是讀寫標識位;第三個是RA:0,接收應答,每次發送后都會加一個接收應答,接下來是發送第一個字節,接收應答,發送第二個字節,接收應答等等等,最后是Stop結束時序
(2)接收一幀數據
結構差不多都一樣,區分就是第二個的最后一位是讀取位,然后最后一位要發送非發送應答
(3)符合格式(先發送再接收數據幀)
就是在發送完數據幀,不寫終止時序,接上讀取數據幀
5.AT24C02數據幀
- 字節寫:在WORD ADDRESS處寫入數據DATA
- 隨機讀:讀出在WORD ADDRESS處的數據DATA
- AT24C02的固定地址為1010,可配置地址本開發板上為000,所以SLAVE ADDRESS+W為0xA0,SLAVE ADDRESS+R為0xA1?
下面看看手冊里的關于這部分的解釋
- 字節寫:在“字地址”處寫入“數據”
- 隨機讀:讀出在“字地址”處的“數據”