<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)一些基礎(chǔ)問題

          單片機(jī)一些基礎(chǔ)問題

          作者: 時(shí)間:2013-05-16 來源:網(wǎng)絡(luò) 收藏

          8051 系列的一些如8052 有附加的128 字節(jié)的內(nèi)部RAM 位于從80H 開始的地址空間中被稱為IDATA 因?yàn)镮DATA 區(qū)的地址和SFRs (特殊功能寄存器)的地址是重疊的通過區(qū)分所訪問的存儲(chǔ)區(qū)來解決地址重疊問題因?yàn)镮DATA 區(qū)只能通過間接尋址來訪問。8051 的最后一個(gè)存儲(chǔ)空間為64K 和CODE 區(qū)一樣采用16 位地址尋址稱作外部數(shù)據(jù)區(qū)簡(jiǎn)稱XDATA 區(qū)這個(gè)區(qū)通常包括一些RAM 如SRAM 或一些需要通過總線接口的外圍器件。

          8051 可對(duì)存儲(chǔ)區(qū)直接或間接尋址這些是典型的尋址方式直接尋址是在指令中直接

          包含所須尋址的字節(jié)地址直接尋址只能在DATA 區(qū)和SFR 中進(jìn)行。

          SBUF 串行緩沖區(qū) DPTR 數(shù)據(jù)指針 MOVX 讀入或?qū)懭胪獠考拇嫫鞯臄?shù)據(jù)

          fosc (frequency oscillate)晶振頻率

          指針寄存器而不是直接使用地址

          中斷系統(tǒng)

          基本的8051 支持6 個(gè)中斷源兩個(gè)外部中斷兩個(gè)定時(shí)/計(jì)數(shù)器中斷一個(gè)串行口輸

          入/輸出中斷中斷發(fā)生后處理器轉(zhuǎn)到將五個(gè)中斷入口處之一執(zhí)行中斷處理程序中斷向

          量位于代碼段的最低地址出串行口輸入輸出中斷共用一個(gè)中斷向量

          reg51.h 詳細(xì)說明

          是c51(用于開發(fā)的一種c語言)的頭文件。類似于頭文件AT89X52.h。這兩個(gè)頭文件基本是一樣的,只是在使用時(shí)對(duì)位的定義不一樣,at89x52.h文件中對(duì)P1.1的操作是寫成P1_1;reg52.h文件中的操作則寫成P1^1。表示方法不一樣而已。另外前者是特指ATMEL公司的52系列,后者指所有52系列的單片機(jī)。

          LED3.C(8): error C141: syntax error near '='

          在c51單片機(jī)里面不可以用#define LED1 P0^1

          正確的使用sbit LED1=P0^1;

          還有keil編譯器不支持像P0^1=0;或P0^1=1;這樣的賦值

          本征庫(intrinsic routines)和非本征證庫

          C51提供的本征是指編譯時(shí)直接將固定的代碼插入當(dāng)前行,而不是用ACALL和LCALL語句來實(shí)現(xiàn),這樣就大大提供了函數(shù)訪問的效率,而非本征函數(shù)則必須由ACALL及LCALL調(diào)用。

          C51的本征庫函數(shù)只有9個(gè),數(shù)目雖少,但都非常有用,列如下:

          _crol_(_cror_):將char型變量循環(huán)向左(右)移動(dòng)指定位數(shù)后返回

          _iror_(_irol_):將int型變量循環(huán)向左(右)移動(dòng)指定位數(shù)后返回

          _lrol_(_lror_):將long型變量循環(huán)向左(右)移動(dòng)指定位數(shù)后返回

          _nop_: 相當(dāng)于插入NOP “空指令”,在x86的CPU中機(jī)器碼為0x90(144)。

          _testbit_: 相當(dāng)于JBC bitvar測(cè)試該位變量并跳轉(zhuǎn)同時(shí)清除。

          _chkfloat_: 測(cè)試并返回源點(diǎn)數(shù)狀態(tài)。

          使用時(shí),必須包含#inclucle 一行。

          如不說明,下面談到的庫函數(shù)均指非本征庫函數(shù)。

          TMOD:定時(shí)器/計(jì)數(shù)器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER)

          定時(shí)器/計(jì)數(shù)器模式控制寄存器TMOD是一個(gè)逐位定義的8位寄存器,但只能使用字節(jié)尋址,其字節(jié)地址為89H。

          其格式為:

          工作原理

          其中低四位(即D0 ~ D3)定義定時(shí)器/計(jì)數(shù)器T0,高四位(即D4 ~ D7)定義定時(shí)器/計(jì)數(shù)器T1。各位的說明:

          Ⅰ,GATE——門控制。

          ●GATE=1時(shí),由外部中斷引腳INT0、INT1來啟動(dòng)定時(shí)器T0、T1。

          當(dāng)INT0引腳為高電平時(shí)TR0置位,啟動(dòng)定時(shí)器T0;

          當(dāng)INT1引腳為高電平時(shí)TR1置位,啟動(dòng)定時(shí)器T1。

          ●GATE=0時(shí),僅由TR0,TR1置位分別啟動(dòng)定時(shí)器T0、T1。

          Ⅱ,C/T——功能選擇位

          C/T=0時(shí)為定時(shí)功能,C/T=1時(shí)為計(jì)數(shù)功能。

          置位時(shí)選擇計(jì)數(shù)功能,清零時(shí)選擇定時(shí)功能。

          Ⅲ,M0、M1——方式選擇功能

          由于有2位,因此有4種工作方式:

          M1M0工作方式功能說明

          00方式013位定時(shí)器/計(jì)數(shù)器

          01方式116位定時(shí)器/計(jì)數(shù)器

          10方式2自動(dòng)重裝8位定時(shí)器/計(jì)數(shù)器

          11方式3T0分為2個(gè)8位獨(dú)立計(jì)數(shù)器,T1停止計(jì)數(shù)

          TR0,TR1:分別為T0,T1的運(yùn)行控制位。1啟動(dòng),0停止。

          GATE:門控制位。GATE=0,由TR0或TR1啟動(dòng)定時(shí)器;GATE=1,只有TR0或TR1為1且INT0 或INT1 為高電平時(shí)才能啟動(dòng)定時(shí)器。

          單片機(jī)中的TH0 TL0

          TH0和TL0是控制定時(shí)/計(jì)數(shù)器T0的,TH1和TL1是針對(duì)T1的。也就是用TH0和TL0中的數(shù)來控制T0到底定時(shí)多久或計(jì)數(shù)多少再進(jìn)入中斷,TH1和TL1也一樣。

          16位定時(shí)器/計(jì)數(shù)器的高低位,TL0是低八位,TH0=是高八位,當(dāng)?shù)桶宋挥?jì)數(shù)記滿了之后,向高八位進(jìn)一位,計(jì)數(shù)器,由于51單片機(jī)是8位機(jī),所以要分成兩個(gè)八位的寄存器來存儲(chǔ)16位的計(jì)數(shù)器!

          單片機(jī) TH0=0xd8;TL0=0xf0是什么意思

          這是為 T0 計(jì)數(shù)器賦初值,(高位)TH0=0xd8(0xffd8,初始地址為0xffff),(低位)TL0=0xf0(0xfff0)

          換成 10 進(jìn)制是:55536

          那么 65536-55536=10000

          表明 T0 計(jì)數(shù)器 計(jì)數(shù) 10000 個(gè)機(jī)器周期后溢出。

          如果使用 12M 晶振,那么計(jì)數(shù) 10000 個(gè)機(jī)器周期使用 10ms,可以作為定時(shí)用。

          由于TH0和TL0已知,那么可得T0寄存器中為:0xFF00(16)=65280(10)

          X=65536-T0=65536-65280=256,,X即為定時(shí)機(jī)器周期數(shù)

          如果是12MHz的話,機(jī)器周期=1us,那么定時(shí)為256us

          如果是6MHz的話,機(jī)器周期=2us,那么定時(shí)時(shí)間為512us

          機(jī)器周期=12*晶振周期,晶振周期=1/晶振頻率

          指令周期是看一條指令包含有多少個(gè)機(jī)器周期,如_nop_就一個(gè)機(jī)器周期

          延時(shí)函數(shù)delay()

          c語言里不是那么算的,編譯的時(shí)候轉(zhuǎn)匯編了用匯編才算的出,不用糾結(jié)這個(gè)的精確延時(shí)的話也都用定時(shí)器,大致的延時(shí)的話用軟件去算就行了

          void delay_ms(unsigned int x)

          {

          unsigned int i,j;

          for(i=0;i

          for(j=0;j125;j++);

          }

          AJMP

          是無條件跳轉(zhuǎn)指令之一,叫做絕對(duì)跳轉(zhuǎn)。 主要是用來改變程序執(zhí)行的路線,到需要的指令或程序去執(zhí)行。 AJMP的范圍為正負(fù)2K單元。使用時(shí)注意跳的目的地和當(dāng)前地址的距離范圍不能超過上述值,否則,就會(huì)跳過不去。

          $

          $代表它自己所在位置的地址

          中斷允許寄存器IE



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();