1、電瓶特性
單片機一般使用TTL(晶體管-晶體管邏輯電平)
TTL電瓶高電平是5v,低電平是0v。5v為1,0v位0.這被稱作TTL。
TTL組成的電路的電平是個電壓范圍,規定輸出高電平>2.4v,輸出低電平<0.4v。室溫下,一般輸出高電平是3.5v,輸出的低電平是0.2v。最小的輸入高電平和低電平位>=2.0v和<=0.8v。
計算機串口用的是MAX232電平,高電平是-12v,低電平是+12v。
計算機串口和TTL通信需要進行電平轉換。依賴電平轉換芯片。
2、io口介紹
io為輸入輸出接口
分為總線型和非總線型。總線型的擁有四組io口,非總線型的擁有兩組io口。
3、單片機最小組成系統
電源、單片機、晶振(cpu執行頻率)、復位電路(進行程序復位) 復位引腳通常會接一個電容和按鈕,電容是為了通電的一瞬間進行程序復位。按鈕則是為了手動復位。
4、工作頻率
晶振決定了cpu的工作頻率,接到cpu的兩個時鍾引腳上。XTAL1,XTAL2
5、引腳功能
vcc接正極5v電源,vss接地。xtal1和xtal2接外部晶振。RST為復位信號輸入引腳,單片機運行時,此引腳加上持續兩個周期的高電平時,就可以完成復位操作。Vpd為備用電源輸入端,當主電源vcc發生故障,降低到某一規定時,將+5v電源自動接入RST端,為內部RAM提供備用電源。
EA為內外部程序存儲器的選擇端,89c52單片機內部有8kb程序存儲空間,當EA為高電平的時候,單片機訪問內部程序存儲空間,為低電平的時候訪問外部程序存儲空間,一般來講內部程序存儲空間已夠用,直接接高電平即可。Vpp為編程電壓輸入端,需要輸入12v的電壓才能把程序燒寫進去,現在已經不需要了,通過串口就可以進行下載,直接接高電平即可。ALE為地址所存允許信號,訪問外部存儲器的時候用的,現在基本用不到。PROG對片內EPROM的單片機編寫程序時,此引腳做編程脈沖輸入。現在使用的都是flashROM,以前使用EPROM的時候用得到,現在基本已用不到。PSEN當單片機訪問外部程序存儲器時,此引腳為讀取外部存儲選通信號,現在也很少用到。
P1 P2 P3作為輸入輸出雙向口,p0口擁有三種狀態,高電平、低電平、高阻態。P3口有第二個功能,也可以配置特殊功能寄存器來實現。
P3.0:RXD串行口輸入 P3.1:TXD串行口輸出 P3.2:INT0外部中斷0輸入 P3.3INT1外部中斷1輸入 P3.4:T0定時器0外部輸入 P3.5:T1定時器1外部輸入 P3.6:WR外部寫控制 P3.7:RD外部讀控制
此處掌握P3.0 P3.1,P3.6 P3.7已很少使用。P3.2 3.3 3.4 3.5可以通過配置特殊功能寄存器來實現。
6.中斷
計算機執行某程序時,發生了緊急或特殊請求,cpu暫停某程序的執行,轉而去處理上述的事件或請求,處理完畢后再重新執行某程序的過程叫中斷。
和中斷相關的特殊功能寄存器:
EX0 外部中斷0 IT0 低電平觸發方式 EA 總中斷 中斷服務程序的方法后面需要加上 interrupt 0
51單片機系列一共有5個中斷源
外部中斷源2個,INT0和INT1 分別由P3.2、P3.3端口線引入,低電平或下降沿引起,下降沿是一個高電平變為一個低電平。這兩個外部中斷源標志和她們的觸發方式控制位由特殊功能寄存器TCON的低4位控制。TCON的高4位是控制定時器0和定時器1的,TR位是控制定時計數器的啟動,TF位是定時計數器+1累加器的溢出的標志位。
內部中斷源3個,T0、T1分別為定時器/計數器 0和1中斷,分別由T0和T1回零溢出引起。TI/RI串行I/O口中斷,串行端口完成一幀字符發送/接受后引起(TI/RI中斷標志位不會主動清0,需要我們在中斷程序里清0,這樣才不會反復的觸發中斷),這三個內部中斷源的控制位分別鎖存在特殊功能寄存器TCON和SCON中。
TCON的8位分別為(從第七位到第零位)
TF1(定時器+1時溢出的標志)
TR1(控制定時器的啟動)
TF0(定時器+1時溢出的標志)
TR0(控制定時器的啟動)
IE1(外部中斷申請標志位)
IT1(外部中斷請求的觸發方式選擇位,為0在INT0/INT1端申請中斷的信號為低電平有效,為1在INT0/INT1端申請中斷的信號為負跳變有效,也就是下降沿,高電平和低電平必須持續一個周期)
IE0(外部中斷申請標志位)
IT0(外部中斷請求的觸發方式選擇位,為0在INT0/INT1端申請中斷的信號為低電平有效,為1在INT0/INT1端申請中斷的信號為負跳變有效, 也就是下降沿,高電平和低電平必須持續一個周期)
地址為88H,可以被8整除,可以進行位尋址。為什么被8整除的可以位尋址,個人猜想跟所有能被8整除的二進制后三位都是0有關系,要么這三個0用來表示位,要么就是沒有道理就是這么干。
中斷允許控制寄存器IE(A8H):CPU對中斷系統所有中斷以及某個中斷源的開放和屏蔽是由中斷允許寄存器IE控制的。8位從高位到低位分別為:
EA:CPU中斷允許(總允許)位,0全部禁用中斷,1時允許中斷。
第六位空
第五位空
ES:串行口中斷允許位:0禁止中斷,1允許中斷
ET1:定時/計數器T1中斷允許位,0時禁止中斷,1允許中斷
EX1:外部中斷1允許位,0時禁止中斷,1允許中斷
ET0:定時/計數器T0中斷允許位,0時禁止中斷,1允許中斷
EX0:外部中斷0允許位,0時禁止中斷,1允許中斷
這5個中斷源分別有2個優先級,低優先級的中斷,在執行過程中,如果高優先級的中斷請求過來,那么則會處理高級中斷請求,請求完畢后再返回低級中斷請求。通過寄存器IP來設置
IP(B8H) — — — PS(串行口中斷優先級控制,1高優先級,0低優先級) PT1(T1中斷優先級控制,1高優先級,0低優先級) PX1(INT1優先級控制,1高優先級,0低優先級) PT0(T0中斷優先級控制,1高優先級,0低優先級) PX0(INT0優先級控制,1高優先級,0低優先級)
如果相同優先級同時發送中斷請求(低概率),順序為:
0、外部中斷0
1、T0溢出中斷
2、外部中斷1
3、T1溢出中斷
4、串行口中斷
中斷程序的方法后面要加interrupt 0,0就是代表優先級,依次為01234
中斷響應條件:總中斷、中斷源的中斷允許位為1,如果時外部中斷的話,需要中斷模式選擇。
51單片機有2個16位的定時器/計數器:T0 T1,每經過一個機器周期,寄存器+1,
定時器控制寄存器TCON(0x88)
TF1:定時器1溢出標志,溢出的時候,此位為1
TR1:定時器1運行控制位,置1開始計時,0停止計時
TF0:定時器0溢出標志,溢出的時候,此位為1
TR0:定時器0運行控制位,置1開始計時,0停止計時
IE1:
IT1:
IE0:
IT0:
定時器工作模式寄存器TMOD,地址0x89,前四位控制定時器T1,后四位控制定時器T0
GATE:門空位
C/T:0工作在定時模式下,1為計數模式下
M1:
M0:
GATE:門空位
C/T:0工作在定時模式下,1為計數模式下
M1:
M0:
M1,M0 組成工作模式:00模式0 、01模式1(16位計數器,定時器1初始值存放寄存器TH1,TL1,定時器0一樣)、10模式2、11模式3
7、串口通信
通信方式分為並行通信和串行通信
並行通信指數據的各位同時在多根數據線上發送或接受。如P0-7同時發送/接受數據給外界。
串行通信是指用一條數據線將數據一位一位的依次傳輸,每一位數據占據一個固定的時間長度,所謂的雙工,就是指一根線接受,一根線發送。
通信分為異步通信和同步通信:
異步通信是指通信的發送於接受設備使用各自的時鍾控制數據的發送和接受過程。為了雙發的收發協調,要求發送和接受設備的時鍾盡可能一致。異步通信是指以字符(構成的幀)為單位進行傳輸,字符與字符的間隔是任意的,但是每個字符中的各位是以固定的時間傳送的。
同步通信時要建立發送方時鍾對接收方時鍾的直接控制,使雙發達到完全同步。這樣傳輸位字符時無間隔。一位一位的一直發。
數據的發送方向可分為三種:單工:單向發送,半雙工:收發不可同時進行,全雙工:收發可同時進行。
上面說的時鍾指的就是比特率,比特率是每秒傳輸二進制代碼的位數,單位是位/秒(bps),也叫波特率。傳輸與接受的波特率需要設置成一樣。
串口控制寄存器SCON(98H):用於設置串行口的工作方式、監視串行口的工作狀態、控制發送與接收的狀態等,它是一個既可以字節尋址又可以位尋址的8位特殊功能寄存器。
SM0,SM1:0,0 工作方式0(移位寄存器。基本用不到,擴展io口用的。) fosc/12 波特率,fosc晶振頻率
0,1 工作方式1(10位異步收發器,8位是數據位,還有一位是起始位,一位停止位。發送數據的波特率是可變的。) (2SMD/32)×(T1溢出率)
1,0 工作方式2 (11位異步收發器,9位數據位,其中有一位是校驗位,波特率是fosc/64或fosc/32)(2SMD/64)×fosc
1,1 工作方式3(11位異步收發器,9位數據位,其中有一位是校驗位,波特率可變)(2SMD/32)×(T1溢出率)
SM2:多機通信 0雙機 1多機
REN:接收控制 0禁止 1允許
TB8:發送數據第9位
RB8:接收數據第9位
TI:發送中斷標志,發送完一幀后,TI置1,表示發送一結束,可以軟件查詢TI,也可以向cpu申請中斷。再次發送下一個需要置0,必須由軟件置0.
RI:接受中斷標志,原理同上。
TI和RI的中斷地址是同一個地址0023H,因此再中斷程序中必須由軟件查詢TI和RI的狀態才能確定是接收還是發送中斷。
電源控制寄存器PCON
D7:SMOD 再串行口工作方式123中是波特率加倍位,產生高波特率時啟用,平時不用。比如11.0592晶振產生的57600波特率就要設置成SMOD=1
D6、D5、D4 空
D3:GF1
D2:GF0
D1:PD
D0:IDL
8、IIC通信
目前通常用的串行總線主要有IIC總線,SPI總線和SCI總線
IIC總線以同步串行2線的方式進行通信(一條時鍾線,一條數據線) 主從方式
SPI總線以同步串行3線的方式進行通信(一條時鍾線,一條數據輸入線,一條數據輸出線)
SCI總線以異步方式進行通信(一條數據輸入線,一條數據輸出線)
SCL位高電平期間,數據線上的數據必須保持穩定,只有SCL信號為低電平期間,SDA狀態才允許變化。
SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號。SCL為高電平期間,SDA線由低電平向高電平的變化表示終止信號。
每個字節必須保證長度是8位。數據傳送時,先傳送最高位,每一個被傳送的字節后面必須都跟隨一位應答位。