51特殊功能寄存器器TMOD的最高位取反和清零和置一的程序是什么?期末考试求解

【转】 【51单片机寄存器功能一览表】
21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。
  在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器):
MCS-51单片机的特殊功能寄存器
程序状态字
定时器/计数器2(高8位)
定时器/计数器2(低8位)
外部输入(P1.1)计数器/自动再装入模式时初值寄存器高八位
外部输入(P1.1)计数器/自动再装入模式时初值寄存器低八位
T2定时器/计数器控制寄存器
中断优先级控制寄存器
P3口锁存器
中断允许控制寄存器
P2口锁存器
串行口锁存器
串行口控制寄存器
P1口锁存器
定时器/计数器1(高8位)
定时器/计数器1(低8位)
定时器/计数器0(高8位)
定时器/计数器0(低8位)
T0、T1定时器/计数器方式控制寄存器
T0、T1定时器/计数器控制寄存器
数据地址指针(高8位)
数据地址指针(低8位)
P0口锁存器
电源控制寄存器
分别说明如下:
1、ACC---是累加器,通常用A表示
  这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。该标志常用作程序分枝转移的判断条件。
2、B--一个寄存器
  在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。
3、PSW-----程序状态字。
  这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。它的各位功能请看下表:
PSW 程序状态字
下面我们逐一介绍各位的用途
CY:进位标志。
  8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。这样就没事了。有进、借位,CY=1;无进、借位,CY=0  例:78H+97H(10111)
AC:辅助进、借位(高半字节与低半字节间的进、借位)。
  例:57H+3AH(11010)
F0:用户标志位
  由用户(编程人员)决定什么时候用,什么时候不用。RS1、RS0:工作寄存器组选择位
  通过修改PSW中的RS1、RS0两位的状态,就能任选一个工作寄存器区。这个特点提高了MCS-51现场保护和现场恢复的速度。对于提高CPU的工作效率和响应中断的速度是很有利的。若在一个实际的应用系统中,不需要四组工作寄存器,那么这个区域中多余单元可以作为一般的数据缓冲器使用。
工作寄存器区选择
当前使用的工作寄存器区R0~R7
0区(00~07H)
1区(08~0Fh)
2区(10~17h)
3区(18~1Fh)
0V:溢出标志位
  运算结果按补码运算理解。有溢出,OV=1;无溢出,OV=0。什么是溢出我们后面的章节会讲到。
P:奇偶校验位
  它用来表示ALU运算结果中二进制数位的个数的奇偶性。若为奇数,则P=1,否则为0。运算结果有奇数个1,P=1;运算结果有偶数个1,P=0。  例:某运算结果是78H(),显然1的个数为偶数,所以P=0。
4、DPTR(DPH、DPL)--------数据指针
  可以用它来访问外部数据存储器中的任一单元,如果不用,也可以作为通用寄存器来用,由我们自已决定如何使用。分成DPL(低8位)和DPH(高8位)两个寄存器。用来存放16位地址值,以便用间接寻址或变址寻址的方式对片外数据RAM或程序存储器作64K字节范围内的数据操作。
5、P0、P1、P2、P3--------输入输出口(I/O)寄存器
  这个我们已经知道,是四个并行输入/输出口(I/O)的寄存器。它里面的内容对应着管脚的输出。
6、IE-----中断充许寄存器可按位寻址,地址:A8H
IE 中断允许寄存器
EA (IE.7):EA=0时,所有中断禁止(即不产生中断);EA=1时,各中断的产生由个别的允许位决定- (IE.6):保留ET2(IE.5):定时2溢出中断允许(8052用)ES (IE.4):串行口中断允许(ES=1允许,ES=0禁止)ET1(IE.3):定时1中断允许EX1(IE.2):外中断INT1中断允许ET0(IE.1):定时器0中断允许EX0(IE.0):外部中断INT0的中断允许
7、IP-----中断优先级控制寄存器可按位寻址,地址位B8H
IP 中断优先级控制寄存器
- (IP.7):保留- (IP.6):保留PT2(IP.5):定时2中断优先(8052用)PS (IP.4):串行口中断优先PT1(IP.3):定时1中断优先PX1(IP.2):外中断INT1中断优先PT0(IP.1):定时器0中断优先PX0(IP.0):外部中断INT0的中断优先
8、TMOD-----定时器控制寄存器不按位寻址,地址89H
TMOD 定时器控制寄存器
GATE :定时操作开关控制位,当GATE=1时,INT0或INT1引脚为高电平,同时TCON中的TR0或TR1控制位为1时,计时/计数器0或1才开始工作。若GATE=0,则只要将TR0或TR1控制位设为1,计时/计数器0或1就开始工作。C/T :定时器或计数器功能的选择位。C/T=1为计数器,通过外部引脚T0或T1输入计数脉冲。C/T=0时为定时器,由内部系统时钟提供计时工作脉冲。M1 、M0:T0、T1工作模式选择位
M1 、M0:T0、T1工作模式选择位
方式0,13位计数/计时器
方式,1,16位计数/计时器
方式2,8位自动加载计数/计时器
方式3,仅适用于T0,定时器0分为两个独立的8位定时器/计数器TH0及TL0,T1在方式3时停止工作
9、TCON-----定时器控制寄存器
可按位寻址,地址位88H
TCON 定时器控制寄存器
TF1:定时器T1溢出标志,可由程序查询和清零,TF1也是中断请求源,当CPU响应T1中断时由硬件清零。TF0:定时器T0溢出标志,可由程序查询和清零,TF0也是中断请求源,当CPU响应T0中断时由硬件清零。TR1:T1充许计数控制位,为1时充许T1计数。TR0:T0充许计数控制位,为1时充许T0计数。IE1:外部中断1请示源(INT1,P3.3)标志。IE1=1,外部中断1正在向CPU请求中断,当CPU响应该中断时由硬件清IE1(边沿触发方式)。IT1:外部中断源1触发方式控制位。IT1=0,外部中断1程控为电平触发方式,当INT1(P3.3)输入低电平时,置位IE1。IE0:外部中断0请示源(INT0,P3.2)标志。IE0=1,外部中断1正在向CPU请求中断,当CPU响应该中断时由硬件清IE0(边沿触发方式)。IT0:外部中断源0触发方式控制位。IT0=0,外部中断1程控为电平触发方式,当INT0(P3.2)输入低电平时,置位IE0。
10、SCON----串行通信控制寄存器
  它是一个可寻址的专用寄存器,用于串行数据的通信控制,单元地址是98H,其结构格式如下:
SCON 串行通信控制寄存器
(1)SM0、SM1:串行口工作方式控制位。  SM0,SM1&&&&工作方式     00&&&&&&方式0-波特率由振荡器频率所定:振荡器频率/12     01&&&&&&方式1-波特率由定时器T1或T2的溢出率和SMOD所定:2SMOD ×(T1溢出率)/32     10&&&&&&方式2-波特率由振荡器频率和SMOD所定:2SMOD ×振荡器频率/64     11&&&&&&方式3-波特率由定时器T1或T2的溢出率和SMOD所定:2SMOD ×(T1溢出率)/32 (2)SM2:多机通信控制位。& br&&&&&多机通信是工作于方式2和方式3,SM2位主要用于方式2和方式3。接收状态,当串行口工作于方式2或3,以及SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8位数据送入SBUF,且置位RI发出中断申请,否则会将接受到的数据放弃。当SM2=0时,就不管第位数据是0还是1,都难得数据送入SBUF,并发出中断申请。工作于方式0时,SM2必须为0。 (3)REN:允许接收位。& br&&&&&REN用于控制数据接收的允许和禁止,REN=1时,允许接收,REN=0时,禁止接收。 (4)TB8:发送接收数据位8。& br&&&&&在方式2和方式3中,TB8是要发送的——即第9位数据位。在多机通信中同样亦要传输这一位,并且它代表传输的地址还是数据,TB8=0为数据,TB8=1时为地址。 (5)RB8:接收数据位8。在方式2和方式3中,RB8存放接收到的第9位数据,用以识别接收到的数据特征。 (6)TI:发送中断标志位。可寻址标志位。方式0时,发送完第8位数据后,由硬件置位,其它方式下,在发送或停止位之前由硬件置位,因此,TI=1表示帧发送结束,TI可由软件清。 (7)RI:接收中断标志位。可寻址标志位。接收完第8位数据后,该位由硬件置位,在其他工作方式下,该位由硬件置位,RI=1表示帧接收完成。
11、PCON-----电源管理寄存器   PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,单元地址是87H,其结构格式如下:
PCON电源管理寄存器结构
  在CHMOS型单片机中,除SMOD位外,其他位均为虚设的,SMOD是串行口波特率倍增位,当SMOD=1时,串行口波特率加倍。系统复位默认为SMOD=0。
12、T2CON-----T2状态控制寄存器
T2CON 定时器控制寄存器
TF2:T2溢出中断标志。TF2必须由用户程序清。当T2作为串口波特率发生器时,TF2不会被置。EXF2:定时器T2外部中断标志。EXEN2为1时,当T2EX(P1.1)发生负跳变时置1中断标志DXF2,EXF2必须由用户程序清。TCLK:串行接口的发送时钟选择标志。TCLK=1时,T2工作于波特率发生器方式。RCLK:串行接口的接收时钟选择标志位。RCLK=1时,T2工作于波特率发生器方式。EXEN2:T2的外部中断充许标志。C/T2:外部计数器/定时器选择位。C/T2=1时,T2为外部事件计数器,计数脉冲来自T2(P1.0);C/T2=0时,T2为定时器,振荡脉冲的十二分频信号作为计数信号。TR2:T2计数/定时控制位。TR1为1时充许计数,为0时禁止计数。CP/RL2:捕捉和常数自动再装入方式选择位。为1时工作于捕捉方式,为0时T2工作于常数自动再装入方式。当TCLK或RCLK为1时,CP/RL2被忽略,T2总是工作于常数自动再装入方式。
  下面对T2CON的D0、D2、D4、D5几位主要控制T2的工作方式,下面对这几位的组合关系进行总结
定时器T2方式选择
16位常数自动再装入方式
16位捕捉方式
串行口波特率发生器方式
阅读(...) 评论()下次自動登錄
現在的位置:
& 綜合 & 正文
特殊功能寄存器
特殊功能寄存器(SFR)也稱為專用寄存器,特殊功能寄存器反映了MCS-51單片機的運行狀態。很多功能也通過特殊功能寄存器來定義和控制的執行。
MCS-51有21個特殊功能寄存器,它們被離散地分布在內部RAM的80H—FFH地址中,這些寄存的功能已作了專門的規定,用戶不能修改其結構。表2是特殊功能寄存器分布一覽表,我們對其主要的寄存器作一些簡單的介紹。
表2 特殊功能寄存器
標識符號 地址寄存器名稱
ACC 0E0H 累加器
B 0F0H B寄存器
PSW 0D0H 程序狀態字
SP 81H 堆棧指針
DPTR 82H、83H 數據指針(16位)含DPL和DPH
IE 0A8H 中斷允許控制寄存器
IP 0B8H 中斷優先控制寄存器
P0 80H I/O口0寄存器
P1 90H I/O口1寄存器
P2 0A0H I/O口2寄存器
P3 0B0H I/O口3寄存器
PCON 87H 電源控制及波特率選擇寄存器
SCON 98H 串行口控制寄存器
SBUF 99H 串行數據緩衝寄存器
TCON 88H 定時控制寄存器
TMOD 89H 定時器方式選擇寄存器
TL0 8AH 定時器0低8位
TH0 8CH 定時器0高8位
TL1 8BH 定時器1低8位
TH1 8DH 定時器1高8位
程序計數器PC(program Counter)
程序計數器在物理上是獨立的,它不屬於特殊內部數據存儲器塊中。PC是一個16位的計數器,用於存放一條要執行的指令地址,尋址範圍為64kB,PC有自動加1功能,即完成了一條指令的執行後,其內容自動加1。PC本身並沒有地址,因而不可尋址,用戶無法對它進行讀寫,但是可以通過轉移、調用、返回等指令改變其內容,以控制程序按我們的要求去執行。
累加器ACC(Accumulator)
累加器A是一個最常用的專用寄存器,大部分單操作指令的一個操作數取自累加器,很多雙操作數指令中的一個操作數也取自累加器。加、減、乘、除法運算的指令,運算結果都存放於累加器A或AB累加器對中。大部分的數據操作都會通過累加器A進行,它形象於一個交通要道,在程序比較複雜的運算中,累加器成了制約軟件效率的“瓶頸”,它的功能較多,地位也十分重要。以至於後來發展的單片機,有的集成了多累加器結構,或者使用寄存器陣列來代替累加器,即賦予更多寄存器以累加器的功能,目的是解決累加器的“交通堵塞”問題。提高單片機的軟件效率。
在乘除法指令中,乘法指令中的兩個操作數分別取自累加器A和寄存器B,其結果存放於AB寄存器對中。除法指令中,被除數取自累加器A,除數取自寄存器B,結果商存放於累加器A,餘數存放於寄存器B中。
程序狀態字(Program Status Word)
程序狀態字是一個8位寄存器,用於存放程序運行的狀態信息,這個寄存器的一些位可由軟件設置,有些位則由硬件運行時自動設置的。寄存器的各位定義如下,其中PSW.1是保留位,未使用。下表是它的功能說明,並對各個位的定義介紹如下:
表3 程序狀態字
位序 PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0
位標誌 CY AC F0 RS1 RS0 OV - P
PSW.7(CY)進位標誌位,此位有兩個功能:一是存放執行某寫算數運算時,存放進位標誌,可被硬件或軟件置位或清零。二是在位操作中作累加位使用。
PSW.6(AC)輔助進位標誌位,當進行加、減運算時當有低4位向高4位進位或借位時,AC置位,否則被清零。AC輔助進位位也常用於十進制調整。
PSW.5(F0)用戶標誌位,供用戶設置的標誌位。
PSW.4、PSW.3(RS1和 RS0) 寄存器組選擇位。可參見本章的圖2定義。
PSW.2(OV)溢出標誌。帶符號加減運算中,超出了累加器A所能表示的符號數有效範圍(-128—+127)時,即產生溢出,OV=1。表明運算運算結果錯誤。如果OV=0,表明運算結果正確。
執行加法指令ADD時,當位6向位7進位,而位7不向C進位時,OV=1。或者位6不向位7進位,而位7向C進位時,同樣OV=1。
除法指令,乘積超過255時,OV=1。表面乘積在AB寄存器對中。若OV=0,則說明乘積沒有超過255,乘積只在累加器A中。
除法指令,OV=1,表示除數為0,運算不被執行。否則OV=0。
PSW.0(P)奇偶校驗位。聲明累加器A的奇偶性,每個指令周期都由硬件來置位或清零,若值為1的位數奇數,則P置位,否則清零。
數據指針(DPTR)
數據指針為16位寄存器,編程時,既可以按16位寄存器來使用,也可以按兩個8位寄存器來使用,即高位字節寄存器DPH和低位字節DPL。
DPTR主要是用來保存16位地址,當對64kB外部數據存儲器尋址時,可作為間址寄存器使用,此時,使用如下兩條指令:
MOVX A, @DPTR
MOVX @DPTR, A
在訪問程序存儲器時,DPTR可用來作基址寄存器,採用基址+變址尋址方式訪問程序存儲器,這條指令常用於讀取程序存儲器內的表格數據。
MOVC A, @A+@DPTR
堆棧指針SP(Stack Pointer)
堆棧是一種數據結構,它是一個8位寄存器,它指示堆棧頂部在內部RAM中的位置。系統複位後,SP的初始值為07H,使得堆棧實際上是從08H開始的。但我們從RAM的結構分布中可知,08H—1FH隸屬1—3工作寄存器區,若編程時需要用到這些數據單元,必須對堆棧指針SP進行初始化,原則上設在任何一個區域均可,但一般設在30H—1FH之間較為適宜。
數據的寫入堆棧我們稱為入棧(PUSH,有些文獻也稱作插入運算或壓入),從堆棧中取出數據稱為出棧(POP,也稱為刪除運算或彈出),堆棧的最主要特徵是“後進先出”規則,也即最先入棧的數據放在堆棧的最底部,而最後入棧的數據放在棧的頂部,因此,最後入棧的數據出棧時則是最先的。這和我們往一個箱里存放書本一樣,需將最先放入箱底部的書取出,必須先取走最上層的書籍。這個道理非常相似。
那麼堆棧有何用途呢?堆棧的設立是為了中斷操作和子程序的調用而用於保存數據的,即常說的斷點保護和現場保護。微處理器無論是在轉入子程序和中斷服務程序的執行,執行完後,還是要回到主程序中來,在轉入子程序和中斷服務程序前,必須先將現場的數據進行保存起來,否則返回時,CPU並不知道原來的程序執行到哪一步,原來的中間結果如何?所以在轉入執行其它子程序前,先將需要保存的數據壓入堆棧中保存。以備返回時,再復原當時的數據。供主程序繼續執行。
轉入中斷服務程序或子程序時,需要保存的數據可能有若干個,都需要一一地保留。如果微處理器進行多重子程序或中斷服務程序嵌套,那麼需保存的數據就更多,這要求堆棧還需要有相當的容量。否則會造成堆棧溢出,丟失應備份的數據。輕者使運算和執行結果錯誤,重則使整個程序紊亂。
MCS-51的堆棧是在RAM中開闢的,即堆棧要佔據一定的RAM存儲單元。同時MCS-51的堆棧可以由用戶設置,SP的初始值不同,堆棧的位置則不一定,不同的設計人員,使用的堆棧區則不同,不同的應用要求,堆棧要求的容量也有所不同。堆棧的操作只有兩種,即進棧和出棧,但不管是向堆棧寫入數據還是從堆棧中讀出數據,都是對棧頂單元進行的,SP就是即時指示出棧頂的位置(即地址)。在子程序調用和中斷服務程序響應的開始和結束期間,CPU都是根據SP指示的地址與相應的RAM存儲單元交換數據。
堆棧的操作有兩種方法:其一是自動方式,即在中斷服務程序響應或子程序調用時,返回地址自動進棧。當需要返回執行主程序時,返回的地址自動交給PC,以保證程序從斷點處繼續執行,這種方式是不需要編程人員干預的。第二種方式是人工指令方式,使用專有的堆棧操作指令進行進出棧操作,也只有兩條指令:進棧為PUSH指令,在中斷服務程序或子程序調用時作為現場保護。出棧操作POP指令,用於子程序完成時,為主程序恢復現場。
&&&&推薦文章:
【上篇】【下篇】51单片机特殊功能寄存器(SFR)介绍
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
51单片机特殊功能寄存器(SFR)介绍
1、21个寄存器介绍
&&&&&&&&51系列单片机内部主要有四大功能模块,分别是I/O口模块、中断模块、定时器模块和串口通信模块(串行I/O口),如其结构和功能如下图:
图1 51单片机结构和功能图
&51单片机掌握的好坏,其实就是能否正确操作这四个功能模块,而其操作的实质则又是能否对每个模块所对应寄存器的正确操纵。所以下面重点介绍一下51系列单片机内部的特殊功能寄存器(简称SFR,以下说明以此代替)。(关于什么叫特殊功能寄存器,这里先不作介绍,不懂的请查阅51单片机相关资料。)
51单片机内部共有21个SFR,其布局如图2,从图中可以看出,每个SFR占1个字节,多数字节单元中的每一位又有专用的&位名称&。这21个SFR又按是否可以位寻址分为两大部分,ACC、IE、P1等11个可以位寻址,SP、TMOD等不可以位寻址。
图2 51单片机SFR布局图&&
&&&&&& 2、位寻址解释
&&& &下面以P1、IE寄存器(可位寻)和TMOD(不可位发)为例解释一下位寻址。
&&&&&能位寻址是指能够对它的每一位都可以进行位操作,如图3,如P1口接8个灯,灯阳极接正极,阴极接单片机的P1口的8个脚。现在要让接P1口第1个引脚的灯亮,程序中可以写P1=0xfe,也可以先定义deng1=P1^0,即P1口的第1位,至于为什么写P1^0,是因为KEIL软件规定的,然后deng1=0。也就是P1=0xfe和deng1=0都是可以点亮第一个灯,后者deng1=0属于位操作,前者P1=0xfe属于总线操作,也就是8个引脚一起操作。&图3 8位灯接线图&
&& 下面再以IE寄存器为例进行位操作的解释。IE寄存器为中断允许寄存器,如各位的作用如图4.其中第7位EA是51单片机5个中断的总开关,如要进入任何一个中断时,需先把EA打开,因为可以进行位操作,此时程序有两种写法:1)IE=0x80(假如其它位为0,即<span style="font-weight: font-size: 16 color: #ff 0000),也可以直接写EA=1,后者EA=1即属于位操作。这里要注意和前面P1口第1个引脚操作不同的是,前面程序中需先定义deng1=P1^0,这里程序中则不需要定义EA=IE^7,因为KEIL软件中的REG52.H头文件中已经定义好了,这里需要特别注意。
图4 IE中断允许寄存器
&至于什么叫不可寻址,则是指不能单独进行每一位的操作,如TMOD定时器工作模式及工作方式寄存器,在进行操作时,只能写TMOD=0xXX。
关于能否进行位操作,可以通过查相关资料知道,当然还有个技巧就是其字节地址换成10进制后能否被&8&整除,能被&8&整除的就能进行位操作,不能被&8&整除就不能,如P1地址为90H,10进制为144 144/8=18,能被整除,所以可以位操作。再如TMOD地址为89H, 10进制为137 137/8=17.125,不能被整除,所以不可以位操作。
&&&&& 3、具体编程中对寄存器的注意
&&&&以上解释了位操作的概念,下面接着说明这21个SFR在具体编程中需要注意的地方。
目前单片机开发过程中主要使用两种语言,一种是汇编语言,一种是C语言。如果是使用汇编语言则21个SFR都需要理解,并且其地址这些都需要记住。如果是C语言编程就相对简单些了,由于目前C语言的通用性,绝大部分单片机开发都使用C语言,这里说以C为语言进行编程需注意的地方。
在用C编程中我们只需要撑握IP、IE、SCON、TCON、P1、P2、P3、P4、PCON TMOD、TL0、TH0、TL1、TH1、SBUF15个寄存器,如图5所示,已用红线和蓝线标出,注意红线的能进行位操作,蓝线的不能进行位操作。
图5 C语言编程中需撑握的15个寄存器
这15寄存器中,根据前面讲的51单片机内部四大功能模块又可分为四大部分:
I/O口相关:P1 P2 P3 P4
中断相关:IP IE
定时器相关:TMOD TCON TL0、TH0、TL1、TH1
串口通信相关:PCON SBUF
&& 在这四大部分中,除I/O口操作相关P1 P2 P3 P4相对独立外,其它11个寄存器使用时通常会相互结合使用,也就是说中断、定时器和串口通信三者通常会结合起来用,如外部中断时,设置边沿触发还是电平触发需设置TCON寄存器中的TR0和TR1位,使用定时器时又可能用到中断,而串口通信时设置波特率又直接跟定时器相关。
总之51单片机其实最难的就是对除I/O口外的11个寄存器的操作,但难归难,但毕竟只有11个,只要肯定花功夫和时间,多写写程序,多调试,一定可以学得好,现在我也记不到,每次遇到时总得去查相关的书籍,而且感觉脑对这一块还是很乱,再看哈书,看后面能不能总结出好的方法来。
&&&& 4、参考例程
&&& 下面附出中断、定时器及串口通信的三个例子,供大家参考:
前面讲到过,51单片机内部共有21个特殊功能寄存器,如下图所示。如果用C语言进行编程时只需考虑15个寄存器,这15个寄存器按单片机内部功能模块以可分成四大类,分别为:
I/O口操作相关:P1 P2 P3 P4
中断相关:IP IE
定时器相关:TMOD TCON TL0、TH0、TL1、TH1
串口通信相关:SCON PCON SBUF
这15个寄存器中,P1 P2 P3 P4 TL0 TH0 TL1 TH1 SBUF这9个操作相对简单,而PCON为电源控制寄存器,平时只有在串口通信编程中会用到最高位SMOD,当SMOD=1,波特率会倍增,所以对这个寄存器只需要考虑这点就可以了,而对于IP寄存器为中断优先寄存器,对于单片机初学者基本上用不到,这里先不作介绍。
剩下的就只有IE、TCON、SCON和TMOD 4个寄存器了,如图1中绿色圆圈的四个,分别为中断允许寄存器(IE),定时器控制寄存器(TCON),定时器模式及工作方式寄存器(TMOD),串行口控制寄存器(SCON)。4个寄存器相对来说较难记住,下面分别对这4个寄存器及每一位进行说明。
&&& 1、IE中断允许寄存器
EA:EA=0时,所有中断禁止(即不产生中断);EA=1时,各中断的产生由个别的允许位决定
ET2:定时2溢出中断允许(8052用1允许, 0禁止)
ES:串行口中断允许(1允许, 0禁止)
ET1):定时1中断允许(1允许, 0禁止)
EX1:外中断INT1中断允许(1允许, 0禁止)
ET0:定时器0中断允许(1允许, 0禁止)
EX0:外部中断INT0的中断允许(1允许, 0禁止)
&&&2、TCON定时器控制寄存器
TF1:定时器T1溢出标志,可由程序查询和清零,TF1也是中断请求源,当CPU响应T1中断时由硬件清零。
TF0:定时器T0溢出标志,可由程序查询和清零,TF0也是中断请求源,当CPU响应T0中断时由硬件清零。
TR1:T1充许计数控制位,为1时充许T1计数(定时)。
TR0:T0充许计数控制位,为1时充许T0计数(定时)。
IE1:外部中断1请示源(INT1,P3.3)标志。IE1=1,外部中断1正在向CPU请求中断,当CPU响应该中断时由硬件清&0&IE1(边沿触发方式)。
IT1:外部中断源1触发方式控制位。IT1=0,外部中断1程控为电平触发方式,当INT1(P3.3)输入低电平时,置位IE1。此位为1设置为电平触发,为0设置为下降沿触发。
IE0:外部中断0请示源(INT0,P3.2)标志。IE0=1,外部中断1正在向CPU请求中断,当CPU响应该中断时由硬件清&0&IE0(边沿触发方式)。
IT0:外部中断源0触发方式控制位。IT0=0,外部中断1程控为电平触发方式,当INT0(P3.2)输入低电平时,置位IE0。此位为1设置为电平触发,为0设置为下降沿触发。
3、TMOD定时器工作模式及方式寄存器
& 此寄存器高四位用于T1,低四位用于T0。
GATE :定时操作开关控制位,当GATE=1时,INT0或INT1引脚为高电平,同时TCON中的TR0或TR1控制位为1时,计时/计数器0或1才开始工作。若GATE=0,则只要将TR0或TR1控制位设为1,计时/计数器0或1就开始工作。
C/T :定时器或计数器功能的选择位。C/T=1为计数器,通过外部引脚T0或T1输入计数脉冲。C/T=0时为定时器,由内部系统时钟提供计时工作脉冲。
M1 M0:T0、T1工作模式选择位
M1 M0:0 0方式0,13位计数/计时器
M1 M0:0 1方式1,16位计数/计时器
M1 M0:1 0方式2,8位自动加载计数/计时器
M1 M0:1 1方式3,仅适用于T0,定时器0分为两个独立的8位定时器/计数器TH0及TL0,T1在方式3时停止工作
4、SCON串行通信控制寄存器
SM0 SM1:串行口工作方式控制位
SM0 SM1: 0 0& 方式0-波特率由振荡器频率所定:振荡器频率/12
SM0 SM1: 0 1& 方式1-波特率由定时器T1或T2的溢出率和SMOD所定:2SMOD &(T1溢出率)/32
SM0 SM1: 1 0 &方式2-波特率由振荡器频率和SMOD所定:2SMOD &振荡器频率/64
SM0 SM1: 1 1&&方式3-波特率由定时器T1或T2的溢出率和SMOD所定:2SMOD &(T1溢出率)/32
SM2:多机通信控制位。多机通信是工作于方式2和方式3,SM2位主要用于方式2和方式3。接收状态,当串行口工作于方式2或3,以及SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8位数据送入SBUF,且置位RI发出中断申请,否则会将接受到的数据放弃。当SM2=0时,就不管第位数据是0还是1,都难得数据送入SBUF,并发出中断申请。工作于方式0时,SM2必须为0。
&REN:允许接收位。 REN用于控制数据接收的允许和禁止,REN=1时,允许接收,REN=0时,禁止接收。
TB8:发送接收数据位8。在方式2和方式3中,TB8是要发送的&&即第9位数据位。在多机通信中同样亦要传输这一位,并且它代表传输的地址还是数据,TB8=0为数据,TB8=1时为地址。
&RB8:接收数据位8。在方式2和方式3中,RB8存放接收到的第9位数据,用以识别接收到的数据特征。
&TI:发送中断标志位。可寻址标志位。方式0时,发送完第8位数据后,由硬件置位,其它方式下,在发送或停止位之前由硬件置位,因此,TI=1表示帧发送结束,TI可由软件清&0&。
RI:接收中断标志位。可寻址标志位。接收完第8位数据后,该位由硬件置位,在其他工作方式下,该位由硬件置位,RI=1表示帧接收完成。
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights Reserved

我要回帖

更多关于 特殊功能寄存器 的文章

 

随机推荐