當前位置:首頁 > 51內核
  • 單片機學習筆記之51內核軟件延時和串口的巧妙方法

     不知道大家學習51是怎麼過來的,反正我是一路忽悠過來的。現在用51來開發產品必須要充分用到它的內部資源,本來主頻、資源就比不上32,不充分的利用怎麼才能開發好的產品,那麼今天我又學習到兩個小技能:延時和串口的發送中斷 情況是這樣的,在產品的開發中,遇到了74HC595控制數碼管,這個數字邏輯芯片用過的都知道,一位數碼管還好,要是有多位那就得不斷的刷新,為快不破,進而達到不同位顯示不同斷碼(數字)的效果。這個刷新頻率還有講究,我不知道我的理論對不對,反正我知道民用電50Hz接在燈泡上,人眼是看不出燈泡在不斷的閃爍的。那麼就根據這個原理我只要保證在50Hz以上的頻率(20ms以內)及時的刷新一次顯示就行了。不過實際效果是我延時個5ms刷新一次才差不多看不到頻閃,延時是軟件的for循環延時,不太準,但是也差不多把。我也不明白為什麼要到5ms才能把頻閃給消除掉。反正就按照實際效果來咯。問題來了,5ms的週期性刷新,難道MCU就單純的給這個數碼管刷新不幹別的活了,這往往是不太可能的。那在調試的過程中我實現的方法是這樣的: 程序沒有操作系統,就是普通的while循環,一個循環裏面有很多任務,跑一趟下來時間可能比較長,那我就多copy幾個刷新函數唄,根據任務大概的耗時放置在不同的位置。這樣下來結果還是比較明顯的,最起碼效果好很多。接着就是新問題了,當一個任務函數執行的時間比較長的情況下,還是會出現頻閃,有朋友可能會想到,那就在任務函數裏面放刷新顯示函數唄,的確這是一個好方法。在程序中我也用到了。可是有些任務函數對時間要求比較嚴格,還就真的不能放在裏面干擾它的底層驅動程序。重點來了,我就來記錄下我使用的兩個方法; 1、 巧妙的使用任務函數本身的延時函數 例如我在工程裏面用到了DHT11温濕度傳感器,這個傳感器(包括DS18B20)是單總線協議,對時間要求相當嚴格,我就看着底層驅動去找,找到了一個時間相對來説比較長的地方: 上圖是DHT11的時序圖,紅線標註的地方是MCU給傳感器的其實信號,這裏手冊上説的是至少拉低18ms,那就在這個地方做文章,以下是我修改的代碼: 只是讓這個20ms的時間去幹點別的事情,就是刷新數碼管。當然了,如果有操作系統的話,操作系統延時的調用機制會把效率進一步提高。在這裏只要保證紅色方框內的執行時間和需要延時的時間差不多,保證能正常讀取到傳感器數據就行了,我也就估算出來的沒有實際測試時間,畢竟不方便仿真,不在公司手邊也沒有示波器。 2、串口發送中斷的使用 除了這裏的延時時間修改之外還有一個地方比較棘手,那就是串口發送一幀數據,一幀數據比較長,用一個個字節等待發送完成的方式太費時間了,其中又不好加上刷新函數,怎麼辦,突然想到了之前用過32的串口發送中斷。於是就查了下寄存器試用了下,還真可以。表示之前幾乎沒有用過串口的發送中斷,最多用過接收中斷。修改前和修改後的代碼如下: 註釋的就是一個個字節數序發送了,發送一個字節的函數原型如下: 修改後的串口中斷函數: 從代碼的結構來看,大致的原理就是在沒有數據需要發送的時候串口中斷處於關閉狀態,當有數據需要發送的時候,先把數據先準備好存儲在一個數組裏面,然後調用發送函數。發送函數的內容先是把串口的中斷打開(ES=1),清零發送完成標誌位(TI = 0),把需要發送的第一個數據放進以為寄存器(SBUF = dat[0]),把模擬的發送數據地址指向發送的第二個字節(因為第一個已經發送了),然後就等着中斷吧。每發送完成一個字節串口就會進入中斷函數,在中斷函數裏面先判斷是不是發送中斷(51內核串口的發送中斷和接收中斷使用的是同一個中斷向量),確保是發送中斷後先清除中斷標誌,然後繼續放入需要發送的下一個數據(SBUF = WIFI_TX_DATA[TX_CNT++];)同時需要發送的數據地址後移。判斷需要發送的數據是不是全部發送完成了,發送完了那就關閉串口中斷。這樣一幀數據就完美的發送完成而且效率有所提升! 上述方法只是一個簡單的處理,偵長度是定長14個字節,如果是不定長度的偵也是可以根據實際情況修改的。還有一個問題我在這裏沒有處理但是需要注意,那就是有一種情況需要考慮到,當一幀數據還沒有發送完成,新的一幀數據又需要發送。那麼這種情況就需要修改下存儲的方法了。這裏記上一筆,解決方式是把需要發送的數據存進一個相對大一點的數組裏面,然後給這個數組分配兩個指針,分別是頭指針(p)和尾指針(q),每次發送的時候先判斷是不是(p=q)如果是的話就證明之前的數據都發送完了,現在可以暢通無阻;如果不相等,那就繼續存儲並同時後移尾指針q的位置(如果溢出了那就重新回頭唄—循環數組的方法)。

    時間:2018-07-24 關鍵詞: 單片機 51內核

  • 51內核8位單片機MAX7651的開發環境

    摘要:介紹一種基於四時鐘週期、高速8051內核的混合信號8位單片機MAX7651。探討在開發基於MAX7651的應用系統時所面臨的問題,並推薦相應的解決方案。 關鍵詞:MAX7651 AT89LV55 8XC51RA/RB/RC ALL-07 Flash 四時鐘週期 在全球8位單片機領域,英特爾(Intel)生產的MCS-51系列是毋庸質疑的領導者。藉助英特爾廣泛的授權行為,基於8051內核的8位單片機兼容產品早已根深葉茂。Dallas Semiconductor通過改良、優化傳統的8051內核,開發出了高速、四時鐘週期和單時鐘週期8051內核,並在此基礎上推出了一系列高速8位單片機。Maxim利用高速、四時鐘週期8051內核開發出的第一款混合信號單片機MAX7651,內部集成了12位ADC、8位DAC以及16KB的 Flash存儲器,非常適合便攜式設備應用。 1 MAX7651簡介 MAX7651內部集成了一個完全的12位、8通道ADC、2通道DAC、3個定時/計數器、16KB Flash存儲器以及一個兼容於工業標準8051的四時鐘週期高速內核。其它特性包括:256字節RAM、4個8位I/O口、2個異步串行口、1箇中斷控制器以及獨立的看門狗定時器,如圖1所示。 MAX7651內部12位ADC具有可編程增益調節和獨立的採樣保持器。轉換速率可達53ksps,8個輸入通道可以配置為8個獨立的單端信號輸入或者4個差分信號輸入。單片機通過特殊功能寄存器(SFR)ADCON控制模數轉換的工作模式,轉換結果存放在ADDAT0和ADDAT1兩個寄存器中。 圖1 MAX8651內部功能框圖 2 MAX7651軟件開發工具 MAX7651的程序指令集與8051系列完全兼容,具有廣泛的第三方開發軟件工具支持。比較著名的軟件工具包括:Franklin公司的 A51/C51、Keil公司的A51/C51以及Metalink公司的A51等彙編工具軟件。筆者一直使用Keil公司的A51/C51,最新版本號是μP51V7.01。該版本C51已經具備MAX7651的頭文件reg51ex.h,位於C51目錄。如果需要使用A51宏彙編程序,用户要自己編制 inc頭文件。筆者已經完成reg7651.inc頭文件,只需要將它拷貝到C51目錄下即可隨時調用。 reg7651.inc頭文件見本刊網絡補充版(//www.dpj.com.cn)。 Keil C51同時提供軟件模擬調試器功能。對於開發者來説,可以對應用程序進行小範圍的分區模擬測試,十分方便小型應用程序的開發,不需要專用的硬件仿真器。 3 MAX7651硬件仿真調試工具 目前,並沒有專用的硬件仿真器完全支持MAX7651源程序仿真,主要是不能支持內部模數轉換功能。在我國市場上,筆者認為Micetek公司的 EasyPack/E II 8052F和Insight公司的ME-52/ME-52 Plus是性價比較高的。特別是EasyPack/E II 8052F能夠支持實時的源程序調試,用户界面非常友好,用它可以仿真MAX7651的絕大部分功能。注意:一般的仿真器只提供標準的40-DIP雙列直插插座,用户必須自己製作64-TQFP(MAX7651)到40-DIP轉換的插座適配器。 4 MAX7651的內部Flash編程 目前市面上沒有硬件編程器直接支持MAX7651 Flash編程。可以採取一些簡單措施解決這個問題,因為8051系列單片機都採用Intel標準的定時時序來編程器件內部存儲器,MAX7651也不例外。MAX7651具有16KB的內部Flash,但是結構上與大多數單片機不同。它分為兩個8KB的存儲區,每個存儲區又分為128個64字節的頁面。 MAX7651支持兩種Flash編程模式。第一種是在應用中編程,假定應用程序在某一個8KB的存儲區內運行,並且保證程序只侷限在這個8KB的存儲區內運行,可以通過這種方式編程另一個8KB Flash存儲區。MAX7651具有四個特殊功能寄存器(EEAL、EEAH、EEDAT、EESTCMD),用於實現此項功能。這裏,可以將程序存儲器作為數據存儲器使用,用户不需要額外擴展數據存儲器空間。第二種編程模式是,採用外部編程器的並行接口進行編程。目前我國市場比較通用的編程器有:台灣河洛公司的ALL-07和ALL-11P2、Xeltek公司的Superpro/680和Superpro/V等。其中ALL-07編程器目前支持的器件數目可達5000種以上,但是目前它並不直接支持MAX7651,可通過以下簡單方法解決這個問題: ① 經過分析Atmel的AT89LV55以及Intel的8XC51RB兩種單片機外部編程條件和時序可知,其與MAX7651幾乎完全相同。從 AT89LV55的外部編程條件(見表1)和硬件接線圖(見圖2)來看,唯一不同的是二者採用了不同的編程電壓。 ② 製作64-TQFP與40-DIP插座適配器,詳細原理圖請參考本刊網絡補充版(//www.dpj.com.cn)。請注意P2.5和 P3.3的處理方式以及/VPP引腳可以直接與VCC相連接,也可以通過低壓差線性穩壓器與編程器連接。 ③ 打開ALL-07,連接MAX7651。在ALL-07程序界面中選擇AT89LV55或者87C51RB器件選項就可以直接編程MAX7651。注意:如果使用87C51RB,那麼不能使用編程密碼陣列命令;如果使用AT89LV55,必須設置編程最高地址空間為3FC0H,而不是3FFFH。 結 語 MAX7651是業界高性能混合工藝單片機的典型器件,可以極大降低模擬應用的設計難度。它的小封裝、低功耗和高速特性非常適合便攜式和嵌入式系統設計。Maxim擁有新一代的高速、低功耗8位和16位單片機內核技術,正在設計和規劃更多的混合工藝單片機產品。

    時間:2014-05-05 關鍵詞: 開發環境 max7651 51內核

  • 用51內核網絡單片機構成的遠程監控系統

    引 言     在工業控制、信息家電等應用領域,存在大量的嵌入式設備,而這些設備很多隻有串口、CAN總線等簡單的網絡接口,通信能力有限,有的甚至處於孤立運行狀態。如何讓這些以單片機為核心的嵌入式系統接入以太網,並通過網絡對它們進行遠程監控,是當前電子世界中的研究熱點。TCP/IP在Intemet和大多數局域網中的成功應用,已經證明了其強大的功能。如果實現TCP/IP協議和嵌入式系統的結合,嵌入式系統聯網問題就能得到有效解決。目前,嵌入式系統聯網主要有如下幾種方案:①EMIT,以PC或其它高檔計算機為網關,將CAN、RS-232等設備接入重量級網絡;②採用32位MCU+實時操作系統,高檔MCU功能強大,可以實現複雜操作,但需要有RTOS支持,這種方案的成本和對開發人員的要求較高;③採用Scenix的8位MCU,加上虛擬軟件包,實現多任務操作系統,運行TCP/IP協議棧。     本文提出的基於網絡單片機的嵌入式遠程監控系統方案,可以實現串口、CAN總線等輕量級網絡和以太網的互連。該方案具有體積小,性價比高的特點。1 系統的組成     基於網絡單片機的嵌入式遠程監控系統由主控制器、以太網接入模塊、CAN網絡接入模塊、1-Wire網絡、串口網絡、存儲器電路、實時時鐘、電源模塊和監控電路等功能模塊組成。其原理框圖如圖1所示。 (1)主控制器     採用原Dallas公司的高性能51內核的網絡單片機Ds80C400,內部集成了1個10/100M以太網控制器(MAC),3個通用全雙工串口,1個CAN2.0B控制器,1個1.Wire控制器。MCU內部64KB的ROM程序中包含完整的TCP/P V4/6協議棧;可訪問16MB存儲空間;具有專門的低位地址口;4個數據指針;有2x/4x時鐘加倍器,最高工作頻率可達75MHz。(2)以太網接入模塊     利用集成的MAC,通過物理層器件PHY和以太網相連;MAC具有標準的媒體無關接口MII。設計中PHY採用具有自動協商功能的DP83846A,外接網絡變壓器20F001N。在工作過程中,可以通過MII管理總線設置工作模式。PHY和以太網控制器的連接如圖2所示。     MAC具有專門的接收發送緩衝區,可以通過MOVX進行訪問;MAC還具有緩衝區控制單元BCU、命令/狀態寄存器CSR、地址檢測模塊、電源管理單元等組成,主要由BCU負責以太網的收發活動,減少了CPU的參與,保證了以太網收發的效率。(3)CAN網絡接入模塊     通過集成的CAN2.0B控制器,外接CAN收發器和CAN網絡相連。設計中使用的是TI的SN65HVD230,它具有低成本、低功耗的特點。(4)1-Wire網絡     通過1一Wire總線控制器和1-Wire只讀存儲器DS2502-E48相連,給以太網控制器提供物理地址(MAC地址)。(5)串口網絡     通過單片機內部集成的全雙工串口,可以和串口設備相連。為了和外部的RS-232電平相匹配,外接收發器MAX560CAI(也可以採用MAX232、MAX3233等),它具有4個輸入、5個輸出。單片機的串口0用來和開發機相連,串口2作為DTE,具有完整的流控制線,用來和串口設備相連。(6)電 源    電路中各種器件的工作電壓有3.3V、1.8V和5V等,採用MAX832、MAX682和MAXl792,分別提供3.3V、5V和1.8V電壓。(7)監控電路     選用MAX825T(門限電壓3.08V)來監測主控制器的3.3V電源電壓,當電壓低於3.08V時,產生可靠復位。(8)實時時鐘     給系統提供準確的時間,便於瞭解系統狀態,比如獲取數據採集的時間等。(9)存儲器單元     Ds80C400具有專門的低位地址線P7口和專門的工程序存儲器片選信號(CEO~CE7)和數據存儲器片選信號(PCEO~PCE3),可尋址16M的程序空間和4M的數據空間。選用AM29F040B一70(Flash,2片)作為程序存儲器,HM6285 12LFP-7(SRAM,2片)作為數據存儲器。將SRAM和Flash分別接在面、面、面、面。內部64KB的R0M在系統啓動時,對SFR進行初始化,從而SRAM、Flash分別映射到表i所示的空間。DS80C400內部和各種控制器相關的存儲區及ROM的地址映射如表2。這些緩衝區在芯片內部,具有豐富的訪問和操作指令,系統具有較高的集成度和吞吐量。 2  程序設計方法     DS80C400中集成了64KB的ROM,具有工業標準的TCP/IP v4/v6協議棧、佔先式的調度程序和網絡引導程序、串口引導裝載程序。網絡引導程序和串口引導裝載程序可以裝載應用程序。在應用中通過外部引腳的配置,選擇內部ROM的執行流程。系統啓動時,ROM對單片機的串口0進行初始化,MCU通過串口0和開發主機通信,向F1ash寫入程序。     網絡引導程序利用內部的TCP/IP協議棧和任務調度程序,可以通過以太網進行應用程序下載,實現程序在線更新。應用程序使用Java來開發,藉助Dallas公司提供的軟件開發工具包TINI SDK,大部分工作在開發主機上完成;可以使用免費的Java SDK工具或集成開發環境,提高編程效率。TINI SDK將DS80C400中的硬件部分虛擬為Java的類,從而將對實際硬件的操作,轉變為對對象方法的調用,使用Java不要求開發者深入瞭解系統的硬件構成。TINI SDK提供了Java程序的運行環境,在主機上開發Java應用程序經過轉換,即可在目標系統上運行。在運行環境的支持下,可以開發功能完善的嵌入式Web服務器,從而實現設備運行狀態的遠程監測和控制。DS80C400中具有1KB的擴展堆棧空間,具有支持高級語言開發的物理基礎。TINI SDK正是在這個基礎上,提供了Java運行環境,從而可以開發多線程應用程序。以開發串口設備到以太網服務器的數據流傳輸程序為例,其中包含主線程和發送、接收線程。程序結構如圖3和圖4所示。                3  結論     該系統不僅可以拓展嵌入式設備的通信能力,將RS-232、CAN等輕量級網絡和以太網相連,比如實現串口設備和以太網服務器的數據流傳輸,通過以太網服務器對串口設備進行監控;也可以取代原有控制設備,直接來控制現場設備,可利用該系統實現網絡傳感器、遠程控制設備運行、遠程數據採集等。系統還具有較大的擴展餘地,可以根據應用需要進行擴展,如改變存儲器的容量等。系統實現時,要根據具體需要選擇合適容量和存取時間的存儲器,採用合適的尋址模式;選取合適的接口電路並確保正確的連接和配置。另一方面,該芯片的集成功能較多,系統出現問題時,定位比較困難。但該方案不依賴PC或高檔單片機,實現8位機直接接入Internet;所需外圍器件少,系統成本低;開發週期較短,開發成本相對較低,具有實際應用價值。

    時間:2006-05-09 關鍵詞: 遠程監控系統 網絡單片機 51內核

  • 利用串口與並口實現51內核單片機的在線編程

    利用串口與並口實現51內核單片機的在線編程

    摘要:詳細説明利用並口模擬I2C總線協議,實現Myson MTV230芯片的在線編程(ISP)過程,以及利用PC機的串口通信實現Winbond W78E516B的在線編程(ISP)過程;闡述PC機的串口與並口在單片機開發中的應用。關鍵詞:並口編程 串口通信 在線編程 ISP MTV230 W78E516B 引 言1 在線編程簡介  51內核的單片機在線編程模式一般分為兩大類。一類是使用JTAG協議的在線編程模式。這類模式一般由廠家提供在線編程工具,使用方便。使用這一類模式的單片機價格往往較高,使用的全民集運也不多,故不在本文的討論之列。另一類在線編程模式是使用一條特殊的指令,使單片機進入在線編程模式。在進入在線編程模式後,要自己控制對單片機的擦除寫入邏輯。這一類模式又可細分為兩種不同的模式:一是進入在線編程模式後,單片機只是提供一個接口,不再運行用户的程序,擦寫邏輯全由上位機(PC)提供,如以下要討論的MTV230就屬於這種模式;另一類是進入在線編程模式以後,芯片會運行在某一區域的用户編寫的程序,芯片的編程邏輯都由芯片中這段程序控制,上位機(PC)只是作為單片機的一個數據源,向單片機傳輸要擦寫的數據,如以下要討論的W78E516B。2 利用並口對MTV230在線編程的實現2.1 MTV230簡介  MTV230是由Myson公司出品的一塊集成OSD功能的基於51內核的芯片。它使用12MHz晶振時可以設置為倍頻工作,同時還集成了4路A/D和4路PWM DAC。其中最具競爭力的便是它使用了Flash OSD字庫。與一般的OSD芯片不同,它的字庫不是掩膜在芯片中,用户可以自己定製。該款芯片可以滿足視頻應用中的控制需求,因而被廣泛應用於視頻類產品中。2.2 MTV230在線編程模式的進入  要使MTV230具有在線編程的功能,可以添加一段程序在主應用程序中。該程序用來響應特定的單片機狀態,如某一特定引腳的電平變化,或是串口接收到特定的字符以確定是否要進入在線編程模式。在執行以下程序後,MTV230可以進入在線編程模式[1]:① 清看門狗,以防止在編程期間單片機被複位;② 單片機的在線編程模式是在空閒狀態(idle)下進行的,所以要關閉所有中斷,防止單片機被喚醒;③ 由於MTV230在線編程時是作為I2C的從設備,因而要配置單片機的I2C從地址;④ 向ISPEN寫入0x93,使能在線編程功能;⑤ 進入51的空閒模式,在線編程開始。具體程序如下:WDT=0; //1IE=0; //2ISPSLV=0x7C; //3ISPEN=0x93; //4PCON=0x01; //5   以上程序中1~5與上述説明對應。以上將I2C地址設置為0x7C。值得注意的是,設置I2C從地址時,最低兩位無效[1]。執行完以上程序,單片機已經變為一個I2C從設備,將I2C中SCL與芯片的15腳相連,SDA與芯片的16腳相連,就可以用I2C協議,按一定的命令格式對芯片進行在線編程。命令格式詳見參考文獻[1],在此不再贅述。2.3 PC機I2C接口的實現  對MTV230進行在線編程,就要實現I2C通信協議。作為對MTV230進行編程的上位機PC來説,實現I2C有三種方法:① 使用串口與單片機通信,再由單片機模擬I2C協議,成本高,I2C速度視使用的單片機而定;② 對計算機的並口編程,模擬I2C協議,成本低,I2C速度一般;③ 使用USB接口實現I2C協議,成本高,I2C速度快市場上可以買到。  由於MTV230進行編程時,I2C時鐘速度最高為140kHz,速度要求不高,同時考慮到成本,決定使用方案②。2.4 並口I2C硬件的實現  由於並口的每個引腳都是單向的,只能單向輸出或者單向輸入;而I2C又是一個雙向協議,SDA與SCL都要求既能輸入又能輸出(有時要獲取SCL當前狀態),所以,SDA與SCL要分別各由一個輸出引腳與一個輸入引腳構成。為了增加並口的驅動能力與可靠性,設計電路如圖1所示。其中並口的2、12引腳構成SDA腳,並口的3、10引腳構成SCL腳。       2.5 並口I2C軟件的實現  在Win98中對並口的編程非常簡單,通過在VC中內嵌彙編,使用IN與OUT指令訪問與並口相對應的端口,設置相對應端口的值中的位就可以控制相應並口引腳的高低電平值。例如:要將計算機並口1的第2引腳先置高再置低,彙編語言可以這樣寫:MOV DX , 0x378 ;設置端口地址MOV AL , 1 ;將待寫入的位0的值寫入AL中OUT DX , AL ;將值送到相應端口MOV AL , 0 OUT DX , AL   但在Win2000/XP中,由於系統加強了對硬件設備的保護,假如在程序中直接用IN與OUT指令訪問並口,則會引發系統的非法操作;而並口訪問又不像串口,直接可以使用Windows API函數,因而就必須使用驅動程序。可以到www.sstnet.com網站上去下載DriverLINX Port I/O Driver並口驅動程序。該程序可以免費複製與分發。有了這個驅動程序,在Win2000/XP下編寫並口程序就十分方便。安裝該驅動程序後,在程序中包含相應的dlportio.h與dlportio.lib後就可以用DlPortReadPortUchar(IN ULONG Port)來讀取端口的值(相當於彙編中的IN指令),用DlPortWritePortUchar(IN ULONG Port,IN UCHAR Value)來向一個端口寫一個特定的值(相當於彙編中的OUT指令)。利用改變端口值中的一個位的值,可以使相應並口引腳輸出高低電平,從而可以用其來模擬I2C協議,實現並口與單片機間的I2C通信。關於I2C協議,網上有很多資料,在此不再贅述。2.6 程序説明  如前文所述,MTV230在進入在線編程模式後,就相當於一個I2C從設備,編程邏輯全都由在PC上運行的程序來實現。該程序採用VC6.0編寫。編程程序的主界面如圖2所示,主要模塊如表1所列。由於用並口模擬I2C對單片機編程,會使該線程暫時處在阻塞狀態,假如在主線程(UI)中實現該過程,則在對芯片編程時,程序的主界面就無法響應用户退出命令,所以採用了多線程程序結構,在一個工作線程實現該過程,使用户可以隨時退出編程過程。            表1所列的頭三個類採用了層次設計結構:上層類調用下層類,下層類為上層類提供接口,這樣設計保證了代碼的最大可重用性。舉例來説,假如有另一芯片同樣是使用I2C接口進行在線編程,則只要重寫MTVISP這個芯片的在線編程協議類就可以了;如果使用前面所述的並口實現方案1或3,只要重寫最底層的Parallel類便可。          程序工作線程的大致流程如圖3所示。          程序的特色:① 可以自己設置I2C速度的高低,模擬I2C的並口地址,以及使用並口的引腳。② 可以選擇簡單校驗和完全校驗,即對編程後的芯片是進行內部校驗寄存器值的簡單校驗,還是將芯片中的內容全部讀出與編程文件進行比較的完全校驗。③ 可以對芯片內的程序區、OSD區進行編程,還可以讀出這兩區的數據(只有對可以設定進入在線編 程模式的程序才可以)。④ 進行燒寫的文件支持二進制文件格式(*.bin)與Intel的Hex文件格式(*.hex)。3 利用串口對W78E516B在線編程的實現3.1 W78E516B簡介  W78E516B是由Winbound公司出品的基於52內核的高性能芯片,外部晶振可以達到40MHz,內部具有64KB的程序區與4KB的引導程序區,以及256B的RAM區和256B的AUX-RAM區。AUX-RAM區相當於外部存儲區,進行寄存器設置後,用MOVX指令進行訪問。在Keil編譯器中,進行相應的設置便可使用pdata類型變量訪問。3.2 W78E516B在線編程模式的進入  W78E516B在線編程模式的進入可以分為兩種模式:一種為軟件模式,另一種為硬件模式。當芯片進入在線編程模式後,芯片會從現在的64KB程序區跳轉到4KB的引導區的0x00地址處去執行程序。如前文所述,該類型芯片的在線編程邏輯都是由在這4KB引導區中的程序決定的,而上位機(PC)只是為在線編程提供一個數據源。(1)軟件進入模式① 向CHPERN寄存器依此寫入0x87,0x59開啓CHPCON寄存器的寫模式。② 關閉中斷。③ 向CHPCON寫入0x03表示進行程序區編程。④ 向CHPCRN寫入0x00關閉CHPCON寄存器寫模式。⑤ 設置好定時器為延時12μs引發中斷。⑥ 將單片機轉入空閒模式,開啓中斷。例如:將以下程序嵌入主循環中,當串口收到字符“A”時便進入在線編程模式:if(B_Temp==‘A’{//B_Temp中存放從串口接收到的數TR0=0; //停止定時器TH0=TL0=256-250; //設置定時器定時值CHPENR = 0x87; //開啓CHPCON寫模式CHPENR = 0x59;CHPCON|=0x03; //開啓編程功能CHPENR=0x00; //關閉CHPCON寫模式TR0=1; //開啓定時器PCON=0x01; //轉入空閒模式} (2)硬件進入模式  如表2所列,將相應引腳設置為相應電平,在進行復位以後也可進入在線編程模式。值的注意的是,在芯片正常工作時應避免誤入在線編程模式,否則後果不堪設想。表2中L代表低電平,X代表任意電平。              3.3 W78E516B在線編程的實現(1)單片機引導區程序  W78E516B在線編程邏輯主要在這部分程序中實現。在參考文獻[2]中的最後有一個示例程序,它是從外部的SRAM中讀取數據對64KB程序區進行編程。將其改寫一下,變為從串口讀入數據。對程序區進行更新,大致流程與示例程序相同,代碼也大致相同。有興趣的朋友可以自行閲讀文獻[2]中的程序源文件,在此只列出關鍵的更改處:;使用24MHz晶振;使用WAVE編譯程序;其中R3存有待寫入數據字節數-1的高16位;其中R4存有待寫入數據字節數-1的低16位JMP PROG_D_64KPADJUEST:INC R2 ;將低位地址增加1CJNE R2,#00H,PROG_D_64KINC R1 ;低位進位時將高位增加1MOV SFRAH,R1 ;改變高位地址PROG_D_64K:MOV SFRAL,R2 ;將低位地址放入JNB RI,$ ;從串口接收一個待寫入的字節MOV A,SBUFCLR RIMOV SFRFD,A ;將待寫入的值放入MOV TCON,#10H ;開啓定時器MOV PCON,#01H ;CPU進入IDLE狀態(進行編程)CLR C ; 比較R3、R4,看是否寫入完成MOV A,R4SUBB A,R2JNZ PADJUESTCLR CMOV A,R3SUBB A,R1JNZ PADJUEST(2)PC機程序  PC機程序為單片機提供一個數據源。該數據是通過PC機的串口進行數據傳輸的。程序由VC6.0編寫,串口通信使用的是VC自帶的串口控件MSCOMM。由於MSCOMM的接收數據是以消息形式,同時在該程序中接收的數據量很小,而發送數據為阻塞模式,所以新開一個工作線程用於發送數據,而接收數據與主線程合併。程序整體採用狀態機模式。單片機進行擦除、編程、校驗等各個狀態時,都通過串口向PC機發送狀態字,PC機通過接收狀態字來決定單片機現在的工作狀態,並決定要向單片機提供的數據。同時主線程中有一定時器,假如在特定時間內單片機無應答,或應答有誤,則報錯,停止單片機的編程過程。值得注意的是,由於使用了MSCOMM控件,在未裝VC6.0的機器上運行該程序要將源文件SYSTEM目錄中的三個文件拷貝到system32系統目錄下。程序主界面如圖4所示。PC機與單片機通信的工作流程如圖5所示。                        程序特色:① 可以設定使用的串口與通信的波特率。(與其相應的4KB引導區中的程序也要相應修改)。② 可以設定使單片機進入在線編程模式的字符命令。③ 進行燒寫的文件支持二進制文件格式(*.bin)與Intel的Hex文件格式(*.hex)。4 結 論  使用並口模擬I2C程序可以方便地對板上的MTV230芯片進行在線編程,使用串口為W78E516B提供數據源也可方便地對其進行編程,兩者均經過實踐檢驗,程序完全達到預期目的。使用芯片的在線編程技術,方便了芯片程序的更新,降低了產品的維護成本。

    時間:2006-04-27 關鍵詞: 並口 編程 串口 51內核

  • 利用串口與並口實現51內核單片機的在線編程

    摘要:詳細説明利用並口模擬I2C總線協議,實現Myson MTV230芯片的在線編程(ISP)過程,以及利用PC機的串口通信實現Winbond W78E516B的在線編程(ISP)過程;闡述PC機的串口與並口在單片機開發中的應用。關鍵詞:並口編程 串口通信 在線編程 ISP MTV230 W78E516B 引 言1 在線編程簡介  51內核的單片機在線編程模式一般分為兩大類。一類是使用JTAG協議的在線編程模式。這類模式一般由廠家提供在線編程工具,使用方便。使用這一類模式的單片機價格往往較高,使用的全民集運也不多,故不在本文的討論之列。另一類在線編程模式是使用一條特殊的指令,使單片機進入在線編程模式。在進入在線編程模式後,要自己控制對單片機的擦除寫入邏輯。這一類模式又可細分為兩種不同的模式:一是進入在線編程模式後,單片機只是提供一個接口,不再運行用户的程序,擦寫邏輯全由上位機(PC)提供,如以下要討論的MTV230就屬於這種模式;另一類是進入在線編程模式以後,芯片會運行在某一區域的用户編寫的程序,芯片的編程邏輯都由芯片中這段程序控制,上位機(PC)只是作為單片機的一個數據源,向單片機傳輸要擦寫的數據,如以下要討論的W78E516B。2 利用並口對MTV230在線編程的實現2.1 MTV230簡介  MTV230是由Myson公司出品的一塊集成OSD功能的基於51內核的芯片。它使用12MHz晶振時可以設置為倍頻工作,同時還集成了4路A/D和4路PWM DAC。其中最具競爭力的便是它使用了Flash OSD字庫。與一般的OSD芯片不同,它的字庫不是掩膜在芯片中,用户可以自己定製。該款芯片可以滿足視頻應用中的控制需求,因而被廣泛應用於視頻類產品中。2.2 MTV230在線編程模式的進入  要使MTV230具有在線編程的功能,可以添加一段程序在主應用程序中。該程序用來響應特定的單片機狀態,如某一特定引腳的電平變化,或是串口接收到特定的字符以確定是否要進入在線編程模式。在執行以下程序後,MTV230可以進入在線編程模式[1]:① 清看門狗,以防止在編程期間單片機被複位;② 單片機的在線編程模式是在空閒狀態(idle)下進行的,所以要關閉所有中斷,防止單片機被喚醒;③ 由於MTV230在線編程時是作為I2C的從設備,因而要配置單片機的I2C從地址;④ 向ISPEN寫入0x93,使能在線編程功能;⑤ 進入51的空閒模式,在線編程開始。具體程序如下:WDT=0; //1IE=0; //2ISPSLV=0x7C; //3ISPEN=0x93; //4PCON=0x01; //5   以上程序中1~5與上述説明對應。以上將I2C地址設置為0x7C。值得注意的是,設置I2C從地址時,最低兩位無效[1]。執行完以上程序,單片機已經變為一個I2C從設備,將I2C中SCL與芯片的15腳相連,SDA與芯片的16腳相連,就可以用I2C協議,按一定的命令格式對芯片進行在線編程。命令格式詳見參考文獻[1],在此不再贅述。2.3 PC機I2C接口的實現  對MTV230進行在線編程,就要實現I2C通信協議。作為對MTV230進行編程的上位機PC來説,實現I2C有三種方法:① 使用串口與單片機通信,再由單片機模擬I2C協議,成本高,I2C速度視使用的單片機而定;② 對計算機的並口編程,模擬I2C協議,成本低,I2C速度一般;③ 使用USB接口實現I2C協議,成本高,I2C速度快市場上可以買到。  由於MTV230進行編程時,I2C時鐘速度最高為140kHz,速度要求不高,同時考慮到成本,決定使用方案②。2.4 並口I2C硬件的實現  由於並口的每個引腳都是單向的,只能單向輸出或者單向輸入;而I2C又是一個雙向協議,SDA與SCL都要求既能輸入又能輸出(有時要獲取SCL當前狀態),所以,SDA與SCL要分別各由一個輸出引腳與一個輸入引腳構成。為了增加並口的驅動能力與可靠性,設計電路如圖1所示。其中並口的2、12引腳構成SDA腳,並口的3、10引腳構成SCL腳。       2.5 並口I2C軟件的實現  在Win98中對並口的編程非常簡單,通過在VC中內嵌彙編,使用IN與OUT指令訪問與並口相對應的端口,設置相對應端口的值中的位就可以控制相應並口引腳的高低電平值。例如:要將計算機並口1的第2引腳先置高再置低,彙編語言可以這樣寫:MOV DX , 0x378 ;設置端口地址MOV AL , 1 ;將待寫入的位0的值寫入AL中OUT DX , AL ;將值送到相應端口MOV AL , 0 OUT DX , AL   但在Win2000/XP中,由於系統加強了對硬件設備的保護,假如在程序中直接用IN與OUT指令訪問並口,則會引發系統的非法操作;而並口訪問又不像串口,直接可以使用Windows API函數,因而就必須使用驅動程序。可以到www.sstnet.com網站上去下載DriverLINX Port I/O Driver並口驅動程序。該程序可以免費複製與分發。有了這個驅動程序,在Win2000/XP下編寫並口程序就十分方便。安裝該驅動程序後,在程序中包含相應的dlportio.h與dlportio.lib後就可以用DlPortReadPortUchar(IN ULONG Port)來讀取端口的值(相當於彙編中的IN指令),用DlPortWritePortUchar(IN ULONG Port,IN UCHAR Value)來向一個端口寫一個特定的值(相當於彙編中的OUT指令)。利用改變端口值中的一個位的值,可以使相應並口引腳輸出高低電平,從而可以用其來模擬I2C協議,實現並口與單片機間的I2C通信。關於I2C協議,網上有很多資料,在此不再贅述。2.6 程序説明  如前文所述,MTV230在進入在線編程模式後,就相當於一個I2C從設備,編程邏輯全都由在PC上運行的程序來實現。該程序採用VC6.0編寫。編程程序的主界面如圖2所示,主要模塊如表1所列。由於用並口模擬I2C對單片機編程,會使該線程暫時處在阻塞狀態,假如在主線程(UI)中實現該過程,則在對芯片編程時,程序的主界面就無法響應用户退出命令,所以採用了多線程程序結構,在一個工作線程實現該過程,使用户可以隨時退出編程過程。            表1所列的頭三個類採用了層次設計結構:上層類調用下層類,下層類為上層類提供接口,這樣設計保證了代碼的最大可重用性。舉例來説,假如有另一芯片同樣是使用I2C接口進行在線編程,則只要重寫MTVISP這個芯片的在線編程協議類就可以了;如果使用前面所述的並口實現方案1或3,只要重寫最底層的Parallel類便可。          程序工作線程的大致流程如圖3所示。          程序的特色:① 可以自己設置I2C速度的高低,模擬I2C的並口地址,以及使用並口的引腳。② 可以選擇簡單校驗和完全校驗,即對編程後的芯片是進行內部校驗寄存器值的簡單校驗,還是將芯片中的內容全部讀出與編程文件進行比較的完全校驗。③ 可以對芯片內的程序區、OSD區進行編程,還可以讀出這兩區的數據(只有對可以設定進入在線編 程模式的程序才可以)。④ 進行燒寫的文件支持二進制文件格式(*.bin)與Intel的Hex文件格式(*.hex)。3 利用串口對W78E516B在線編程的實現3.1 W78E516B簡介  W78E516B是由Winbound公司出品的基於52內核的高性能芯片,外部晶振可以達到40MHz,內部具有64KB的程序區與4KB的引導程序區,以及256B的RAM區和256B的AUX-RAM區。AUX-RAM區相當於外部存儲區,進行寄存器設置後,用MOVX指令進行訪問。在Keil編譯器中,進行相應的設置便可使用pdata類型變量訪問。3.2 W78E516B在線編程模式的進入  W78E516B在線編程模式的進入可以分為兩種模式:一種為軟件模式,另一種為硬件模式。當芯片進入在線編程模式後,芯片會從現在的64KB程序區跳轉到4KB的引導區的0x00地址處去執行程序。如前文所述,該類型芯片的在線編程邏輯都是由在這4KB引導區中的程序決定的,而上位機(PC)只是為在線編程提供一個數據源。(1)軟件進入模式① 向CHPERN寄存器依此寫入0x87,0x59開啓CHPCON寄存器的寫模式。② 關閉中斷。③ 向CHPCON寫入0x03表示進行程序區編程。④ 向CHPCRN寫入0x00關閉CHPCON寄存器寫模式。⑤ 設置好定時器為延時12μs引發中斷。⑥ 將單片機轉入空閒模式,開啓中斷。例如:將以下程序嵌入主循環中,當串口收到字符“A”時便進入在線編程模式:if(B_Temp==‘A’{//B_Temp中存放從串口接收到的數TR0=0; //停止定時器TH0=TL0=256-250; //設置定時器定時值CHPENR = 0x87; //開啓CHPCON寫模式CHPENR = 0x59;CHPCON|=0x03; //開啓編程功能CHPENR=0x00; //關閉CHPCON寫模式TR0=1; //開啓定時器PCON=0x01; //轉入空閒模式} (2)硬件進入模式  如表2所列,將相應引腳設置為相應電平,在進行復位以後也可進入在線編程模式。值的注意的是,在芯片正常工作時應避免誤入在線編程模式,否則後果不堪設想。表2中L代表低電平,X代表任意電平。              3.3 W78E516B在線編程的實現(1)單片機引導區程序  W78E516B在線編程邏輯主要在這部分程序中實現。在參考文獻[2]中的最後有一個示例程序,它是從外部的SRAM中讀取數據對64KB程序區進行編程。將其改寫一下,變為從串口讀入數據。對程序區進行更新,大致流程與示例程序相同,代碼也大致相同。有興趣的朋友可以自行閲讀文獻[2]中的程序源文件,在此只列出關鍵的更改處:;使用24MHz晶振;使用WAVE編譯程序;其中R3存有待寫入數據字節數-1的高16位;其中R4存有待寫入數據字節數-1的低16位JMP PROG_D_64KPADJUEST:INC R2 ;將低位地址增加1CJNE R2,#00H,PROG_D_64KINC R1 ;低位進位時將高位增加1MOV SFRAH,R1 ;改變高位地址PROG_D_64K:MOV SFRAL,R2 ;將低位地址放入JNB RI,$ ;從串口接收一個待寫入的字節MOV A,SBUFCLR RIMOV SFRFD,A ;將待寫入的值放入MOV TCON,#10H ;開啓定時器MOV PCON,#01H ;CPU進入IDLE狀態(進行編程)CLR C ; 比較R3、R4,看是否寫入完成MOV A,R4SUBB A,R2JNZ PADJUESTCLR CMOV A,R3SUBB A,R1JNZ PADJUEST(2)PC機程序  PC機程序為單片機提供一個數據源。該數據是通過PC機的串口進行數據傳輸的。程序由VC6.0編寫,串口通信使用的是VC自帶的串口控件MSCOMM。由於MSCOMM的接收數據是以消息形式,同時在該程序中接收的數據量很小,而發送數據為阻塞模式,所以新開一個工作線程用於發送數據,而接收數據與主線程合併。程序整體採用狀態機模式。單片機進行擦除、編程、校驗等各個狀態時,都通過串口向PC機發送狀態字,PC機通過接收狀態字來決定單片機現在的工作狀態,並決定要向單片機提供的數據。同時主線程中有一定時器,假如在特定時間內單片機無應答,或應答有誤,則報錯,停止單片機的編程過程。值得注意的是,由於使用了MSCOMM控件,在未裝VC6.0的機器上運行該程序要將源文件SYSTEM目錄中的三個文件拷貝到system32系統目錄下。程序主界面如圖4所示。PC機與單片機通信的工作流程如圖5所示。                        程序特色:① 可以設定使用的串口與通信的波特率。(與其相應的4KB引導區中的程序也要相應修改)。② 可以設定使單片機進入在線編程模式的字符命令。③ 進行燒寫的文件支持二進制文件格式(*.bin)與Intel的Hex文件格式(*.hex)。4 結 論  使用並口模擬I2C程序可以方便地對板上的MTV230芯片進行在線編程,使用串口為W78E516B提供數據源也可方便地對其進行編程,兩者均經過實踐檢驗,程序完全達到預期目的。使用芯片的在線編程技術,方便了芯片程序的更新,降低了產品的維護成本。

    時間:2005-12-19 關鍵詞: 並口 編程 串口 51內核

  • 51內核8位單片機MAX7651的開發環境

        摘要:介紹一種基於四時鐘週期、高速8051內核的混合信號8位單片機MAX7651。探討在開發基於MAX7651的應用系統時所面臨的問題,並推薦相應的解決方案。     關鍵詞:MAX7651 AT89LV55 8XC51RA/RB/RC ALL-07 Flash 四時鐘週期 在全球8位單片機領域,英特爾(Intel)生產的MCS-51系列是毋庸質疑的領導者。藉助英特爾廣泛的授權行為,基於8051內核的8位單片機兼容產品早已根深葉茂。Dallas Semiconductor通過改良、優化傳統的8051內核,開發出了高速、四時鐘週期和單時鐘週期8051內核,並在此基礎上推出了一系列高速8位單片機。Maxim利用高速、四時鐘週期8051內核開發出的第一款混合信號單片機MAX7651,內部集成了12位ADC、8位DAC以及16KB的Flash存儲器,非常適合便攜式設備應用。 1 MAX7651簡介 ??MAX7651內部集成了一個完全的12位、8通道ADC、2通道DAC、3個定時/計數器、16KB Flash存儲器以及一個兼容於工業標準8051的四時鐘週期高速內核。其它特性包括:256字節RAM、4個8位I/O口、2個異步串行口、1箇中斷控制器以及獨立的看門狗定時器,如圖1所示。 ??MAX7651內部12位ADC具有可編程增益調節和獨立的採樣保持器。轉換速率可達53ksps,8個輸入通道可以配置為8個獨立的單端信號輸入或者4個差分信號輸入。單片機通過特殊功能寄存器(SFR)ADCON控制模數轉換的工作模式,轉換結果存放在ADDAT0和ADDAT1兩個寄存器中。圖1 MAX8651內部功能框圖2 MAX7651軟件開發工具 ??MAX7651的程序指令集與8051系列完全兼容,具有廣泛的第三方開發軟件工具支持。比較著名的軟件工具包括:Franklin公司的A51/C51、Keil公司的A51/C51以及Metalink公司的A51等彙編工具軟件。筆者一直使用Keil公司的A51/C51,最新版本號是μP51V7.01。該版本C51已經具備MAX7651的頭文件reg51ex.h,位於C51目錄。如果需要使用A51宏彙編程序,用户要自己編制inc頭文件。筆者已經完成reg7651.inc頭文件,只需要將它拷貝到C51目錄下即可隨時調用。 ??reg7651.inc頭文件見本刊網絡補充版(//www.dpj.com.cn)。 ??Keil C51同時提供軟件模擬調試器功能。對於開發者來説,可以對應用程序進行小範圍的分區模擬測試,十分方便小型應用程序的開發,不需要專用的硬件仿真器。 3 MAX7651硬件仿真調試工具 ??目前,並沒有專用的硬件仿真器完全支持MAX7651源程序仿真,主要是不能支持內部模數轉換功能。在我國市場上,筆者認為Micetek公司的EasyPack/E II 8052F和Insight公司的ME-52/ME-52 Plus是性價比較高的。特別是EasyPack/E II 8052F能夠支持實時的源程序調試,用户界面非常友好,用它可以仿真MAX7651的絕大部分功能。注意:一般的仿真器只提供標準的40-DIP雙列直插插座,用户必須自己製作64-TQFP(MAX7651)到40-DIP轉換的插座適配器。4 MAX7651的內部Flash編程 ??目前市面上沒有硬件編程器直接支持MAX7651 Flash編程。可以採取一些簡單措施解決這個問題,因為8051系列單片機都採用Intel標準的定時時序來編程器件內部存儲器,MAX7651也不例外。MAX7651具有16KB的內部Flash,但是結構上與大多數單片機不同。它分為兩個8KB的存儲區,每個存儲區又分為128個64字節的頁面。 ??MAX7651支持兩種Flash編程模式。第一種是在應用中編程,假定應用程序在某一個8KB的存儲區內運行,並且保證程序只侷限在這個8KB的存儲區內運行,可以通過這種方式編程另一個8KB Flash存儲區。MAX7651具有四個特殊功能寄存器(EEAL、EEAH、EEDAT、EESTCMD),用於實現此項功能。這裏,可以將程序存儲器作為數據存儲器使用,用户不需要額外擴展數據存儲器空間。第二種編程模式是,採用外部編程器的並行接口進行編程。目前我國市場比較通用的編程器有:台灣河洛公司的ALL-07和ALL-11P2、Xeltek公司的Superpro/680和Superpro/V等。其中ALL-07編程器目前支持的器件數目可達5000種以上,但是目前它並不直接支持MAX7651,可通過以下簡單方法解決這個問題: ① 經過分析Atmel的AT89LV55以及Intel的8XC51RB兩種單片機外部編程條件和時序可知,其與MAX7651幾乎完全相同。從AT89LV55的外部編程條件(見表1)和硬件接線圖(見圖2)來看,唯一不同的是二者採用了不同的編程電壓。    ② 製作64-TQFP與40-DIP插座適配器,詳細原理圖請參考本刊網絡補充版(//www.dpj.com.cn)。請注意P2.5和P3.3的處理方式以及/VPP引腳可以直接與VCC相連接,也可以通過低壓差線性穩壓器與編程器連接。 ③ 打開ALL-07,連接MAX7651。在ALL-07程序界面中選擇AT89LV55或者87C51RB器件選項就可以直接編程MAX7651。注意:如果使用87C51RB,那麼不能使用編程密碼陣列命令;如果使用AT89LV55,必須設置編程最高地址空間為3FC0H,而不是3FFFH。 結 語 ??MAX7651是業界高性能混合工藝單片機的典型器件,可以極大降低模擬應用的設計難度。它的小封裝、低功耗和高速特性非常適合便攜式和嵌入式系統設計。Maxim擁有新一代的高速、低功耗8位和16位單片機內核技術,正在設計和規劃更多的混合工藝單片機產品。

    時間:2004-12-05 關鍵詞: Max 8位單片機 7651 51內核

發佈文章

技術子站

更多

項目外包