• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于AVR單片機(jī)串行口的研究

      2013-10-08 03:04:12黃劍波
      中國(guó)科技信息 2013年19期
      關(guān)鍵詞:置位發(fā)送數(shù)據(jù)數(shù)碼管

      黃劍波

      安徽理工大學(xué)電氣與信息工程學(xué)院,安徽 淮南 232001

      引言

      ATmega128為基于AVR RISC結(jié)構(gòu)的8位低功耗CMO S微處理器。由于其先進(jìn)的指令集以及單周期指令執(zhí)行時(shí)間,ATmega128的數(shù)據(jù)吞吐率高達(dá)1MIPS/MHz,從而減緩系統(tǒng)在功耗和處理速度之間的矛盾。我們研究的對(duì)象主要是基于ATmega128的綜合開(kāi)發(fā)系統(tǒng),研究?jī)?nèi)容包括TWI接口與AT24C01的通信功能實(shí)現(xiàn),USART接口與PC的通信功能實(shí)現(xiàn),SPI接口控制相關(guān)數(shù)碼管的數(shù)據(jù)顯示的功能實(shí)現(xiàn)。

      1 串行口功能概述

      1.1 SPI接口概述

      SPI總線是由MOTOROLA公司提出的一種同步串行外設(shè)接口。本次研究的開(kāi)發(fā)板采用的是4根信號(hào)線,即兩條控制信號(hào)線 (低電平有效)和SCLK以及兩條數(shù)據(jù)信號(hào)線SDI和SDO。

      通過(guò)將需要的從機(jī)的 引腳拉低,主機(jī)啟動(dòng)一次通訊過(guò)程。主機(jī)和從機(jī)將需要發(fā)送的數(shù)據(jù)放入相應(yīng)的移位寄存器。主機(jī)在SCK引腳上產(chǎn)生時(shí)鐘脈沖以交換數(shù)據(jù)。主機(jī)通過(guò)將從機(jī)的 拉高實(shí)現(xiàn)與從機(jī)的同步。

      1.2 兩線串行接口TWI

      TWI協(xié)議允許系統(tǒng)設(shè)計(jì)者只用兩根雙向傳輸線就可以將128個(gè)不同的設(shè)備互連到一起。這兩根線一是時(shí)鐘SCL,一是數(shù)據(jù)SDA。外部硬件只需要兩個(gè)上拉電阻,每根線上一個(gè)。所有連接到總線上的設(shè)備都有自己的地址。TWI 協(xié)議解決了總線仲裁的問(wèn)題。

      TWI總線進(jìn)行數(shù)據(jù)傳輸時(shí),SDA線上的數(shù)據(jù)必須在時(shí)鐘的高電平周期保持穩(wěn)定。數(shù)據(jù)線的高或低電平狀態(tài)只有在SCL線的時(shí)鐘信號(hào)時(shí)低電平時(shí)才能改變。

      TWI總線協(xié)議規(guī)定,在SCL線是高電平時(shí),SDA線從高電平向低電平切換表示其實(shí)條件;當(dāng)SCL是高電平時(shí),SDA線由低電平向高電平切換表示停止條件。

      發(fā)送到SDA線上的每個(gè)字節(jié)必須是8位。每次傳輸可以發(fā)送的字節(jié)數(shù)量不受限制,每個(gè)字節(jié)后跟一個(gè)響應(yīng)位(ACK)。首先傳輸?shù)氖菙?shù)據(jù)的最高位。

      1.3 通用同步和異步串行接收和轉(zhuǎn)發(fā)器 USART

      USART分為了三個(gè)主要部分:時(shí)鐘發(fā)生器,發(fā)送器和接收器??刂萍拇嫫饔扇齻€(gè)單元共享。時(shí)鐘發(fā)生器包括同步從機(jī)操作用來(lái)與外部輸入時(shí)鐘進(jìn)行同步的邏輯,以及波特率發(fā)生器。XCK ( 發(fā)送器時(shí)鐘)引腳用于同步發(fā)送模式。發(fā)送器包括單個(gè)寫緩沖器,串行移位寄存器,奇偶發(fā)生器以及處理不同的幀格式所需的控制邏輯。寫緩沖器可以保持連續(xù)發(fā)送數(shù)據(jù)而不會(huì)在數(shù)據(jù)幀之間引入延遲。由于接收器具有時(shí)鐘和數(shù)據(jù)恢復(fù)單元,它是USART 模塊中最復(fù)雜的?;謴?fù)單元用于異步數(shù)據(jù)的接收。除了恢復(fù)單元,接收器還包括奇偶校驗(yàn),控制邏輯,移位寄存器和兩個(gè)接收緩沖器UDR。接收器支持與發(fā)送器相同的幀格式,而且可以檢測(cè)幀錯(cuò)誤,數(shù)據(jù)過(guò)速和奇偶校驗(yàn)錯(cuò)誤。

      2 功能實(shí)現(xiàn)

      2.1 TWI串口通信模塊的功能實(shí)現(xiàn)

      對(duì)于TWI串口來(lái)說(shuō),它所要實(shí)現(xiàn)的功能就是對(duì)AT24C01進(jìn)行訪問(wèn),包括對(duì)指定單元寫入內(nèi)容0xaa,并將該單元內(nèi)容讀取。

      (1)TWI通信初始化

      在這一部分,我們采用了“twi_init(void)”函數(shù)以實(shí)現(xiàn)TWI通信的初始化。函數(shù)具體實(shí)現(xiàn)是首先對(duì)TWI控制寄存器——TWCR進(jìn)行設(shè)置,將其所有比特位置為0,以禁止TWI。在這之后,對(duì)TWI比特率寄存器——TWBR設(shè)置比特率,設(shè)置為01100100.然后將TWI狀態(tài)寄存器——TWSR的所有的比特位置為0,其目的主要是令TWSR的后三位比特位為0,選擇不分頻,和系統(tǒng)鐘保持一致。然后通過(guò)對(duì)TWI(從機(jī))地址寄存器——TWAR賦值以設(shè)置從機(jī)地址。最后,再將TWCR寄存器的TWEN比特位——TWI使能位置位,啟動(dòng)TWI。

      (2)TWI通信開(kāi)始

      在這一部分,我們采用了“TWIstart(void)”函數(shù)以實(shí)現(xiàn)TWI通信的開(kāi)始。函數(shù)實(shí)現(xiàn)的功能就是發(fā)送幀格式中的START信號(hào)。函數(shù)具體實(shí)現(xiàn)是首先將TWCR寄存器的TWEN,TWSTA,TWINT置為1,發(fā)送START信號(hào)。這里需要注意的是TWINT的特殊,TWINT標(biāo)志的清零必須通過(guò)軟件寫“1”來(lái)完成,只要這一位被清零,TWI立即開(kāi)始工作。然后用“while (!(TWCR & (1<

      (3)TWI寫數(shù)據(jù)

      這一部分當(dāng)中,我們采用了“unsigned char TWIwt(unsigned char data)”函數(shù)實(shí)現(xiàn)TWI寫數(shù)據(jù)。我們需要進(jìn)行兩步操作:將數(shù)據(jù)裝入TWDR寄存器,啟動(dòng)數(shù)據(jù)發(fā)送;等待TWINT置位。ATmega128向AT24C01寫入一個(gè)字節(jié)的數(shù)據(jù),數(shù)據(jù)類型可以包括從機(jī)地址,AT24C01的地址單元,寫入地址單元的內(nèi)容。函數(shù)具體實(shí)現(xiàn)是首先將數(shù)據(jù)裝入到TWDR寄存器,然后將TWINT清零,啟動(dòng)發(fā)送數(shù)據(jù),并且用“while (!(TWCR & (1<

      (4)TWI讀數(shù)據(jù)

      同寫數(shù)據(jù)類似的,我們采用了“unsigned char TWIrd(void)”函數(shù)實(shí)現(xiàn)TWI讀數(shù)據(jù)。處理器從AT24C01某個(gè)地址單元讀取數(shù)據(jù)。首先將TWCR寄存器的TWEN,TWEA,TWINT置為1,TWEA標(biāo)志控制應(yīng)答脈沖的產(chǎn)生,在主機(jī)/ 從機(jī)接收模式下接收到一個(gè)字節(jié)的數(shù)據(jù)時(shí)接口發(fā)出ACK脈沖。在等待TWINT置位后完成數(shù)據(jù)的讀取。

      (5)TWI停止

      本部分我們運(yùn)用了“T W I s t o p(v o i d)”函數(shù)完成TWI串口通信停止。通過(guò)將TWCR寄存器的TWEN,TWSTO,TWINT置為1,發(fā)送STOP 信號(hào)。在寫入值時(shí) TWINT 位要置位,這非常重要。給TWINT寫"1”清除此標(biāo)志。TWCR寄存器中的TWINT置位期間TWI不會(huì)啟動(dòng)任何操作。一旦TWINT清零,TWI啟動(dòng)STOP信號(hào)的傳送。注意TWINT在STOP狀態(tài)發(fā)送后不會(huì)置位。

      TWI的寫操作和讀操作的流程圖分別如下圖1,圖2所示:

      圖1 AT24C01寫流程圖

      圖2 AT24C01讀流程圖

      2.2 USART串口通信模塊的功能實(shí)現(xiàn)

      ATmega128具有兩個(gè)USART,USART0和USART1。本次我使用的是USART0。USART的硬件圖如下所示:

      圖3 USART串口連接圖

      在USART0的初始化實(shí)現(xiàn)了對(duì)波特率9600,8位數(shù)據(jù)位,一位停止位,無(wú)校驗(yàn)位等要求的設(shè)定。數(shù)據(jù)位是8位,所以USART端口發(fā)送數(shù)據(jù)的方式是按字節(jié)發(fā)送。

      USART0端口的數(shù)據(jù)發(fā)送有查詢方式和中斷方式兩種,這里我們采用了查詢方式。數(shù)據(jù)發(fā)送結(jié)束標(biāo)志有“USART發(fā)送結(jié)束”和“USART數(shù)據(jù)寄存器空”兩種,我們采用的是“USART數(shù)據(jù)寄存器空”。這兩種結(jié)束標(biāo)志的區(qū)別主要體現(xiàn)在發(fā)送緩沖器(UDRn)中的數(shù)據(jù)是否被送出,在數(shù)據(jù)沒(méi)有被送出的情況下,不能使用“USART發(fā)送結(jié)束”標(biāo)志。

      USART0端口的數(shù)據(jù)發(fā)送我們采用了異步方式。

      2.3 SPI串口通信模塊的功能實(shí)現(xiàn)

      SPI與74HC595的硬件連接如下圖所示

      圖4 SPI串口連接圖

      由上圖我們可以看到處理器A T m e g a 1 2 8的S P I串口通信中的 接到7 4 H C 5 9 5口的R C L K口,ATmega128的SPI串口通信中的SCK接到74HC595口的SRCLK,ATmega128的SPI串口通信中的MOSI接到74HC595口的SER,處理器ATmega128的SPI串口通信中的MISO接到74HC595口的SRCLR上。PC7接到使能口上。本次課題串口通信中只實(shí)現(xiàn)主出從入。

      (1)SPI初始化

      這一部分當(dāng)中,我們采用了“spi_init(void)”完成SPI的初始化。通過(guò)對(duì)端口B數(shù)據(jù)方向寄存器DDRB賦值,將MOSI,SCK,SS設(shè)置為輸出,之后對(duì)SPI控制寄存器——SPCR賦值,使能SPI,選擇主機(jī)模式,并且設(shè)置傳送速度。

      (2)SPI主機(jī)發(fā)送數(shù)據(jù)

      “SPI_MasterTransmit(char Data)” 可以完成SPI主機(jī)發(fā)送數(shù)據(jù)的操作。將數(shù)據(jù)寫入SPI數(shù)據(jù)寄存器——SPDR,串行發(fā)送結(jié)束后,SPIF置位。

      2.4 數(shù)碼管顯示模塊功能實(shí)現(xiàn)

      (1)HC595初始化

      我們采用“void HC_595_init(void)”將HC595初始化。主要需要完成 的方向和值的設(shè)置。首先將 設(shè)置為輸出,賦值為1以禁止其啟動(dòng)。初始化PORTB的值使得數(shù)碼管的選通全部禁止,并將SPI的主從同步信號(hào)設(shè)置為高電平。之后調(diào)用SPI的初始化程序,最后將數(shù)碼管的顯示數(shù)據(jù)設(shè)為16即不顯示。

      (2)HC595寫數(shù)據(jù)

      送數(shù)據(jù)的操作比較簡(jiǎn)單,主要通過(guò)調(diào)用函數(shù)實(shí)現(xiàn)。首先通過(guò)調(diào)用函數(shù)設(shè)置 的值以啟動(dòng)從機(jī)SPI通信,然后調(diào)用SPI主機(jī)發(fā)送數(shù)據(jù)函數(shù)“SPI_MasterTransmit(char Data)”,最后調(diào)用函數(shù)將PB0( )設(shè)置為1,恢復(fù)到初始狀態(tài)。

      (3)HC595顯示整形數(shù)據(jù)

      這部分函數(shù)主要實(shí)現(xiàn)的功能是待顯示數(shù)據(jù)通過(guò)處理后,分別將百位,十位,個(gè)位存儲(chǔ)在相應(yīng)的單元中。在程序中,存儲(chǔ)單元指的是數(shù)組Seg7_Led_Buf[]。

      (4)HC595刷新顯示

      這部分函數(shù)主要實(shí)現(xiàn)的功能:4個(gè)數(shù)碼管依次選通顯示相應(yīng)數(shù)值,顯示的數(shù)值通過(guò)查表,通過(guò)SPI接口發(fā)送。由于刷新顯示程序的運(yùn)行時(shí)間比較短,可以保證數(shù)碼管的穩(wěn)定顯示。

      3 結(jié)語(yǔ)

      本次研究運(yùn)用編程實(shí)現(xiàn)處理器通過(guò)串行接口與外設(shè)之間的聯(lián)系。顯示結(jié)果表明處理器與外設(shè)之間通信狀況良好,顯示延遲小,數(shù)據(jù)準(zhǔn)確,對(duì)于運(yùn)用此系統(tǒng)進(jìn)行后續(xù)的開(kāi)發(fā)具有重要的意義。

      [1]馬潮. AVR單片機(jī)嵌入式系統(tǒng)原理與應(yīng)用實(shí)踐[M]. 第一版.北京:北京航空航天大學(xué)出版社,2007

      [2]金鐘夫. AVR ATmega128單片機(jī)C程序設(shè)計(jì)與實(shí)踐[M]. 第一版.北京: 北京航空航天大學(xué)出版社,2008

      [3]朱飛,楊平. AVR單片機(jī)C語(yǔ)言開(kāi)發(fā)入門與典型實(shí)例[M]. 第一版.北京:人民郵電出版社,2010

      猜你喜歡
      置位發(fā)送數(shù)據(jù)數(shù)碼管
      移動(dòng)自組網(wǎng)中MAC層協(xié)議研究
      一種變電站測(cè)控防誤閉鎖邏輯智能校驗(yàn)裝置的設(shè)計(jì)
      M310 核電機(jī)組重要廠用水泵運(yùn)行置位信號(hào)邏輯優(yōu)化
      Arduino編程
      電腦報(bào)(2019年2期)2019-09-10 07:22:44
      MC9S08FL16單片機(jī)數(shù)碼管靜態(tài)顯示分析
      單片機(jī)控制的四位數(shù)碼管動(dòng)態(tài)顯示編程
      基于雙引導(dǎo)值的三軸天線等待點(diǎn)置位效率的初步研究
      基于Qt的數(shù)碼管數(shù)字編碼系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
      基于馬爾科夫鏈的LoRaWAN網(wǎng)絡(luò)節(jié)點(diǎn)性能分析
      帶標(biāo)記方式的CRDSA++協(xié)議性能分析*
      紫阳县| 龙岩市| 小金县| 平阴县| 白河县| 河源市| 通许县| 济南市| 额济纳旗| 麦盖提县| 招远市| 浙江省| 南昌县| 攀枝花市| 怀集县| 普洱| 绥宁县| 和平区| 来凤县| 威海市| 威信县| 宿迁市| 新宾| 桃江县| 汉川市| 新晃| 阿克| 洞头县| 金昌市| 福州市| 廊坊市| 枞阳县| 松江区| 晋宁县| 英吉沙县| 屏边| 道真| 龙州县| 讷河市| 德州市| 北宁市|