單片機(jī)一些基礎(chǔ)問題
一般說1T 4T 6T 12T的單片機(jī)是指的什么?
標(biāo)準(zhǔn)51是12T的,就是說12個時鐘周期(晶振周期,例如12M的,周期是1/12M,單位秒),機(jī)器做一個指令周期,剛好就是1/12M*12=1uS,常見指令例如nop就是一個周期,剛好1uS,其他的大多多于一個周期,乘除法更多。所以如果計算指令時間可以這樣算。
而現(xiàn)在很多51核的單片機(jī)工藝質(zhì)量上去后,頻率大大提高,增強(qiáng)型51有6T的,如果接12M的話,一個nop就只需要0.51uS,如果是STC的部分單片機(jī)12T的話,那只需要1/12uS。
單片機(jī)的晶振不是隨便選,要看技術(shù)手冊,看最高頻率,看支持類型等等。一般12M,接串口的話11.0592M。如果是PIC,很多4M,8M。
不是越高越好,對很多不需要大量處理,只是控制的情況,為了增加可靠性,降低編程難度,降低功耗,往往可選用低頻的,例如實(shí)時時鐘的32768晶振。
外接晶體引腳
XTAL1 是片內(nèi)振蕩器的反相放大器輸入端,XTAL2 則是輸出端,使用外部振蕩器
時,外部振蕩信號應(yīng)直接加到XTAL1,而XTAL2 懸空。內(nèi)部方式時,時鐘發(fā)生器對振蕩脈沖二分頻,如晶振為12MHz,時鐘頻率就為6MHz。晶振的頻率可以在1MHz-24MHz內(nèi)選擇。電容取30PF 左右。
每個8051處理周期包括12 個振蕩周期每12 個振蕩周期用來完成一項(xiàng)操作如取指令和計算指令執(zhí)行時間可把時鐘頻率除以12 取倒數(shù)然后指令執(zhí)行所須的周期數(shù)。因此如果你的系統(tǒng)時鐘是11.059MHz 除以12 后就得到了每秒執(zhí)行的指令個數(shù)為921583條指令取倒數(shù)將得到每條指令所須的時間1.085ms。
復(fù)位 RST
在振蕩器運(yùn)行時,有兩個機(jī)器周期(24 個振蕩周期)以上的高電平出現(xiàn)在此引腿時,將使單片機(jī)復(fù)位,只要這個腳保持高電平,51 芯片便循環(huán)復(fù)位。復(fù)位后P0-P3 口均置1 引腳表現(xiàn)為高電平,程序計數(shù)器和特殊功能寄存器SFR 全部清零。當(dāng)復(fù)位腳由
高電平變?yōu)榈碗娖綍r,芯片為ROM 的00H 處開始運(yùn)行程序,復(fù)位操作不會對內(nèi)部 RAM 有所影響。
輸入輸出引腳
(1) P0 端口[P0.0-P0.7] P0 是一個8 位漏極開路型雙向I/O 端口,端口置1(對端口寫1)時作高阻抗輸入端。作為輸出口時能驅(qū)動8 個TTL。對內(nèi)部Flash 程序存儲器編程時,接收指令字節(jié);校驗(yàn)程序時輸出指令字節(jié),要求外接上拉電阻。在訪問外部程序和外部數(shù)據(jù)存儲器時,P0 口是分時轉(zhuǎn)換的地址(低8 位)/數(shù)據(jù)
總線,訪問期間內(nèi)部的上拉電阻起作用。
(2) P1 端口[P1.0-P1.7] P1 是一個帶有內(nèi)部上拉電阻的8 位雙向I/0 端口。輸出時可驅(qū)動4 個TTL。端口置1 時,內(nèi)部上拉電阻將端口拉到高電平,作輸入用。對內(nèi)部 Flash 程序存儲器編程時,接收低8 位地址信息。
(3) P2 端口[P2.0-P2.7] P2 是一個帶有內(nèi)部上拉電阻的8 位雙向I/0 端口。輸出時可驅(qū)動4 個TTL。端口置1 時,內(nèi)部上拉電阻將端口拉到高電平,作輸入用。對內(nèi)部Flash 程序存儲器編程時,接收高8 位地址和控制信息。在訪問外部程序和16 位外部數(shù)據(jù)存儲器時,P2 口送出高8 位地址。而在訪問8
位地址的外部數(shù)據(jù)存儲器時其引腳上的內(nèi)容在此期間不會改變。
(4) P3 端口[P3.0-P3.7] P2 是一個帶有內(nèi)部上拉電阻的8 位雙向I/0 端口。輸出時可驅(qū)動4 個TTL。端口置1 時,內(nèi)部上拉電阻將端口拉到高電平,作輸入用。對內(nèi)部Flash 程序存儲器編程時,接控制信息。除此之外P3 端口還用于一些專門功能,具體請看
P3 引腳兼用功能
P3.0 串行通訊輸入(RXD)
P3.1 串行通訊輸出(TXD)
P3.2 外部中斷0( INT0)
P3.3 外部中斷1(INT1)
P3.4 定時器0 輸入(T0)
P3.5 定時器1 輸入(T1)
P3.6 外部數(shù)據(jù)存儲器寫選通WR
P3.7 外部數(shù)據(jù)存儲器寫選通RD
波特率與比特率:
波特率是指數(shù)據(jù)信號對載波的調(diào)制速率,它用單位時間內(nèi)載波調(diào)制狀態(tài)改變的次數(shù)來表示,其單位是波特(Baud)。比特率:每秒鐘傳送的二進(jìn)制位數(shù),用 b / s 表示(b表示bit)波特率與比特率的關(guān)系是比特率=波特率X單個調(diào)制狀態(tài)對應(yīng)的二進(jìn)制位數(shù)。
兩相調(diào)制(單個調(diào)制狀態(tài)對應(yīng)1個二進(jìn)制位)的比特率等于波特率;四相調(diào)制(單個調(diào)制狀態(tài)對應(yīng)2個二進(jìn)制位)的比特率為波特率的兩倍;八相調(diào)制(單個調(diào)制狀態(tài)對應(yīng)3個二進(jìn)制位)的比特率為波特率的三倍;依次類推。
晶振可以根據(jù)自己的情況使用,一般實(shí)驗(yàn)板上是用11.0592MHz 或12MHz,使用前者的好外是可以產(chǎn)生標(biāo)準(zhǔn)的串口波特率,后者則一個機(jī)器周期為1 微秒,便于做精確定時。在自己做實(shí)驗(yàn)里,注意的是VCC 是+5V 的,不能高于此值,否則將損壞單片機(jī),太低則不能正常工作。在31 腳要接高電平,這樣我們才能執(zhí)行片內(nèi)的程序,如接低電平則使用片外的程序存儲器。
KEIL uVision2 C51 編譯器所支持的數(shù)據(jù)類型
數(shù)據(jù)類型長度值域
Unsigned char單字節(jié)0~255
Signed char單字節(jié)-128~+127
Unsigned int雙字節(jié)0~65535
Signed int雙字節(jié)-32768~+32767
Unsigned long四字節(jié)0~4294967295
Signed long四字節(jié)-2147483648~+2147483647
float四字節(jié)±1.175494E-38~±3.402823E+38
bit1位0或1
sfr單字節(jié)0~255
sfr16雙字節(jié)0~65535
Sbit1位0或1
變量的定義可以使用所有C51 編譯器支持的數(shù)據(jù)類型,而常量的數(shù)據(jù)類型只有整型、浮點(diǎn)型、字符型、字符串型和位標(biāo)量
長整型就在數(shù)字后面加字母L,如104L,034L,0xF340 等。浮點(diǎn)型常量可分為十進(jìn)制和指數(shù)表示形式(12e5表示12*10^5)
8051 結(jié)構(gòu)提供給用戶3 個不同的存儲空間
第一個存儲空間是代碼段(CODE)用來存放可執(zhí)行代碼被16 位尋址空間可達(dá)64K;除了可執(zhí)行代碼還可在代碼段中存儲查尋表為達(dá)此目的8051 提供了通過數(shù)據(jù)指針DPTR 或程序計數(shù)器加上由累加器提供的偏移量進(jìn)行尋址的指令這樣就可以把表頭地址裝入DPTR 中把表中要尋址的元素的偏移量裝入累加器中8051 在執(zhí)行指令時的過程中把這兩者相加由此可節(jié)省不少指令周期。
第二個存儲區(qū)是8051 內(nèi)128 字節(jié)的內(nèi)部RAM 或8052 的前128 字節(jié)內(nèi)部RAM 這部分主要是作為數(shù)據(jù)段稱為DATA 區(qū)指令用一個或兩個周期來訪問數(shù)據(jù)段訪問DATA 區(qū)比訪問XDATA 區(qū)要快因?yàn)樗捎弥苯訉ぶ贩绞蕉L問XDATA 須采用間接尋址必須先初始化DPTR 通常我們把使用比較頻繁的變量或局部變量存儲在DATA 段中但是必須節(jié)省使用DATA 段因?yàn)樗目臻g畢竟有限。在數(shù)據(jù)段中也可通過R0 和R1 采用間接尋址R0 和R1 被作為數(shù)據(jù)區(qū)的指針將要恢復(fù)或改變字節(jié)的地址放入R0 或R1 中根據(jù)源操作數(shù)和目的操作數(shù)的不同執(zhí)行指令需要一個或兩個周期。數(shù)據(jù)段中有兩個小段第一個子段包含四組寄存器組每組寄存器組包含八個寄存器共32 個寄存器可在任何時候通過修改PSW 寄存器的RS1 和RS0 這兩位來選擇四組寄存器的任意一組作為工作寄存器組8051 也可默認(rèn)任意一組作為工作寄存器組工作寄存器組的快速切換不僅使參數(shù)傳遞更為方便而且可在8051 中進(jìn)行快速任務(wù)轉(zhuǎn)換另外一個子段叫做位尋址段BDATA 包括16 個字節(jié)共128 位每一位都可單獨(dú)尋址8051 有好幾條位操作指令這使得程序控制非常方便并且可幫助軟件代替外部組合邏輯這樣就減少了系統(tǒng)中的模塊數(shù)位尋址段的這16 個字節(jié)也可像數(shù)據(jù)段中其它字節(jié)一樣進(jìn)行字節(jié)尋址。[!--empirenews.page--]
8051 系列的一些單片機(jī)如8052 有附加的128 字節(jié)的內(nèi)部RAM 位于從80H 開始的地址空間中被稱為IDATA 因?yàn)镮DATA 區(qū)的地址和SFRs (特殊功能寄存器)的地址是重疊的通過區(qū)分所訪問的存儲區(qū)來解決地址重疊問題因?yàn)镮DATA 區(qū)只能通過間接尋址來訪問。8051 的最后一個存儲空間為64K 和CODE 區(qū)一樣采用16 位地址尋址稱作外部數(shù)據(jù)區(qū)簡稱XDATA 區(qū)這個區(qū)通常包括一些RAM 如SRAM 或一些需要通過總線接口的外圍器件。
8051 可對存儲區(qū)直接或間接尋址這些是典型的尋址方式直接尋址是在指令中直接
包含所須尋址的字節(jié)地址直接尋址只能在DATA 區(qū)和SFR 中進(jìn)行。
SBUF 串行緩沖區(qū) DPTR 數(shù)據(jù)指針 MOVX 讀入或?qū)懭胪獠考拇嫫鞯臄?shù)據(jù)
fosc (frequency oscillate)晶振頻率
指針寄存器而不是直接使用地址
中斷系統(tǒng)
基本的8051 支持6 個中斷源兩個外部中斷兩個定時/計數(shù)器中斷一個串行口輸
入/輸出中斷中斷發(fā)生后處理器轉(zhuǎn)到將五個中斷入口處之一執(zhí)行中斷處理程序中斷向
量位于代碼段的最低地址出串行口輸入輸出中斷共用一個中斷向量
reg51.h 詳細(xì)說明
是c51(用于單片機(jī)開發(fā)的一種c語言)的頭文件。類似于頭文件AT89X52.h。這兩個頭文件基本是一樣的,只是在使用時對位的定義不一樣,at89x52.h文件中對P1.1的操作是寫成P1_1;reg52.h文件中的操作則寫成P1^1。表示方法不一樣而已。另外前者是特指ATMEL公司的52系列單片機(jī),后者指所有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;這樣的賦值
本征庫函數(shù)(intrinsic routines)和非本征證庫函數(shù)
C51提供的本征函數(shù)是指編譯時直接將固定的代碼插入當(dāng)前行,而不是用ACALL和LCALL語句來實(shí)現(xiàn),這樣就大大提供了函數(shù)訪問的效率,而非本征函數(shù)則必須由ACALL及LCALL調(diào)用。
C51的本征庫函數(shù)只有9個,數(shù)目雖少,但都非常有用,列如下:
_crol_(_cror_):將char型變量循環(huán)向左(右)移動指定位數(shù)后返回
_iror_(_irol_):將int型變量循環(huán)向左(右)移動指定位數(shù)后返回
_lrol_(_lror_):將long型變量循環(huán)向左(右)移動指定位數(shù)后返回
_nop_: 相當(dāng)于插入NOP “空指令”,在x86的CPU中機(jī)器碼為0x90(144)。
_testbit_: 相當(dāng)于JBC bitvar測試該位變量并跳轉(zhuǎn)同時清除。
_chkfloat_: 測試并返回源點(diǎn)數(shù)狀態(tài)。
使用時,必須包含#inclucle
如不說明,下面談到的庫函數(shù)均指非本征庫函數(shù)。
TMOD:定時器/計數(shù)器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER)
定時器/計數(shù)器模式控制寄存器TMOD是一個逐位定義的8位寄存器,但只能使用字節(jié)尋址,其字節(jié)地址為89H。
其格式為:
工作原理
其中低四位(即D0 ~ D3)定義定時器/計數(shù)器T0,高四位(即D4 ~ D7)定義定時器/計數(shù)器T1。各位的說明:
Ⅰ,GATE——門控制。
●GATE=1時,由外部中斷引腳INT0、INT1來啟動定時器T0、T1。
當(dāng)INT0引腳為高電平時TR0置位,啟動定時器T0;
當(dāng)INT1引腳為高電平時TR1置位,啟動定時器T1。
●GATE=0時,僅由TR0,TR1置位分別啟動定時器T0、T1。
Ⅱ,C/T——功能選擇位
C/T=0時為定時功能,C/T=1時為計數(shù)功能。
置位時選擇計數(shù)功能,清零時選擇定時功能。
Ⅲ,M0、M1——方式選擇功能
由于有2位,因此有4種工作方式:
M1M0工作方式功能說明
00方式013位定時器/計數(shù)器
01方式116位定時器/計數(shù)器
10方式2自動重裝8位定時器/計數(shù)器
11方式3T0分為2個8位獨(dú)立計數(shù)器,T1停止計數(shù)
TR0,TR1:分別為T0,T1的運(yùn)行控制位。1啟動,0停止。
GATE:門控制位。GATE=0,由TR0或TR1啟動定時器;GATE=1,只有TR0或TR1為1且INT0 或INT1 為高電平時才能啟動定時器。
單片機(jī)中的TH0 TL0
TH0和TL0是控制定時/計數(shù)器T0的,TH1和TL1是針對T1的。也就是用TH0和TL0中的數(shù)來控制T0到底定時多久或計數(shù)多少再進(jìn)入中斷,TH1和TL1也一樣。
16位定時器/計數(shù)器的高低位,TL0是低八位,TH0=是高八位,當(dāng)?shù)桶宋挥嫈?shù)記滿了之后,向高八位進(jìn)一位,計數(shù)器,由于51單片機(jī)是8位機(jī),所以要分成兩個八位的寄存器來存儲16位的計數(shù)器!
單片機(jī) TH0=0xd8;TL0=0xf0是什么意思
這是為 T0 計數(shù)器賦初值,(高位)TH0=0xd8(0xffd8,初始地址為0xffff),(低位)TL0=0xf0(0xfff0)
換成 10 進(jìn)制是:55536
那么 65536-55536=10000
表明 T0 計數(shù)器 計數(shù) 10000 個機(jī)器周期后溢出。
如果使用 12M 晶振,那么計數(shù) 10000 個機(jī)器周期使用 10ms,可以作為定時用。
由于TH0和TL0已知,那么可得T0寄存器中為:0xFF00(16)=65280(10)
X=65536-T0=65536-65280=256,,X即為定時機(jī)器周期數(shù)
如果是12MHz的話,機(jī)器周期=1us,那么定時為256us
如果是6MHz的話,機(jī)器周期=2us,那么定時時間為512us
機(jī)器周期=12*晶振周期,晶振周期=1/晶振頻率
指令周期是看一條指令包含有多少個機(jī)器周期,如_nop_就一個機(jī)器周期
延時函數(shù)delay()
c語言里不是那么算的,編譯的時候轉(zhuǎn)匯編了用匯編才算的出,不用糾結(jié)這個的精確延時的話也都用定時器,大致的延時的話用軟件去算就行了
void delay_ms(unsigned int x)
{
unsigned int i,j;
for(i=0;i
for(j=0;j<125;j++);
}
AJMP
是無條件跳轉(zhuǎn)指令之一,叫做絕對跳轉(zhuǎn)。 主要是用來改變程序執(zhí)行的路線,到需要的指令或程序去執(zhí)行。 AJMP的范圍為正負(fù)2K單元。使用時注意跳的目的地和當(dāng)前地址的距離范圍不能超過上述值,否則,就會跳過不去。
$
$代表它自己所在位置的地址
中斷允許寄存器IE[!--empirenews.page--]
中斷允許控制寄存器寄存器地址A8H,位尋址AFH~A8H。
中斷的允許或禁止是由片內(nèi)可進(jìn)行位(什么是位,大家可別到現(xiàn)在還說不知道哦)尋址的 8位中斷允許寄存器 IE 來控制的,單片機(jī)中斷系統(tǒng)中有兩種不同類型的中斷:一種稱為非屏蔽中斷;另一種稱為屏蔽中斷。對于非屏蔽中斷,用戶不能用軟件方法加以禁止,一旦有中斷申請,CPU 將根據(jù)自然優(yōu)先級予以響應(yīng)。這里主要講屏蔽中斷,對于屏蔽中斷,我們可以通過軟件的方法來予以控制(允許中斷我們把它稱為中斷開放,不允許中斷我們把它稱之為中斷屏蔽),如何操作,說穿了其實(shí)很簡單,就是通過對 IE 的相應(yīng)位的置“1”或請“0”來允許或禁止某個中斷,請看下面的表格:
EA × × ES ET1 EX1 ET0 EX0
(1)EA:總中斷允許開關(guān)。它是個總開關(guān),凡是要設(shè)置中端都得先通過它。EA=1,開放所有的中斷;EA=0,則所有中斷都被禁止。
(2)ES:串行口中斷控制位。ES=1,允許中斷;ES=0,禁止中斷。
(3)ET1:定時/計數(shù)器 1 中斷控制位。ET1=1,允許中斷;ET1=0,禁止中斷。
(4)EX1:外中斷 1 中斷控制位。EX1=1,允許中斷;EX1=0,禁止中斷。
(5)ET0:定時器 0 中斷控制位。ET0=1,允許中斷;ET0=0,禁止中斷。
(6)EX0:外中斷 0 中斷控制位。EX0=1,允許中斷;EX0=0,禁止中斷。
SETB
SETB是匯編指令,意思是把其后面的那個寄存器的位置1。
DJNZ
功能:減1,若非0則跳轉(zhuǎn)
說明:DJNE指令首先將第1個操作數(shù)所代表的變量減1,如果結(jié)果不為0,則轉(zhuǎn)移到第2個操作數(shù)所指定的地址去執(zhí)行。如果第1個操作數(shù)的值為00H,則減1后變?yōu)?FFH。該指令不影響標(biāo)志位。跳轉(zhuǎn)目標(biāo)地址的計算:首先將PC值加2(即指向下一條指令的首字節(jié)),然后將第2操作數(shù)表示的有符號的相對偏移量加到PC上去即可。byte所代表的操作數(shù)可采用寄存器尋址或直接尋址。
為什么要通過了74HC14把持ULN2003 驅(qū)動芯片驅(qū)動蜂鳴器
74HC14是六反相施密特觸發(fā)器集成電路,其基礎(chǔ)作用就是反相器,一般用于信號輸入電路,用施密特觸發(fā)器對輸入信號進(jìn)行波形整形,對干擾信號有必定的克制作用,其輸出為標(biāo)準(zhǔn)的TTL電平。ULN2003 的每一對達(dá)林頓都串聯(lián)一個2.7K 的基極電阻,在5V 的工作電壓下它能與TTL 和CMOS 電路直接相連,可以直接處理本來需要標(biāo)準(zhǔn)邏輯緩沖器來處理的數(shù)據(jù)。所以,ULN2003 是通過74HC14把持的,而74HC14是反相器,不加是不行的。。。
ULN2003 是高耐壓、大電流復(fù)合晶體管陣列,由七個硅NPN 復(fù)合晶體管組成。ULN2003 工作電壓高,工作電流大,灌電流可達(dá)500mA,并且能夠在關(guān)態(tài)時承受50V 的電壓,可以在高負(fù)載電流并行運(yùn)行。 74HC14實(shí)現(xiàn)了6路施密特觸發(fā)反相器。 蜂鳴器和繼電器是電流型驅(qū)動的器件,直接用單片機(jī)的引腳驅(qū)動的話電流不夠,所以用ULN2003 進(jìn)行驅(qū)動,74HC14是反向器,也就是把輸入的1變?yōu)?
2003是反向的三極管輸出陣列(有7路),但是,其集電極是開路輸出的。輸入高就輸出低;輸入低時,其輸出三極管截止,電平懸浮,高電平靠外部負(fù)載上的電源V+實(shí)現(xiàn)。
2003的第8腳,通常接地;第9腳COM接電源V+,可以為負(fù)載電流在斷流時提供續(xù)流通路.
2003的電流驅(qū)動能力就相當(dāng)于是多個普通的分離的三極管,總電流可達(dá)五百毫安。加74HC14主要是確保上電后2003無輸出,否則上電后蜂鳴器會先叫一聲。
繼電器的引腳怎么接
2和6是常開,1和6是常閉,3和4是線圈,5和6是連著的,用哪個都行。
其實(shí)不用看引腳圖,用萬能表一測便知。
把萬能表跳到電阻X1K檔,有一定值的是線圈,等于0的是常閉,無窮大的是常開,一試就知道了
74HC與74LS的區(qū)別
LS的驅(qū)動能力要比HC的強(qiáng)一些,所以如果后級的負(fù)載比較重的話,要選LS的.同時,LS的功耗也比HC的大一些.HC采用高速CMOS工藝制作,自身功耗低,輸出高低電平范圍寬。 LS采用早期的雙極型工藝,驅(qū)動能力相對較大些。
74系列集成電路大致可分為6大類:l 74××(標(biāo)準(zhǔn)型);l 74LS××(低功耗肖特基);l 74S××(肖特基);l 74ALS××(先進(jìn)低功耗肖特基);l 74AS××(先進(jìn)肖特基);l 74F××(高速)。近年來還出現(xiàn)了高速CMOS電路的74系列,該系列可分為3大類:l HC為COMS工作電平;l HCT為TTL工作電平,可與74LS系列互換使用;l HCU適用于無緩沖級的CMOS電路。這9種74系列產(chǎn)品,只要后邊的標(biāo)號相同,其邏輯功能和管腳排列就相同。根據(jù)不同的條件和要求可選擇不同類型的74系列產(chǎn)品,比如電路的供電電壓為3V就應(yīng)選擇74HC系列的產(chǎn)品。
TTL和CMOS有什么區(qū)別
1,TTL電平:
輸出高電平>2.4V,輸出低電平<0.4V。在室溫下,一般輸出高電平是3.5V,輸出低電平是0.2V。最小輸入高電平和低電平:輸入高電平>=2.0V,輸入低電平<=0.8V,噪聲容限是0.4V。
2,CMOS電平:
邏輯電平電壓接近于電源電壓,0邏輯電平接近于0V。而且具有很寬的噪聲容限。
3,電平轉(zhuǎn)換電路:
因?yàn)門TL和COMS的高低電平的值不一樣(ttl 5v<==>cmos 3.3v),所以互相連接時需要電平的轉(zhuǎn)換:就是用兩個電阻對電平分壓,沒有什么高深的東西。
4, OC門,即集電極開路門電路,OD門,即漏極開路門電路,必須外界上拉電阻和電源才能將開關(guān)電平作為高低電平用。否則它一般只作為開關(guān)大電壓和大電流負(fù)載,所以又叫做驅(qū)動門電路。
5,TTL和COMS電路比較:
1)TTL電路是電流控制器件,而coms電路是電壓控制器件。
2)TTL電路的速度快,傳輸延遲時間短(5-10ns),但是功耗大。
COMS電路的速度慢,傳輸延遲時間長(25-50ns),但功耗低。
COMS電路本身的功耗與輸入信號的脈沖頻率有關(guān),頻率越高,芯片集越熱,這是正常現(xiàn)象。
3)CMOS是場效應(yīng)管構(gòu)成,TTL為雙極晶體管構(gòu)成
4)COMS的邏輯電平范圍比較大(5~15V),TTL只能在5V下工作
5)CMOS的高低電平之間相差比較大、抗干擾性強(qiáng),TTL則相差小,抗干擾能力差
數(shù)碼管的8位二進(jìn)制是高位在前底位在后[!--empirenews.page--]
74HC573本身能提供20mA的電流,足以使數(shù)碼管點(diǎn)亮,不必再用三極管驅(qū)動了。
關(guān)于ULN2003
ULN是集成達(dá)林頓管IC,內(nèi)部還集成了一個消線圈反電動勢的二極管,可用來驅(qū)動繼電器。它是雙列16腳封裝,NPN晶體管矩陣,最大驅(qū)動電壓=50V,電流=500mA,輸入電壓=5V,適用于TTL COMS,由達(dá)林頓管組成驅(qū)動電路。 ULN是集成達(dá)林頓管IC,內(nèi)部還集成了一個消線圈反電動勢的二極管,它的輸出端允許通過電流為200mA,飽和壓降VCE 約1V左右,耐壓BVCEO 約為36V。用戶輸出口的外接負(fù)載可根據(jù)以上參數(shù)估算。采用集電極開路輸出,輸出電流大,故可直接驅(qū)動繼電器或固體繼電器,也可直接驅(qū)動低壓燈泡。通常單片機(jī)驅(qū)動ULN2003時,上拉2K的電阻較為合適,同時,COM引腳應(yīng)該懸空或接電源。
ULN2003是一個非門電路,包含7個單元,但獨(dú)每個單元驅(qū)動電流最大可達(dá)350mA.資料的最后有引用電路,9腳可以懸空。
比如1腳輸入,16腳輸出,你的負(fù)載接在VCC與16腳之間,不用9腳。
uln2003的作用:
ULN2003是大電流驅(qū)動陣列,多用于單片機(jī)、智能儀表、PLC、數(shù)字量輸出卡等控制電路中。可直接驅(qū)動繼電器等負(fù)載。
輸入5VTTL電平,輸出可達(dá)500mA/50V。
ULN2003是高耐壓、大電流達(dá)林頓陳列,由七個硅NPN達(dá)林頓管組成。 該電路的特點(diǎn)如下: ULN2003的每一對達(dá)林頓都串聯(lián)一個2.7K的基極電阻,在5V的工作電壓下它能與TTL和CMOS電路 直接相連,可以直接處理原先需要標(biāo)準(zhǔn)邏輯緩沖器。
ULN2003 是高壓大電流達(dá)林頓晶體管陣列系列產(chǎn)品,具有電流增益高、工作電壓高、溫度范圍寬、帶負(fù)載能力強(qiáng)等特點(diǎn),適應(yīng)于各類要求高速大功率驅(qū)動的系統(tǒng)。
lcd12864與1602的區(qū)別
一般12864的控制芯片通常有ST7920、KS0108和T6963C等;但1602是字符的模塊控制芯片是KS0066等,1602它現(xiàn)在的芯片也有不少,但都是可以兼容的;簡單的來說:12864是圖形點(diǎn)陣,是顯示圖形和漢字,當(dāng)然也是可以顯示字母和阿拉伯?dāng)?shù)字了;但1602只能顯示字母和阿拉伯?dāng)?shù)字;同時他們的芯片不一樣,所以他們的編程上中的程序也是不一樣!
1602是指的16字符2行的那種吧。如果是,其點(diǎn)陣是這樣的結(jié)構(gòu)。其IC帶有字庫。想顯示字符,只需要輸入對應(yīng)字的地址。
而12864的點(diǎn)陣是連續(xù)的。一般不帶有字庫。想寫一個圓點(diǎn),都要自己想好要寫那些位置。屏上每個點(diǎn)都對應(yīng)字IC內(nèi)部RAM中一個BIT.
12864 顧名思義像素是128*64,能顯示8*4個漢字,因型號不同,有的帶漢字庫,有的不帶,能顯示圖像效果,功能比1602強(qiáng)大,1602只能顯示字母、數(shù)字和符號能顯示16*2個字符,但寄存器不止32個,具體也忘了,有一些顯示效果,如字符一個個顯示、字符從左到右或從右到左顯示等等,顯示效果簡單,價格低,大約6塊錢,而12864最少40塊錢一塊,在編程使用方面,兩者難度差不多,原理差不多,都是寫指令、寫地址、寫數(shù)據(jù)等等。
頭文件INTRINS.H的作用(轉(zhuǎn)自http://blog.csdn.net/sky0829/article/details/6043230)
在C51單片機(jī)編程中,頭文件INTRINS.H的函數(shù)使用起來,就會讓你像在用匯編時一樣簡便.
內(nèi)部函數(shù) 描述
_crol_ 字符循環(huán)左移
_cror_ 字符循環(huán)右移
_irol_ 整數(shù)循環(huán)左移
_iror_ 整數(shù)循環(huán)右移
_lrol_ 長整數(shù)循環(huán)左移
_lror_ 長整數(shù)循環(huán)右移
_nop_ 空操作8051 NOP 指令
_testbit_ 測試并清零位8051 JBC 指令
函數(shù)名: _crol_,_irol_,_lrol_
原 型: unsigned char _crol_(unsigned char val,unsigned char n);
unsigned int _irol_(unsigned int val,unsigned char n);
unsigned int _lrol_(unsigned int val,unsigned char n);
舉例:
_crol_,_cror_:將char型變量循環(huán)向左(右)移動指定位數(shù)后返回
_testbit_: 相當(dāng)于JBC bitvar測試該位變量并跳轉(zhuǎn)同時清除。
_chkfloat_: 測試并返回源點(diǎn)數(shù)狀態(tài)。
就是匯編中的子函數(shù)。
_crol_,_cror_:如國二進(jìn)制數(shù)為01010101 那么_crol_(1) 左移1位后將高位補(bǔ)低位。
結(jié)果10101010。
功 能:_crol_,_irol_,_lrol_以位形式將val 左移n 位,該函數(shù)與8051“RLA”指令相關(guān),上面幾個函數(shù)不同于參數(shù)類型。
例:
#include
main()
{
unsigned int y;
C-5 1 程序設(shè)計 37
y=0x00ff;
y=_irol_(y,4);
}
函數(shù)名: _cror_,_iror_,_lror_
原 型: unsigned char _cror_(unsigned char val,unsigned char n);
unsigned int _iror_(unsigned int val,unsigned char n);
unsigned int _lror_(unsigned int val,unsigned char n);
功 能:_cror_,_iror_,_lror_以位形式將val 右移n 位,該函數(shù)與8051“RRA”指令相關(guān),上面幾個函數(shù)不同于參數(shù)類型。
例:
#include
main()
{
unsigned int y;
y=0x0ff00;
y=_iror_(y,4);
}
函數(shù)名: _nop_
原 型: void _nop_(void);
功 能:_nop_產(chǎn)生一個NOP 指令,該函數(shù)可用作C 程序的時間比較。C51 編譯器在_nop_函數(shù)工作期間不產(chǎn)生函數(shù)調(diào)用,即在程序中直接執(zhí)行了NOP 指令。
例:
P()=1;
_nop_();
P()=0;
函數(shù)名: _testbit_
原 型:bit _testbit_(bit x);
功 能:_testbit_產(chǎn)生一個JBC 指令,該函數(shù)測試一個位,當(dāng)置位時返回1,否則返回0。如果該位置為1,則將該位復(fù)位為0。8051 的JBC 指令即用作此目的。_testbit_只能用于可直接尋址的位;在表達(dá)式中使用是不允許的。
在C51單片機(jī)編程中,頭文件INTRINS.H的函數(shù)使用起來,就會讓你像在用匯編時一樣簡便.
內(nèi)部函數(shù) 描述
_crol_ 字符循環(huán)左移
_cror_ 字符循環(huán)右移
_irol_ 整數(shù)循環(huán)左移
_iror_ 整數(shù)循環(huán)右移
_lrol_ 長整數(shù)循環(huán)左移
_lror_ 長整數(shù)循環(huán)右移
_nop_ 空操作8051 NOP 指令[!--empirenews.page--]
_testbit_ 測試并清零位8051 JBC 指令
函數(shù)名: _crol_,_irol_,_lrol_
原 型: unsigned char _crol_(unsigned char val,unsigned char n);
unsigned int _irol_(unsigned int val,unsigned char n);
unsigned int _lrol_(unsigned int val,unsigned char n);
舉例:
_crol_,_cror_:將char型變量循環(huán)向左(右)移動指定位數(shù)后返回
_testbit_: 相當(dāng)于JBC bitvar測試該位變量并跳轉(zhuǎn)同時清除。
_chkfloat_: 測試并返回源點(diǎn)數(shù)狀態(tài)。
就是匯編中的子函數(shù)。
_crol_,_cror_:如國二進(jìn)制數(shù)為01010101 那么_crol_(1) 左移1位后將高位補(bǔ)低位。
結(jié)果10101010。
功 能:_crol_,_irol_,_lrol_以位形式將val 左移n 位,該函數(shù)與8051“RLA”指令相關(guān),上面幾個函數(shù)不同于參數(shù)類型。
例:
#include
main()
{
unsigned int y;
C-5 1 程序設(shè)計 37
y=0x00ff;
y=_irol_(y,4);
}
函數(shù)名: _cror_,_iror_,_lror_
原 型: unsigned char _cror_(unsigned char val,unsigned char n);
unsigned int _iror_(unsigned int val,unsigned char n);
unsigned int _lror_(unsigned int val,unsigned char n);
功 能:_cror_,_iror_,_lror_以位形式將val 右移n 位,該函數(shù)與8051“RRA”指令相關(guān),上面幾個函數(shù)不同于參數(shù)類型。
例:
#include
main()
{
unsigned int y;
y=0x0ff00;
y=_iror_(y,4);
}
函數(shù)名: _nop_
原 型: void _nop_(void);
功 能:_nop_產(chǎn)生一個NOP 指令,該函數(shù)可用作C 程序的時間比較。C51 編譯器在_nop_函數(shù)工作期間不產(chǎn)生函數(shù)調(diào)用,即在程序中直接執(zhí)行了NOP 指令。
例:
P()=1;
_nop_();
P()=0;
函數(shù)名: _testbit_
原 型:bit _testbit_(bit x);
功 能:_testbit_產(chǎn)生一個JBC 指令,該函數(shù)測試一個位,當(dāng)置位時返回1,否則返回0。如果該位置為1,則將該位復(fù)位為0。8051 的JBC 指令即用作此目的。_testbit_只能用于可直接尋址的位;在表達(dá)式中使用是不允許的。
擴(kuò)展閱讀:單片機(jī)最小系統(tǒng)制作