




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、學 號 1322020312天津城建大學單片機原理及應用A課程設計說明書電壓采集報警控制器起止日期: 2016年1月 4日 至 2016年1月15日學生姓名班級13智能化*班成績指導教師(簽字)控制與機械工程學院 2016年1月15日目 錄第 1 章 STC12C5A60S2單片機基礎知識1 1.1概述1 1.2功能及基礎參數簡介11.3引腳功能介紹2第2章 設計開發軟件介紹42.1 KEIL4介紹42.2 PROTEUS介紹42.3 Altim_Designer介紹52.4串口調試助手介紹52.5 STC-ISP下載軟件介紹5第3章 電壓采集報警控制器硬件電路設計73.1電壓采集報警控制器運
2、行流程圖73.2芯片選擇選擇及局部電路103.3 PROTEUS仿真電路原理圖143.4硬件調試串口調試助手實時數據153.5 PCB印刷電路板圖16結論17參考文獻18附錄1913第一章 STC12C5A60S2單片機基礎知識1.1 概述: STC12C5A60S2/AD/PWM系列單片機是宏晶科技生產的單時鐘/機器周期(1T)的單片機,是高速/低功耗/超強抗干擾的新一代8051單片機,指令代碼完全兼容傳統8051,但速度快8-12倍。內部集成MAX810專用復位電路,2路PWM,8路高速10位A/D轉換(250K/S),針對電機控制,強干擾場合。1.2 功能及基礎參數簡介: 1.增強型80
3、51 CPU,1T,單時鐘/機器周期,指令代碼完全兼容傳統8051; 2.工作電壓:STC12C5A60S2系列工作電壓:5.5V-3.3V(5V單片機)STC12LE5A60S2系列工作電壓:3.6V-2.2V(3V單片機); 3.工作頻率范圍:0 - 35MHz,相當于普通8051的 0420MHz; 4.用戶應用程序空間8K /16K / 20K / 32K / 40K / 48K / 52K / 60K / 62K字節; 5.片上集成1280字節RAM; 6.通用I/O口(36/40/44個),復位后為:準雙向口/弱上拉(普通8051傳統I/O口),可設置成四種模式:準雙向口/弱上拉,
4、推挽/強上拉,僅為輸入/高阻,開漏,每個I/O口驅動能力均可達到20mA,但整個芯片最大不要超過55Ma; 7. ISP(在系統可編程)/IAP(在應用可編程),無需專用編程器,無需專用仿真器 可通過串口(P3.0/P3.1)直接下載用戶程序,數秒即可完成一片; 8.有EEPROM功能(STC12C5A62S2/AD/PWM無內部EEPROM); 9.看門狗; 10.內部集成MAX810專用復位電路(外部晶體12M以下時,復位腳可直接1K電阻到地); 11.外部掉電檢測電路:在P4.6口有一個低壓門檻比較器,5V單片機為1.32V,誤差為+/-5%,3.3V單片機為1.30V,誤差為+/-3%
5、; 12.時鐘源:外部高精度晶體/時鐘,內部R/C振蕩器(溫漂為+/-5%到+/-10%以內) 1用戶在下載用戶程序時,可選擇是使用內部R/C振蕩器還是外部晶體/時鐘,常溫下內部R/C振蕩器頻率為:5.0V單片機為:11MHz15.5MHz,3.3V單片機為:8MHz12MHz,精度要求不高時,可選擇使用內部時鐘,但因為有制造誤差和溫漂,以實際測試為準; 13.共4個16位定時器 兩個與傳統8051兼容的定時器/計數器,16位定時器T0和T1,沒有定時器2,但有獨立波特率發生器 做串行通訊的波特率發生器 再加上2路PCA模塊可再實現2個16位定時器; 14. 2個時鐘輸出口,可由T0的溢出在P
6、3.4/T0輸出時鐘,可由T1的溢出在P3.5/T1輸出時鐘; 15.外部中斷I/O口7路,傳統的下降沿中斷或低電平觸發中斷,并新增支持上升沿中斷的PCA模塊, Power Down模式可由外部中斷喚醒,INT0/P3.2,INT1/P3.3,T0/P3.4, T1/P3.5, RxD/P3.0,CCP0/P1.3(也可通過寄存器設置到P4.2 ), CCP1/P1.4 (也可通過寄存器設置到P4.3); 16. PWM(2路)/PCA(可編程計數器陣列,2路): 也可用來當2路D/A使用 也可用來再實現2個定時器 也可用來再實現2個外部中斷(上升沿中斷/下降沿中斷均可分別或同時支持);17.
7、A/D轉換, 10位精度ADC,共8路,轉換速度可達250K/S(每秒鐘25萬次)18.通用全雙工異步串行口(UART),由于STC12系列是高速的8051,可再用定時器或PCA軟件實現多串口; 19. STC12C5A60S2系列有雙串口,后綴有S2標志的才有雙串口,RxD2/P1.2(可通過寄存器設置到P4.2),TxD2/P1.3(可通過寄存器設置到P4.3); 20.工作溫度范圍:-40 - +85(工業級) / 0 - 75(商業級) 21.封裝:PDIP-40,LQFP-44,LQFP-48 I/O口不夠時,可用2到3根普通I/O口線外接 74HC164/165/595(均可級聯)
8、來擴展I/O口, 還可用A/D做按鍵掃描來節省I/O口,或用雙CPU,三線通信,還多了串口。1.3 引腳功能介紹: 圖1-1 STC12C5A60S2管腳圖各引腳功能簡單介紹如下: VCC:供電電壓; GND:接地; P0口:P0口為一個8位漏級開路雙向I/O口,每個管腳可吸收8TTL門電流。當P1口的管腳寫“1”時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FLASH編程時,P0口作為原碼輸入口,當FLASH進行校驗時,P0輸出原碼,此時P0外部電位必須被拉高; P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL
9、門電流。P1口管腳寫入“1”后,電位被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收; P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳電位被內部上拉電阻拉高,且作為輸入。作為輸入時,P2口的管腳電位被外部拉低,將輸出電流,這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉的優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊
10、功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號; P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入時,由于外部下拉為低電平,P3口將輸出電流(ILL),也是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口: P3.0 RXD(串行輸入口) P3.1 TXD(串行輸出口) P3.2 INT0(外部中斷0) P3.3 INT1(外部中斷1) P3.4 T0(記時器0外部輸入) P3.5 T1(記時器1外部輸入) P3.6 WR (外部數據存儲器寫選通) P3
11、.7 RD (外部數據存儲器讀選通) 同時P3口同時為閃爍編程和編程校驗接收一些控制信號; RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高平時間; ALE / PROG :當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的低位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執行MOVX,MOVC指令時ALE才起作用
12、。另外,該引腳被略微拉高。如果微處理器在外部執行狀態ALE禁止,置位無效; PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取址期間,每個機器周期PSEN兩次有效。但在訪問內部部數據存儲器時,這兩次有效的PSEN信號將不出現; EA/VPP:當EA保持低電平時,訪問外部ROM;注意加密方式1時,EA將內部鎖定為RESET;當EA端保持高電平時,訪問內部ROM。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP); XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入;XTAL2:來自反向振蕩器的輸出;第2章 設計開發軟件介紹2.1 KEIL4介紹:Keil uVision4
13、引入靈活的窗口管理系統,使開發人員能夠使用多臺監視器,并提供了視覺上的表面對窗口位置的完全控制的任何地方。新的用戶界面可以更好地利用屏幕空間和更有效地組織多個窗口,提供一個整潔,高效的環境來開發應用程序。新版本支持更多最新的ARM芯片,還添加了一些其他新功能。最新的Keil uVision4 IDE,旨在提高開發人員的生產力,實現更快,更有效的程序開發。uVision4引入了靈活的窗口管理系統,能夠拖放到視圖內的任何地方,包括支持多顯示器窗口。uVision4在Vision3 IDE的基礎上,增加了更多大眾化的功能。 多顯示器和靈活的窗口管理系統 系統瀏覽器窗口的顯示設備外設寄存器信息 調試還
14、原視圖創建并保存多個調試窗口布局 多項目工作區簡化與眾多的項目2.2 PROTEUS介紹:Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調試到單片機與外圍電路協同仿真,一鍵切換到PCB設計,真正實現了從概念到產品的完整設計。是目前世界上唯一將電路仿真軟件、PCB設計軟件和虛擬模型仿真軟件三合一的設計平臺,其處理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列處理器,并持續增加其他系列處理器模型。在編譯方面,它也支持IAR、Keil和MATLAB等多
15、種編譯器。Proteus軟件具有其它EDA工具軟件(例:multisim)的功能: 1原理布圖 2PCB自動或人工布線 3SPICE電路仿真革命性的特點: 1互動的電路仿真用戶甚至可以實時采用諸如RAM,ROM,鍵盤,馬達,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。 2仿真處理器及其外圍電路可以仿真51系列、AVR、PIC、ARM、等常用主流單片機。還可以直接在基于原理圖的虛擬原型上編程,再配合顯示及輸出,能看到運行后輸入輸出的效果。配合系統配置的虛擬邏輯分析儀、示波器等,Proteus建立了完備的電子設計開發環境.2.3 Altim_Designer介紹: 電路設計自動化
16、EDA(Electronic Design Automation)指的就是將電路設計中各種工作交由計算機來協助完成。如電路原理圖(Schematic)的繪制、印刷電路板(PCB)文件的制作、執行電路仿真(Simulation)等設計工作。隨著電子科技的蓬勃發展,新型元器件層出不窮,電子線路變得越來越復雜,電路的設計工作已經無法單純依靠手工來完成,電子線路計算機輔助設計已經成為必然趨勢,越來越多的設計人員使用快捷、高效的CAD設計軟件來進行輔助電路原理圖、印制電路板圖的設計,打印各種報表。 Altium Designer 是原Protel軟件開發商Altium公司推出的一體化的電子產品開發系統,
17、主要運行在Windows XP操作系統。這套軟件通過把原理圖設計、電路仿真、PCB繪制編輯、拓撲邏輯自動布線、信號完整性分析和設計輸出等技術的完美融合,為設計者提供了全新的設計解決方案,使設計者可以輕松進行設計,熟練使用這一軟件必將使電路設計的質量和效率大大提高。Altium Designer 除了全面繼承包括Protel 99SE、Protel DXP在內的先前一系列版本的功能和優點外,還增加了許多改進和很多高端功能。該平臺拓寬了板級設計的傳統界面,全面集成了FPGA設計功能和SOPC設計實現功能,從而允許工程設計人員能將系統設計中的FPGA與PCB設計及嵌入式設計集成在一起。 由于Alti
18、um Designer 在繼承先前Protel軟件功能的基礎上,綜合了FPGA設計和嵌入式系統軟件設計功能,Altium Designer 對計算機的系統需求比先前的版本要高一些。主要功能:1、原理圖設計;2、印刷電路板設計;3、FPGA的開發;4、嵌入式開發;5、3D PCB設計。2.4 串口調試助手介紹: 串口調試助手是串口調試相關工具,有多個版本。如:友善串口調試助手,支持9600,19200等常用各種波特率及自定義波特率,可以自動識別串口,能設置校驗、數據位和停止位,能以ASCII碼或十六進制接收或發送任何數據或字符,可以任意設定自動發送周期,并能將接收數據保存成文本文件,能發送任意大
19、小的文本文件。 硬件連接方面,傳統臺式PC機支持標準RS232接口,但是帶有串口的筆記本很少見,所以需要USB/232轉換接口,并且安裝相應驅動程序。2.5 STC-ISP下載軟件介紹:STC-ISP 是一款單片機下載編程燒錄軟件,是針對STC系列單片機而設計的,可下載STC89系列、12C2052系列和12C5410等系列的STC單片機,使用簡便,現已被廣泛使用。操作說明:1)打開STC-ISP,如下圖界面,在MCU Type欄目下選中單片機;2)根據您的9針數據線連接情況選中COM端口,波特率一般保持默認,如果遇到下載問題,可以適當下調一些;3)先確認硬件連接正確,按點擊打開文件并在對話框
20、內找到您要下載的HEX文件;4)選中兩個條件項,這樣可以使您在每次編譯KEIL時HEX代碼能自動加載到STC-ISP,點擊Download/下載;5)手動按下電源開關便即可把可執行文件HEX寫入到單片機內;6)程序寫入完畢,目標板開始運行程序結果;圖2-1 STC下載器界面圖第三章 電壓采集報警控制器硬件電路設計3.1電壓采集報警控制器運行流程圖:STC12C5A60S2(引腳排序及基本功能同AT89S51)作為主控芯片,設計電壓采集控制器。一、設計LG4042BH數碼管顯示實時電壓;二、設計AD電壓采集電路,進行實時電壓采集;三、設計串口電路,將實時電壓值傳給串口調試助手。四、設計蜂鳴器電路
21、,當電壓降到設定值時,進行警報。五、設計按鍵電路,可對電壓限值進行設置,并將電壓限值存入24C04中保存。3.1.1 程序主流程圖:圖3-1 電壓采集報警控制器主流程圖3.1.2 按鍵調節限值流程圖:圖3-2 按鍵調節限值流程圖3.1.3 總線初始化流程圖:圖3-3 總線初始化流程圖3.1.4 總線應答停止信號流程圖: 圖3-4 應答信號流程圖 圖3-5 停止信號流程圖3.1.5 總線讀寫字節流程圖: 圖3-6 讀字節流程圖 圖3-7 寫字節流程圖3.1.6 PCF8591芯片AD轉換流程圖:圖3-8 pcf8591 AD流程圖3.2芯片選擇:3.2.1 PCF8591芯片介紹:PCF8591
22、是一個單片集成、單獨供電、低功耗、8-bitCMOS數據獲取器件。PCF8591具有4個模擬輸入、1個模擬輸出和1個串行I2C總線接口。PCF8591的3個地址引腳A0,A1和A2可用于硬件地址編程,允許在同個I2C總線上接入8個PCF8591器件,而無需額外的硬件。在PCF8591器件上輸入輸出的地址、控制和數據信號都是通過雙線雙向I2C總線以串行的方式進行傳輸。PCF8591的功能包括多路模擬輸入、內置跟蹤保持、8-bit模數轉換和8-bit數模轉換。PCF8591的最大轉化速率由I2C總線的最大速率決定。1)引腳介紹: AOUT:D/A 轉換輸出端; AGND:模擬信號地;53AIN0A
23、IN3:模擬信號輸入端;VREF:基準電源端;A0A2:引腳地址端;VDD、VSS:電源端(2.56V);SDA、SCL:I2C 總線的數據線、時鐘線;OSC:外部時鐘輸入端,內部時鐘輸出端;EXT:內部、外部時鐘選擇線,使用內部時鐘時 EXT 接地; 圖3-8 PCF8591管腳圖2)AD轉換電路圖:圖3-9 模數轉換模塊電路圖3.2.2 AT24C04芯片介紹:AT24C04是Ateml公司的4Kb得電可擦除存儲芯片,采用兩線串行的總線和單片機通訊,電壓最低可以到2.5V,額定電流為1mA,靜態電流10uA(5.5V),芯片內的資料可以在斷電的情況下保存100年,而且采用8 腳的DIP 封
24、裝,使用方便。簡而言之,AT24C02是一個在突然掉電的情況下存儲數據的芯片,即掉電存儲芯片。1)引腳介紹:A0:空引腳;A1、A2:器件地址設定引腳;GND:電源地;SDA、SCL:數據線、時鐘線; WP:寫保護口;VCC:電源; 圖3-10 AT24C04管腳圖2)斷電存儲模塊電路:圖3-11 斷電存儲模塊電路圖3.2.3 MAX232芯片介紹:MAX232是一種雙組驅動器/接收器,片內含有一個電容性電壓發生器以便在單5V電源供電時提供EIA/TIA-232-E電平。當用單片機和PC機通過串口進行通信,盡管單片機有串行通信的功能,但單片機提供的信號電平和RS232的標準不一樣,因此要通過m
25、ax232這種類似的芯片進行電平轉換。1)引腳介紹:第一部分是電荷泵電路。由1、2、3、4、5、6腳和4只電容構成。功能是產生+12v和-12v兩個電源,提供給RS-232串口電平的需要。第二部分是數據轉換通道。由7、8、9、10、11、12、13、14腳構成兩個數據通道。其中13腳(R1IN)、12腳(R1OUT)、11腳(T1IN)、14腳(T1OUT)為第一數據通道。8腳(R2IN)、9腳(R2OUT)、10腳(T2IN)、7腳(T2OUT)為第二數據通道。TTL/CMOS數據從11引腳(T1IN)、10引腳(T2IN)輸入轉換成RS-232數據從14腳(T1OUT)、7腳(T2OUT)
26、送到電腦DB9插頭;DB9插頭的RS-232數據從13引腳(R1IN)、8引腳(R2IN)輸入轉換成TTL/CMOS數據后從12引腳(R1OUT)、9引腳(R2OUT)輸出。第三部分是供電。15腳GND、16腳VCC(+5v)。2) 串口通信模塊電路:圖3-12 串口通信模塊電路圖3.2.4 數碼管顯示電路:圖3-13 數碼管顯示電路圖3.2.4 STC12C5A60S2最小系統:圖3-14 STC12C5A60S2最小系統電路圖3.3 PROTEUS仿真電路圖:圖3-15 PROTEUS仿真電路圖3.4 硬件調試串口調試助手實時數據:圖3-16 串口助手實時調試圖 3.5 PCB印刷電路板圖
27、:圖3-17 PCB電路板圖結 論通過這次單片機課程設計電壓采集報警控制器設計,讓我對單片機開發及調試軟件有了更加熟悉的了解,也讓我更加明白了C51程序語言的設計邏輯原理。很多設計理念需要來源于實際,從中找出最適合的方式方法。在設計的過程中遇到的問題,可以說得是困難重重,畢竟是第一次做一個系統性的東西。雖然本次課程設計要求自己獨立完成,但是,我遇到問題時和同學互相討論交流。在做課程設計的過程中不停的討論問題,解決問題。這樣就不會使自己在單獨做的過程中沒有方向;同時也更加了解了解決問題的辦法。在軟件編程時遇到了編程語言邏輯性不合理等問題。而且在進行硬件調試時,要結合開發板原理圖及C51程序,所以
28、出現了連接上的錯誤。但經過不斷的調試和改進,最后都成功解決。實現了課題的基本要求。我發現,討論不僅是一些思想的問題,還可以深入的討論一些技術上的問題,這樣可以使自己的處理問題要快一些,少走彎路。多改變自己設計的方法,在設計的過程中最好要不停的改善自己解決問題的方法,這樣可以方便自己解決問題由于設計水平有限和時間的倉促,本文中難免有錯誤和不妥之處,但在此次設計過程中學到了很多無法從書本上學到的東西,從不同方面使自己得到提升。通過這次課程設計使我懂得了理論與實踐相結合是很重要的,只有理論知識是遠遠不夠的,只有把理論與實踐結合起來,從理論中得出結論,才能真正為實際服務,從而提高自己的實踐能力和獨立思
29、考的能力。同時在設計的過程中發現自己的不足之處,對以前所學的知識理解的不夠深刻,掌握的不夠牢固,通過這次課程設計,對以前學到的知識進一步溫習和消化。 參考文獻1徐愛鈞等單片機原理及應用基于Proteus虛擬仿真技術.北京:機械工業出版社,20132蔣輝平,周國雄基于Proteus的單片機系統設計與仿真實例.北京:機械工業出版社,20093王瓊單片機原理及應用實驗教程.合肥:合肥工業大學出版社,20054陳寧,王文寧單片機技術項目教程.南京:東南大學出版社,20085黃鶴松,員玉良等51單片機應用開發范例大全.北京:人民郵電出版社,20106劉波51單片機應用開發典型范例基于Proteus仿真.
30、北京:電子工業出版社,20147李玉梅基于MCS-51系列單片機原理的應用設計.北京:國防工業出版社,20068江志紅51單片機技術與應用系統開發案例精選.北京:清華大學出版社,2008附 錄電壓采集報警控制器C51程序:/*/* 天津城建大學控制與機械工程學院 */* 單片機課程設計 */* 電壓采集控制報警器 */* 2016年01月10日 */功能:通過轉動滑動變阻器改變模擬輸入電壓/ 通過AD轉換,把數值用數碼管顯示/ 將實時電壓發送給串口助手/ 通過按鍵設定限值,超過限值時蜂鳴器報警/ 通過AT24C04實現斷電保存#include #include #define uchar un
31、signed char#define uint unsigned int#define PCF8591 0x90 /PCF8591 地址#define FOSC 11059200L /System frequency#define BAUD 9600 /UART baudrate/*Define UART parity mode*/#define NONE_PARITY 0 /None parity#define ODD_PARITY 1 /Odd parity#define EVEN_PARITY 2 /Even parity#define MARK_PARITY 3 /Mark parit
32、y#define SPACE_PARITY 4 /Space parity#define PARITYBIT NONE_PARITY#defineOP_READ0xa1/ 器件地址以及讀取操作,0xa1即為1010 0001B#defineOP_WRITE 0xa0/ 器件地址以及寫入操作,0xa1即為1010 0000Btypedef unsigned char BYTE;typedef unsigned int WORD;sbit key1=P10;sbit key0=P11;sbit IICSCL=P14; /IIC串行時鐘輸入端sbit IICSDA=P15; /IIC串行數據輸入端s
33、bit LS138A=P20; /138譯碼器的3位 控制數碼管的 sbit LS138B=P21;sbit LS138C=P22;sbit LS138D=P23;sbit SCL=P24; /串行時鐘輸入端sbit SDA=P25; /串行數據輸入端sbit bit9=P26;sbit beep=P27;int keyvalue;float m;bit busy;uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /數顯管字模uchar table1=實時電壓為: Vrn; /串口發送字符串uchar num
34、1=0;uchar num24=0;/ 斷電保存數據數組uchar sge,sbai;int num,shi,bai,snum,ssnum;/*函數功能:延時1毫秒*/void delay1ms() unsigned char i,j; for(i=0;i10;i+) for(j=0;j0;x-) for(y=110;y0;y-);/*函數功能:延時若干毫秒入口參數:n*/void delaynms(unsigned char n) unsigned char i;for(i=0;in;i+)delay1ms();void delay() /IIC總線初始信號設定,延時4-5個微秒 ;void
35、 start() /PCF8591開始信號 SDA=1; delay(); SCL=1; delay(); SDA=0; delay();void stop() /PCF8591停止信號 SDA=0; delay(); SCL=1; delay(); SDA=1; delay();void respons()/PCF8591 IIC應答 相當于一個智能的延時函數 uchar i; SCL=1; delay(); while(SDA=1)&(i250) i+; SCL=0; delay();void init() /PCF8591 IIC初始化 SDA=1; delay(); SCL=1; de
36、lay(); uchar read_byte() uchar b,k; SCL=0; delay(); SDA=1; delay(); for(b=0;b8;b+) SCL=1; delay(); k=(k1)|SDA;/先左移一位,再在最低位接受當前位 SCL=0; delay(); return k;void write_byte(uchar date) /寫一字節數據 uchar ii,temp; temp=date; for(ii=0;ii8;ii+) temp=temp1; /左移一位 移出的一位在CY中 SCL=0; /只有在scl=0時sda能變化值 delay(); SDA=C
37、Y; delay(); SCL=1; delay(); SCL=0; delay(); SDA=1; delay();/*/ 從AT24C04讀寫數據/*/void IICstart() / 開始位IICSDA = 1; /SDA初始化為高電平“1” IICSCL = 1; /開始數據傳送時,要求SCL為高電平“1”_nop_(); /等待一個機器周期_nop_(); /等待一個機器周期_nop_(); /等待一個機器周期_nop_(); /等待一個機器周期IICSDA = 0; /SDA的下降沿被認為是開始信號_nop_(); /等待一個機器周期_nop_(); /等待一個機器周期_nop_
38、(); /等待一個機器周期_nop_(); /等待一個機器周期IICSCL = 0; /SCL為低電平時,SDA上數據才允許變化(即允許以后的數據傳遞) /* 函數功能:結束數據傳送*/void IICstop()/ 停止位IICSDA = 0; /SDA初始化為低電平“0”_nIICSCL = 1; /結束數據傳送時,要求SCL為高電平“1”_nop_(); /等待一個機器周期_nop_(); /等待一個機器周期_nop_(); /等待一個機器周期_nop_(); /等待一個機器周期IICSDA = 1; /SDA的上升沿被認為是結束信號_nop_(); /等待一個機器周期_nop_();
39、/等待一個機器周期_nop_(); /等待一個機器周期_nop_(); /等待一個機器周期IICSDA=0;IICSCL=0;/* 函數功能:從AT24Cxx讀取數據 出口參數:x*/unsigned char ReadData()/ 從AT24Cxx移入數據到MCUunsigned char i;unsigned char x; /儲存從AT24Cxx中讀出的數據for(i = 0; i 8; i+)IICSCL = 1; /SCL置為高電平x=1; /將x中的各二進位向左移一位x|=(unsigned char)IICSDA; /將SDA上的數據通過按位“或“運算存入x中IICSCL =
40、0; /在SCL的下降沿讀出數據return(x); /將讀取的數據返回/* 函數功能:向AT24Cxx的當前地址寫入數據 入口參數:y (儲存待寫入的數據)*/在調用此數據寫入函數前需首先調用開始函數start(),所以SCL=0bit WriteCurrent(unsigned char y)unsigned char i;bit ack_bit; /儲存應答位for(i = 0; i 8; i+)/ 循環移入8個位 IICSDA = (bit)(y&0x80); /通過按位“與”運算將最高位數據送到S /因為傳送時高位在前,低位在后 _nop_(); /等待一個機器周期 IICSCL =
41、 1; /在SCL的上升沿將數據寫入AT24Cxx _nop_(); /等待一個機器周期 _nop_(); /等待一個機器周期 IICSCL = 0; /將SCL重新置為低電平,以在SC線形成傳送數據所需的個脈沖 y = 1; /將y中的各二進位向左移一位 IICSDA = 1; / 發送設備(主機)應在時鐘脈沖的高電平期間(SCL=1)釋放SDA線, /以讓SDA線轉由接收設備(AT24Cxx)控制_nop_(); /等待一個機器周期 _nop_(); /等待一個機器周期 IICSCL = 1; /根據上述規定,SCL應為高電平_nop_(); /等待一個機器周期 _nop_(); /等待一
42、個機器周期 _nop_(); /等待一個機器周期 _nop_(); /等待一個機器周期 ack_bit = SDA; /接受設備(AT24Cxx)向SDA送低電平,表示已經接收到一個字節 /若送高電平,表示沒有接收到,傳送異常 IICSCL = 0; /SCL為低電平時,SDA上數據才允許變化(即允許以后的數據傳遞)return ack_bit;/ 返回AT24Cxx應答位/*函數功能:向AT24Cxx中的指定地址寫入數據入口參數:add (儲存指定的地址);dat(儲存待寫入的數據)*/void WriteSet(unsigned char add, unsigned char dat)/
43、在指定地址addr處寫入數據WriteCurrentIICstart(); /開始數據傳遞WriteCurrent(OP_WRITE); /選擇要操作的AT24Cxx芯片,并告知要對其寫入數據WriteCurrent(add); /寫入指定地址delay1ms();WriteCurrent(dat); /向當前地址(上面指定的地址)寫入數據IICstop(); /停止數據傳遞delaynms(4); /1個字節的寫入周期為1ms, 最好延時1ms以上/*函數功能:從AT24Cxx中的當前地址讀取數據出口參數:x (儲存讀出的數據) */unsigned char ReadCurrent()unsigned char x;IICstart(); /開始數據傳遞WriteCurrent(OP_READ); /選擇要操作的AT24Cxx芯片,并告知要讀其數據x=ReadData(); /將讀取的數據存入xIICstop(); /停止數據傳遞return x; /返回讀取的數據/*函數功能:從AT24Cxx中的指定地址讀取數據入口參數:set_addr出口參數:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 股權擔保及員工持股計劃協議
- 虛擬偶像IP與游戲產業聯動合作協議
- 2025關于商業店鋪租賃合同協議書的范本
- 賠償天價協議書
- 哺乳女職工和解協議書
- 女方已懷孕離婚協議書
- 綠化鋪裝協議書
- 碎石拉運協議書
- 股東敬業協議書
- 派出所輕傷二級協議書
- 人工智能在新聞媒體領域的應用
- 【MOOC】儒家倫理-南京大學 中國大學慕課MOOC答案
- 銀保部三年規劃
- 2024治安調解協議書樣式
- 零工市場(驛站)運營管理 投標方案(技術方案)
- GB/T 44567-2024光學晶體紫外級氟化鈣晶體
- 小學二年級數學找規律練習題及答案
- 智研咨詢重磅發布:2024年中國航運行業供需態勢、市場現狀及發展前景預測報告
- 第五屆全國電力行業青年培訓師教學技能競賽考試題庫-中(多選題)
- 八年級地理下冊 第六章 第二節“白山黑水”──東北三省教案 (新版)新人教版
- 2024年廣東省廣州市白云區中考二模英語試題(解析版)
評論
0/150
提交評論