天天看點

51單片機定時器、序列槽、中斷MCS-51功能單元

文章目錄

  • MCS-51功能單元
    • 一、定時器&計數器
    • 二、并行口&串行口
    • 三、中斷系統

MCS-51功能單元

一、定時器&計數器

  1. 數量:兩個可程式設計的16位的定時器/計數器T0和T1;都是16位加法計數結構;分為高8位和低8位;TH0、TL0,TH1、TL1;

    定時器/計數器T0、T1是80C51的中斷源之一,當資料寄存器溢出,則向CPU申請中斷。資料寄存器的複位狀态為0。為使計數值或定時值滿足自己的要求,需預先将資料寄存器指派,稱為初值設定,中斷中也要重新設定初值。

  2. 定時器和計數器本質:都是計數器,對下降沿進行計數,計數達到溢出後置為标志位或者進入中斷;
  3. 兩者的差別:

    定時器是對内部的機械周期脈沖進行計數,每個脈沖都是一個機械周期;定時時間=機器周期*(2^L-初值) (L=13,16,8)

    計數器則是通過外部IO口進行脈沖計數,一個脈沖加一個數;對應IO口:T0-P3.4,T1-P3.5;

    計數長度:計數長度=(2^L-初值) (L=13,16,8)

    兩者的模式切換通過TMOD控制

  4. TMOD結構圖:
51單片機定時器、序列槽、中斷MCS-51功能單元
  1. TMOD詳解

    GATE:門控位

    ​ GATE =1,由中斷引腳INT0(P3.2)、INT1(P3.3)和TCON中的位TR0、TR1共同控制來啟動定時器/計數器

    ​ GATE =0,由TR0和TR1置位來啟動定時器/計數器**(一般為0)**

    C/!T:模式選擇位:

    ​ 1時,計數器模式;

    ​ 0時,定時器模式;

    M0 & M1共同控制工作方式:

51單片機定時器、序列槽、中斷MCS-51功能單元

項目開發一般用01,考試大機率考00;

  1. 啟動停止與中斷控制寄存器TCON
51單片機定時器、序列槽、中斷MCS-51功能單元

TFx:定時器或者計數器溢出時置位1,請求中斷,中斷程式進入後自動清零;

TRx:定時器啟動控制位,當其等于1時定時器/計數器啟動;

  1. 中斷允許控制寄存器:IE
    51單片機定時器、序列槽、中斷MCS-51功能單元

    ETx:定時器/計數器的中斷允許位

    EA:CPU總中斷的允許位

  2. 定時器/計數器使用:(重點)

    工作方式的設定:

    ​ 僞代碼:

    //設定定時器0工作在16位模式
    //C語言
    	TMOD=0x01;				//定時器
    //彙編
    	MOV		TMOD,	#01H;	
               

    計數初值的計算+裝載:

    ​ 僞代碼:

    //機械周期1us,設定500us中斷一次為FE0C
    //C語言
    	TH0=0xFE;
        TL0=0x0C;
    //彙編
    	MOV 	TH0,	#0FEH	;
        MOV		TL0,	#0cH	;
    
               

    中斷允許位的設定:

    僞代碼:

    //C 	
    	EA=1;
    	ET0=1;
    //assembly
    	SETB	EA		;turn on all interrupt
        SETB	ET0		;turn on 0 interrupt
               

    開啟定時器:

    僞代碼:

    //c
    	TR0=1;
    
    //assembly
    	SETB 	TR0		;turn on
            
    	CLR 	TR0		;turn off !
               
  3. 使用執行個體:

    定時器使用方式(中斷方式):

    ORG		0000H;
    		AJMP	MAIN;
    ORG		001BH;
    		AJMP	IRQ1;
    MAIN:	
            MOV		TMOD,	#00H	;工作模式0,高8+低5
            MOV		TH1,	#0FCH
            MOV		TL1,	#03H
            SETB	TR1;
            SETB	ET1;
            SETB	EA;
            AJMP	$;
            
    IRQ1:	        
    		MOV		TMOD,	#00H
            MOV		TH1,	#0FCH
            CPL		P1.0
            RETI	;中斷傳回一定要加!
            
               
    計數器使用方式(中斷方式):
    ORG		0000H;
    		AJMP	MAIN;
    ORG		001BH;
    		AJMP	IRQ1;
    		
    MAIN:   
    		MOV		TMOD,	#04H	;計數器模式
            MOV		TH1,	#0FCH	;一千個下降沿中斷一次
            MOV		TL1,	#03H
            SETB	TR1;
            SETB	ET1;
            SETB	EA;
            AJMP	$;
            
    IRQ1:	        
    		MOV		TMOD,	#00H
            MOV		TH1,	#0FCH
            CPL		P1.0
            RETI			;中斷傳回一定要加!
               
    查詢方式則是判斷TF溢出标志,變高後進入自定義韓式處理資料,清空标志;

二、并行口&串行口

​ 并行口:并行傳輸資料(不常用)

​ 占據資源大,錯誤率高,但快

​ 串行口:(重要)

​ 穩定,占據IO口小,準确,稍微慢

  1. ​ 串行口控制寄存器SCON:
    51單片機定時器、序列槽、中斷MCS-51功能單元

    ​ SM0和SM1:串行口方式選擇位;

    ​ 00-移位寄存器方式

    ​ 01-8位UART,波特率可變

    ​ 10-9位UART,波特率為fosc/64或fosc/32(PCON決定)

    ​ 11-9位UART,波特率可變

    ​ 方式1為常用通信方式;方式2、3為多機通信,方式0為移位寄存器,不常用;

    重要标志位:
     TI:發送完成标志
     RI:接收完成标志
               
  2. 序列槽波特率與定時器1關聯,公式如下:

    波特率=2^SMOD * fosc / [32 * 12(2^K-初值)];(fosc系統主頻)

​ 波特率翻倍寄存器:PCON

​ 隻有最高位(SMOD)有效:為1時波特率翻倍,為0時不翻倍

方式1序列槽通信接收代碼:

ORG		0000H
LJMP	MAIN
ORG		0023H
LJMP	RX_TI

MAIN:
		MOV		SCON,		#50H
		MOV		PCON,		#00H
		MOV		TMOD,	#02H
		MOV		TH1,		#0FDH
		MOV		TL1,			#0FDH
		SETB	TR1
		SETB	EA
		SETB	ES
		
RX_TI:
		PUSH		ACC
		MOV		TH1,		#0FDH
		MOV		TL1,			#0FDH
		MOV		A,		SBUF
		;處理
		POP			ACC
		RETI
           

發送套用代碼:

MOV		SBUF,	A
JNB		TI,		$
CLR		TI
RET
           

三、中斷系統

​ 所有中斷控制位:

​ TCON:

51單片機定時器、序列槽、中斷MCS-51功能單元

​ TF1、TF0:定時器溢出标志、請求中斷:

​ IE1、IE0:外部中斷溢出請求:

​ IT1、IT0:外部中斷觸發方式選擇-1下降沿觸發、0低電平觸發

​ SCON:

​ 内部TI、RI觸發接收發送中斷。

​ 所有中斷允許位:

位序号 EX0 ET0 EX1 ET1 ES ET2 / EA
說明 外部中斷0 定時/計數0 外部中斷1 定時/計數1 串行口中斷 定時2溢出中斷(8052用) 全局中斷允許位

​ 中斷處理跳轉位址:

中斷源 矢量單元
外部中斷0 0003H
定時器0溢出中斷 000BH
外部中斷1 0013H
定時器1溢出中斷 001BH
串行口 0023H
定時器2溢出中斷 002BH

注:進入中斷後一般需要對現場進行保護:

使用PUSH和POP做現場保護

;對A和PSW壓棧保護
PUSH 	ACC
PUSH	PSW

;對A和PSW出棧保護
POP		PSW
POP		ACC