當前位置:編程學習大全網 - 源碼下載 - 中英醫學源代碼

中英醫學源代碼

通過組合正確的控制信號並將ALE引腳保持在10 ms的低電平,可以實現整個PEROM陣列和三個鎖定位的電擦除..在芯片擦除操作中,代碼陣列全部寫入“1 ”,並且該操作必須在任何非空存儲器字節被重復編程之前執行。

此外,AT89C51配有穩態邏輯,可在低至零頻率條件下使用,並支持兩種軟件可選的掉電模式。在空閑模式下,CPU停止工作。但是RAM,定時器,計數器,串口,中斷系統還在工作。在掉電模式下,RAM的內容被保存,振蕩器被凍結,其它芯片功能被禁止,直到下壹次硬件復位。

串行通信

單片機的結構和專用寄存器是編寫軟件的關鍵。至於串行通信所需的特殊功能寄存器,有SCON、TCON、TMOD、SCON等。它們是什麽意思?

SBUF數據緩沖寄存器這是壹個可以直接尋址的串行端口專用寄存器。有朋友問“為什麽串口收發機只用同壹個寄存器SBUF?”?而不是發送和接收寄存器。“實際上,SBUF包含兩個獨立的寄存器,壹個是發送寄存器,壹個是接收寄存器,但它們都使用同壹個地址——99H。CPU讀SBUF的時候會指向接收寄存器,寫的時候會指向發送寄存器,接收寄存器是雙緩沖寄存器,可以避免接收中斷沒有及時響應,數據沒有取走,下壹幀數據已經到了而導致的數據重疊問題。發送端不需要使用雙緩沖,壹般情況下,我們在編寫發送程序時也不需要使用發送中斷對外發送數據。SBUF寄存器的操作方法很簡單,只要用關鍵字sfr定義99H地址為變量,就可以讀寫,比如sfr SBUF = 0x99當然,妳也可以用其他名字。通常在reg51.h或at89x51.h等標準頭文件中定義,用#include引用就可以了。

為了監視或控制芯片或設備中的接口狀態,SCON串行端口控制寄存器通常參考接口控制寄存器。SCON是51芯片的串口控制寄存器。它的尋址地址為98H,是壹個位可尋址寄存器,功能是監視和控制51芯片的串口工作狀態。51芯片的串口可以工作在幾種不同的工作模式,其工作模式的設置是使用SCON寄存器。其位的具體定義如下:

SM0 SM1 SM2人

SM0和SM1為串口工作模式設置位,這樣這兩位可以對應設置四種模式。串口工作模式設置。

SM0 SM1模式功能波特率

0 0 0同步移位寄存器fosc/12

0 1 1 8位UART變量

1 0 2 9位UART fosc/32或fosc/64

1 1 3 9位UART變量

這裏只說明最常用的模式1,其他模式就壹壹跳過了。感興趣的朋友可以找找相關的硬件資料。表中Fosc代表振蕩器的頻率,即晶振的頻率。UART代表(通用異步接收器)。

SM2是模式2和模式3下多處理器通信的使能位。在模式0下,該位必須為0。

REM是允許接收的位。當REM設為1時,串口允許接收,當REM設為0時,禁止接收。REM由軟件設置或清除。如果接收和發送引腳P3.0和P3.1都在壹個電路中連接到上位機,並且軟件中有串口中斷處理程序,當處理壹個子程序時要求串口不被上位機的控制字符中斷時,可以在這個子程序的開頭加上REM=0禁止接收,在子程序的結尾加上REM=1打開串口重新接收。也可以使用上面的實際源代碼,添加REM=0進行實驗。

TB8發送數據位8,這是在模式2和3下發送的第9位。該位可以根據需要由軟件置1或清零。通常該位在通信協議中用作奇偶校驗位,在多處理器通信中該位用來表示是地址幀還是數據幀。

RB8接收數據位8,即模式2和模式3下接收數據的第9位。該位可以是奇偶校驗位和地址/數據標識位。在模式0下,RB8是不使用的保留位。在模式1下,當SM2=0時,RB8是接收數據的停止位。

TI發送中斷標誌位。在模式0下,當發送第8位數據時,它由硬件設置。在其他模式下,停止位在發送開始時由硬件設置。TI置位後,申請中斷。CPU響應中斷後,發送下壹幀數據。在任何模式下,TI都必須由軟件清零,也就是說,數據寫入SBUF後,硬件發送數據,中斷響應(如中斷開啟)。此時TI=1,表示傳輸已經完成,TI不會被硬件清零,必須用軟件清零。

RI接收中斷標誌位。在模式0下,在接收第8位結束時,它由硬件設置。在其他模式下,它在接收停止位的中途由硬件設置。RI=1,申請中斷,請求CPU取數據。然而,在模式1下,當SM2=1時,如果未接收到有效的停止位,RI將不會置位。RI也必須通過軟件移除。常用的串口模式1傳輸10位。1的起始位是0,8位數據,低位優先。1的停止位是1。它的波特率是可變的,其速率取決於定時器1或定時器2的計時值(溢出速率)。AT89C51、AT89C2051等51系列芯片只有定時器0和定時器1兩個定時器,定時器2是89C52系列芯片獨有的。

波特率使用串口進行通信時,壹個很重要的參數就是波特率。只有上下位機的波特率相同,才能進行正常通信。波特率是指串行端口每秒可以傳輸的波特位數。有些初學者認為波特率是指每秒傳輸的字節數。比如標準的9600會被誤認為每秒9600字節,但實際上是指每秒可以傳輸9600比特,壹個字節需要8比特。如果采用串口方式傳輸,那麽加上起始位和停止位,每個數據字節將占用10位。波特率9600使用該模式。51芯片的串口模式0的波特率是固定的,為fosc/12。以12M的晶振計算,其波特率可以達到1M。模式2的波特率固定在fosc/64或fosc/32,具體的取決於PCON寄存器中的SMOD位,比如SMOD為0,波特率為focs/64,SMOD為1,波特率為focs/32。模式1和模式3的波特率是可變的,取決於定時器1或2(52芯片)的溢出率。那麽我們如何計算這兩個模塊呢?

設置公式波特率時相關寄存器的值是多少?它可以通過以下公式計算。

波特率= (2smod ÷ 32) ×定時器1溢出率

在上面的公式中,如果PCON寄存器中的SMOD位設置為1,波特率可以增加2倍。定時器1通常用於在定時器模式2下工作。此時,計時值中的TL1用作計數,TH1用作自動重載值。在這種計時模式下,定時器溢出後,TH1的值會自動加載到TL1中,重新開始計數,無需軟件幹預,計時更加準確。在這種計時模式2下,定時器1溢出率的計算公式如下:

溢出率=(計數率)/(256-th1)

上述公式中的“計數率”與所用晶體振蕩器的頻率有關。51芯片中定時器啟動後,定時寄存器TH的值每壹個機器周期就會加壹,壹個機器周期等於十二個振蕩周期,所以可以知道51芯片的計數率是晶振頻率的65438/12M,壹個是65438+。通常是用11.0592M晶體得到標準波特率,不會有誤差,為什麽呢?算算就知道了。如果要得到9600的波特率,晶振是11.0592M和12M,定時器1是模式2,SMOD設置為1,那麽我們來看看TH1需要的值是多少。替換公式:

11.0592米

9600 =(2÷32)×((11.0592m/12)/(256-th 1))

TH1=250

12M

9600 =(2÷32)×((12M/12)/(256-th 1))

TH1≈249.49

從上面的計算可以看出,使用12M晶體時,計算出來的TH1不是整數,TH1的值只能是整數,所以會有壹些誤差,無法產生準確的9600波特率。當然,在使用中可以接受壹定的誤差。即使使用11.0592M的晶振,由於晶體本身的誤差也會導致波特率出錯,但晶體本身的誤差對波特率的影響很小,可以忽略不計。

整個PEROM陣列具有三個電目標,除了通過正確的控制信號組合之外,還保持ALE引腳置於低電平,以在10毫秒內完成電擊。在芯片擦除操作中,所有的代碼數組都是寫“1”並且在任何壹個非空的存儲字段被重復編程之前,該操作必須被執行。

此外,AT89 C51內置穩態邏輯,能在靜態邏輯下低至零頻率的情況下,支持兩種軟件可選擇的掉電模式。在空閑模式下,CPU停止工作。但是RAM,在固定時間機器,統計機器,串和中斷系統仍然在工作。掉電模式時,保存RAM中的內容和內存抖動,禁止其他芯片功能使用,直到下壹次硬件復位。

字符串通信

單片機和備用機非凡的機器結構,這是妳編寫軟件的要害。至於字符串通信需要用到那些特殊功能的存機,它們是SCON、TCON、TMOD、SCON等。,每個代表什麽意思?

這是壹個字符串,可以直接查找壹個地址線的專用內存。有壹個朋友曾經這樣問過“為什麽在字符串中的行接收和發送,都只是使用同壹個存機SBUF?”?但不是收發各存壹機用1。”實際上SBUF包含了兩個獨立的存機,1發出存機,另壹個接收存機,但它們都使用同壹個地址address - 99 Hs。CPU在讀SBUF時會指向接收緩存器,而寫時會指向發送緩存器,而接收緩存器是壹對緩存器,這樣可以避免接收中斷沒有及時響應,數據被帶走,下壹個數據已經到來,而導致數據層層疊疊的問題。發送器則不需要使用雙a緩沖區,壹般情況下我們不需要使用發送中斷,也不需要在寫發送程序時向外發送數據。操作SBUF存機的方法很簡單,只要用關鍵字sfr對這個99 H地址定義修改為1就可以對其進行讀寫操作,如sfr SBUF = 0 xes 99當然妳也可以用其他名字。至於它通常已經在頭文件中做了定義,如reg 51。hs或at 89 xes 51。h等。的標準,只要使用#include引用就可以了。

SCON串行口控制存機通常為了監視或控制在芯片或設備中的接口人的狀態,將引用來自接口人的控制存機。SCON是51芯片的串行口控制存機。它的尋址地址是壹個98 Hs,是壹個可以尋址的存機,功能是監視和控制51在線狀態。這串51芯片可以工作在幾種不同的工作模式下,其工作模式的構成是使用SCON存機。它對每壹個的具體定義如下:

SM0 SM1 SM2人

SM0、SM1是壹串線路構成中的工作模式,所以2可以是要進行四種模式的構成。串線工作模式的建立。

SM0 SM1模式函數波特別率

000同步移動存放機器fosc/12

0壹壹8個UARTs是可變的

壹個029 UART fosc/32s或fosc/64

壹個39 UARTs是可變的

在我最常用的模式說明1,其他模式也壹壹跳過,有興趣的朋友可以找相關硬件資料查看。fosc的代表形式是拍頻震蕩器,也就是晶體拍頻。UART是(通用異步接收器)的英文縮寫。

SM2在模式2、模式3下更具有處理機器通信的能力。在模式0下請求0。

為了允許接收REM,REM將1:00字符串放置為允許接收,將0:00放置為禁止接收。REM由軟件或純零設置。如果在壹個電路中收發引腳P3.0,p 3.1都與上位機相連,軟件上有壹串中斷處理程序,在處理某個狀態程序時被請求不允許字符串被上位機的控制字符表來產生中斷,所以可以在該狀態程序的開頭加入REM = 0禁止接收,在子程序over=1再加入REM打開字符串接收大家也可以用top=0的實際源代碼加入REM開始實驗。

TB8發出壹個數據8,在模式2和模式3中要發出第9個。那就可以根據需要使用軟件來放置或清除,通常這是位於通信協議上的壹個奇怪的意外,這在處理機通信中則用來表示更多的是地址還是數據。

RB8接收數據8,在模式2中,3是已經接收數據的第9個。這可能是奇怪的偶然,地址/數據標記。在模式0中,RB8不用於預訂。Be SM 2=在模式10中,RB8是已經接收到數據的站點。

TI發出壹個中斷標記。在模式0下,完成發送第8個數據,由硬件放置。那麽在其它模式下被發送停止的開始被硬件放置。TI放置後,應用程序中斷,CPU響應中斷後發出下壹個數據。在任何模式下,TI都必須由軟件來清除,也就是說在數據寫入SBUF後,硬件發出數據,中斷響應(如果中斷打開),此時TI=1,表示發出已經完成,TI不能從硬件清除,所以此時必須使用軟件將其清零。

國際扶輪收到中斷標記。在模式0下,接收第8個結束,由硬件放置。那麽在其它模式下接收停止的中途由硬件來放置。RI=1,應用程序中斷並請求CPU取走壹個數據。但是在模式1中,SM 2=1:00,是接收有效的停止,則不會放置到RI。同樣RI也要靠軟件通關。在常用的字符串模式1傳遞10,壹個起點是0,8數據,低位位於第壹位,壹個終點是1。它的波動速度是可變的,它的速度是由固定時間內的壹臺機器1或固定時間內的壹臺機器2的值決定的。(溢出速度)51系列芯片如AT89 C51和AT89 C2051等。只有2個定時機,定時機0和定時機1,而定時機2是89 C52系列芯片才有的。

在使用串行口做通信時,壹個很重要的參數就是串行口速率,只有上下機器的串行口速率相似時才可以進行正常的通信。特波速率是壹條線中可以在壹個端口內傳送的每壹個數字的波形。有壹些初學者的朋友以為波特速是指每壹個發的數的單詞節,誤認為每壹個長如標準的9600會發9600個單詞節,但實際上它是指每壹個能發9600個二進制,而壹個單詞節要8個二進制,如果用1的串模式發,那麽加上壹個起止, 張每次按單詞節將占用10個二進制數,9600特采用1的方式傳送,每傳送的單詞節數為9600÷s 10 = 960個單詞節。 串行口51芯片工作模式0波比固定,是fosc/12,用壹個12 Ms的晶振來計算,所以它的波比可以達到1 M。模式2波比固定在fosc/64或fosc/ 32中,具體用那種由PCON定存的SMOD,如SMOD為0,波比是focs/64模式1與模式3的波動尤其是速率是可變的,並且由在固定時間內機器是1還是2(52芯片)溢出速率決定。那麽我們如何計算這兩個模型呢

波型特率設定相關的存款機值?可以用下面的公式計算。

波尤率=(2 SMOD ÷ 32)×固定時間機1溢出速度

最後壹種類型如設置了PCON存機中的SMOD為1:00可以將出租率提升200%。通常使用定時模式下,定時模式下壹臺工作在定時模式下的機器工作2次,此時定時值中的TL1用作計數,TH1用作自動重新綁定值,這種定時模式下,在定時模式下,當機器溢出後,TH1的值會自動加載TL1,重新開始計數,所以可以不用軟件幹預,使定時更加準確。此時在固定時間模式下2倍於固定時間機1的溢出速度的計算公式為:

溢流速度=(逆流速度)/(256 - TH1s)

上壹個“計數速度”與晶振內的拍子使用的晶振頻率有關,在51個芯片中定時啟動未來的再結合使每個機子周期中定時存儲的值增加,壹個機子周期等於12個拍子周期,所以可以知道51個芯片的計數速度為1/12個晶振頻率, 壹個12 Ms的晶振用在51芯片上,那麽51的計數速度就是1 M。通常用壹個11.0592 M的晶振是為了得到標準的無任何誤差不良的波速,為什麽呢? 計算壹下子就知道了。比如我們好特到9600波速率,晶振為11.0592 Ms和12 Ms,在定時機1是模式2,SMOD設置為1,分別看請求的TH1值多少。這壹代人進入公式:

11.0592米

9600 =(2÷s 32)×(11.0592 Ms/12)(/(256-th 1))

TH 1=250

12M

9600 =(2÷s 32)×(12 Ms/12)(/(256-th 1))

TH1 ≈ 249.49

上面的計算可以看出用TH1的晶體的12 M時間計算出來的不是整數,但是th 1的值可以取整數,所以會存在壹定的誤差,不能產生9600的精度。在使用中壹定的誤差是可以接受的,使用11.0592 Ms的晶振總體上也會因誤差的存在而使晶振產生誤差,但晶振的誤差受晶振頻率的影響很小,可以忽略不計。

  • 上一篇:鋯石內核源代碼
  • 下一篇:壹系列繁花似錦的網名。
  • copyright 2024編程學習大全網