当前位置:首页 >> 信息与通信 >>

AT89C51简介(晶振为11.0592M 和12M)


AT89C51 简介 AT89C51 是一种带 4K 字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能 CMOS8 位微处理器,俗称单片机.AT89C2051 是一种带 2K 字节闪烁可编程可擦除只读存 储器的单片机. 单片机的可擦除只读存储器可以反复擦除 100 次.

该器件采用 ATMEL 高密度非易失存储器制造技术制造, 与工业标准的 MCS-51 指令集和输出管脚相兼容.由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中,ATMEL 的 AT89C51 是一种高效微控制器,AT89C2051 是它的一种精简版本.AT89C 单片机为很多嵌入式控制系统提供了一种灵 活性高且价廉的方案.外形及引脚排列如图所示 主要特性: 与 MCS-51 兼容 4K 字节可编程闪烁存储器 寿命:1000 写/擦循环 数据保留时间:10 年 全静态工作:0Hz-24Hz 三级程序存储器锁定 128×8 位内部 RAM 32 可编程 I/O 线 两个 16 位定时器/计数器 5 个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路 管脚说明: VCC:供电电压. GND:接地. P0 口:P0 口为一个 8 位漏级开路双向 I/O 口,每脚可吸收 8TTL 门电流.当 P1 口的管脚第一次写 1 时,被定义 为高阻输入.P0 能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位.在 FIASH 编程时,P0 口作为原码 输入口,当 FIASH 进行校验时,P0 输出原码,此时 P0 外部必须被拉高. P1 口:P1 口是一个内部提供上拉电阻的 8 位双向 I/O 口,P1 口缓冲器能接收输出 4TTL 门电流.P1 口管脚写入 1 后,被内部上拉为高,可用作输入,P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故.在 FLASH 编程和校验时,P1 口作为第八位地址接收. P2 口: 口为一个内部上拉电阻的 8 位双向 I/O 口, 口缓冲器可接收, P2 P2 输出 4 个 TTL 门电流, P2 口被写"1" 当 时,其管脚被内部上拉电阻拉高,且作为输入.并因此作为输入时,P2 口的管脚被外部拉低,将输出电流.这是由于内 部上拉的缘故.P2 口当用于外部程序存储器或 16 位地址外部数据存储器进行存取时,P2 口输出地址的高八位.在给出 地址"1"时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2 口输出其特殊功能寄存器的内容.P2 口 在 FLASH 编程和校验时接收高八位地址信号和控制信号. P3 口:P3 口管脚是 8 个带内部上拉电阻的双向 I/O 口,可接收输出 4 个 TTL 门电流.当 P3 口写入"1"后,它们 被内部上拉为高电平,并用作输入.作为输入,由于外部下拉为低电平,P3 口将输出电流(ILL)这是由于上拉的缘故. P3 口也可作为 AT89C51 的一些特殊功能口,如下表所示: 口管脚 P3.0 P3.1 P3.2 P3.3 P3.4 备选功能 RXD(串行输入口) TXD(串行输出口) /INT0(外部中断 0) /INT1(外部中断 1) T0(记时器 0 外部输入)

P3.5 P3.6 P3.7

T1(记时器 1 外部输入) /WR(外部数据存储器写选通) /RD(外部数据存储器读选通) RST:复位输入.当振荡器复位器件时,要保持 RST 脚两个机器周期的高电平时间.

P3 口同时为闪烁编程和编程校验接收一些控制信号. ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节.在 FLASH 编程期间,此引脚用 于输入编程脉冲.在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6.因此它可用作对外部 输出的脉冲或用于定时目的.然而要注意的是:每当用作外部数据存储器时,将跳过一个 ALE 脉冲.如想禁止 ALE 的输 出可在 SFR8EH 地址上置 0.此时, ALE 只有在执行 MOVX,MOVC 指令是 ALE 才起作用.另外,该引脚被略微拉高. 如果微处理器在外部执行状态 ALE 禁止,置位无效. /PSEN:外部程序存储器的选通信号.在由外部程序存储器取指期间,每个机器周期两次/PSEN 有效.但在访问外 部数据存储器时,这两次有效的/PSEN 信号将不出现. /EA/VPP:当/EA 保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器. 注意加密方式 1 时,/EA 将内部锁定为 RESET;当/EA 端保持高电平时,此间内部程序存储器.在 FLASH 编程期间,此 引脚也用于施加 12V 编程电源(VPP). XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入. XTAL2:来自反向振荡器的输出. 振荡器特性: XTAL1 和 XTAL2 分别为反向放大器的输入和输出. 该反向放大器可以配置为片内振荡器. 石晶振荡和陶瓷振荡均 可采用.如采用外部时钟源驱动器件,XTAL2 应不接.有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时 钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度. 芯片擦除: 整个 PEROM 阵列和三个锁定位的电擦除可通过正确的控制信号组合, 并保持 ALE 管脚处于低电平 10ms 来完成. 在芯片擦操作中,代码阵列全被写"1"且在任何非空存储字节被重复编程以前,该操作必须被执行. 此外,AT89C51 设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式.在闲置模式下, CPU 停止工作.但 RAM,定时器,计数器,串口和中断系统仍在工作.在掉电模式下,保存 RAM 的内容并且冻结振荡 器,禁止所用其他芯片功能,直到下一个硬件复位为止. 串口通讯 单片机的结构和特殊寄存器,这是你编写软件的关键.至于串口通信需要用到那些特殊功能寄存器呢,它们是 SCON, TCON,TMOD,SCON 等,各代表什么含义呢? SBUF 数据缓冲寄存器这是一个可以直接寻址的串行口专用寄存器.有朋友这样问起过"为何在串行口收发中,都只 是使用到同一个寄存器 SBUF?而不是收发各用一个寄存器."实际上 SBUF 包含了两个独立的寄存器,一个是发送寄存, 另一个是接收寄存器,但它们都共同使用同一个寻址地址-99H.CPU 在读 SBUF 时会指到接收寄存器,在写时会指到 发送寄存器,而且接收寄存器是双缓冲寄存器,这样可以避免接收中断没有及时的被响应,数据没有被取走,下一帧数据 已到来,而造成的数据重叠问题.发送器则不需要用到双缓冲,一般情况下我们在写发送程序时也不必用到发送中断去外 理发送数据. 操作 SBUF 寄存器的方法则很简单, 只要把这个 99H 地址用关键字 sfr 定义为一个变量就可以对其进行读写 操作了,如 sfr SBUF = 0x99;当然你也可以用其它的名称.通常在标准的 reg51.h 或 at89x51.h 等头文件中已对其做了定 义,只要用#include 引用就可以了. SCON 串行口控制寄存器通常在芯片或设备中为了监视或控制接口状态,都会引用到接口控制寄存器.SCON 就是 51 芯片的串行口控制寄存器.它的寻址地址是 98H,是一个可以位寻址的寄存器,作用就是监视和控制 51 芯片串行口 的工作状态.51 芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用 SCON 寄存器.它的各个位 的具体定义如下: SM0 SM1 SM2 REN TB8 RB8 TI RI SM0,SM1 为串行口工作模式设置位,这样两位可以对应进行四种模式的设置.串行口工作模式设置.

SM0 SM1 模式 功能 0 0 1 1 0 1 0 1 0 1 2 3 同步移位寄存器 8 位 UART 9 位 UART 9 位 UART

波特率 fosc/12 可变 fosc/32 或 fosc/64 可变

在这里只说明最常用的模式 1,其它的模式也就一一略过,有兴趣的朋友可以找相关的硬件资料查看.表中的 fosc 代 表振荡器的频率,也就是晶振的频率.UART 为(Universal Asynchronous Receiver)的英文缩写. SM2 在模式 2,模式 3 中为多处理机通信使能位.在模式 0 中要求该位为 0. REM 为允许接收位,REM 置 1 时串口允许接收,置 0 时禁止接收.REM 是由软件置位或清零.如果在一个电路 中接收和发送引脚 P3.0,P3.1 都和上位机相连,在软件上有串口中断处理程序,当要求在处理某个子程序时不允许串口被 上位机来的控制字符产生中断,那么可以在这个子程序的开始处加入 REM=0 来禁止接收,在子程序结束处加入 REM=1 再次打开串口接收.大家也可以用上面的实际源码加入 REM=0 来进行实验. TB8 发送数据位 8,在模式 2 和 3 是要发送的第 9 位.该位可以用软件根据需要置位或清除,通常这位在通信协议 中做奇偶位,在多处理机通信中这一位则用于表示是地址帧还是数据帧. RB8 接收数据位 8,在模式 2 和 3 是已接收数据的第 9 位.该位可能是奇偶位,地址/数据标识位.在模式 0 中, RB8 为保留位没有被使用.在模式 1 中,当 SM2=0,RB8 是已接收数据的停止位. TI 发送中断标识位.在模式 0,发送完第 8 位数据时,由硬件置位.其它模式中则是在发送停止位之初,由硬件置 位.TI 置位后,申请中断,CPU 响应中断后,发送下一帧数据.在任何模式下,TI 都必须由软件来清除,也就是说在 数据写入到 SBUF 后,硬件发送数据,中断响应(如中断打开),这时 TI=1,表明发送已完成,TI 不会由硬件清除,所 以这时必须用软件对其清零. RI 接收中断标识位.在模式 0,接收第 8 位结束时,由硬件置位.其它模式中则是在接收停止位的半中间,由硬件 置位.RI=1,申请中断,要求 CPU 取走数据.但在模式 1 中,SM2=1 时,当未收到有效的停止位,则不会对 RI 置位. 同样 RI 也必须要靠软件清除.常用的串口模式 1 是传输 10 个位的,1 位起始位为 0,8 位数据位,低位在先,1 位停止 位为 1. 它的波特率是可变的, 其速率是取决于定时器 1 或定时器 2 的定时值 (溢出速率) AT89C51 和 AT89C2051 等 . 51 系列芯片只有两个定时器,定时器 0 和定时器 1,而定时器 2 是 89C52 系列芯片才有的. 波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯.波 特率是指串行端口每秒内可以传输的波特位数.有一些初学的朋友认为波特率是指每秒传输的字节数,如标准 9600 会被 误认为每秒种可以传送 9600 个字节,而实际上它是指每秒可以传送 9600 个二进位,而一个字节要 8 个二进位,如用串 口模式 1 来传输那么加上起始位和停止位,每个数据字节就要占用 10 个二进位,9600 波特率用模式 1 传输时,每秒传 输的字节数是 9600÷10=960 字节.51 芯片的串口工作模式 0 的波特率是固定的,为 fosc/12,以一个 12M 的晶振来计 算,那么它的波特率可以达到 1M.模式 2 的波特率是固定在 fosc/64 或 fosc/32,具体用那一种就取决于 PCON 寄存器 中的 SMOD 位, SMOD 为 0,波特率为 focs/64,SMOD 为 1, 如 波特率为 focs/32. 模式 1 和模式 3 的波特率是可变的, 取决于定时器 1 或 2(52 芯片)的溢出速率.那么我们怎么去计算这两个模式的波特率设置时相关的寄存器的值呢?可 以用以下的公式去计算. 波特率=(2SMOD÷32)×定时器 1 溢出速率 上式中如设置了 PCON 寄存器中的 SMOD 位为 1 时就可以把波特率提升 2 倍. 通常会使用定时器 1 工作在定时器 工作模式 2 下,这时定时值中的 TL1 做为计数,TH1 做为自动重装值 ,这个定时模式下,定时器溢出后,TH1 的值会 自动装载到 TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确.在这个定时模式 2 下定时器 1 溢出速率 的计算公式如下: 溢出速率=(计数速率)/(256-TH1) 上式中的"计数速率"与所使用的晶体振荡器频率有关,在 51 芯片中定时器启动后会在每一个机器周期使定时寄存器 TH 的值增加一,一个机器周期等于十二个振荡周期,所以可以得知 51 芯片的计数速率为晶体振荡器频率的 1/12,一个 12M 的晶振用在 51 芯片上, 那么 51 的计数速率就为 1M. 通常用 11.0592M 晶体是为了得到标准的无误差的波

特率,那么为何呢?计算一下就知道了.如我们要得到 9600 的波特率,晶振为 11.0592M 和 12M,定时器 1 为模式 2, 特率,
SMOD 设为 1,分别看看那所要求的 TH1 为何值.代入公式: 11.0592M 9600=(2÷32)×((11.0592M/12)/(256-TH1)) TH1=250 12M 9600=(2÷32)×((12M/12)/(256-TH1)) TH1≈249.49

上面的计算可以看出使用 12M 晶体的时候计算出来的 TH1 不为整数, TH1 的值只能取整数, 而 这样它 就会有一定的误差存在不能产生精确的 9600 波特率. 当然一定的误差是可以在使用中被接受的, 就算使用 11.0592M 的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差, 但晶体本身的误差对波特率的影 响是十分之小的,可以忽略不计.

相关文章:
单片机课后部分答案
启动定时器 5.12 设 MCS-51 单片机时钟为 12MHz,...已知晶振频率为 6MHz,设计程序使 P1.4 和 P1.5 ...7.11 请用 AT89C51 单片机的 P1 口设计一个 3...
单片机试卷及答案
C、SCON 11、MCS-51 单片机的晶振频率为 12MHz,...@R0 第 2 操作数的寻址方式为 4、AT89S51 ...那么在什么情况线检测 点数目最多,这 M 和 N ...
单片机习题答案1-2
设单片机的晶振频率为 12MHz。 9. 编程计算下列...10. 89C51 有哪几种扩展外部中断源的方法?各有...12. 设晶振频率为 11.0592 MHz,串行口工作在方式...
51单片机常用波特率初值表(11.0592M晶振)
51单片机常用波特率初值表(11.0592M晶振)_计算机硬件及网络_IT/计算机_专业资料。51单片机常用波特率初值表(11.0592M晶振)今日推荐 78...
AT89C51与AT89C52简介
AT89C51与AT89C52简介_信息与通信_工程科技_专业资料。关于单片机AT...如我们要得到 9600 的波特率, 晶振为 11.0592M 和 12M, 定时器 1 为模式 ...
晶振选用11.0592M和32.768k的缘由
51 单片机晶振是 1.2M-12M, 一般由于一个机器周期是 12 个时钟周期, 所以...AT89C51简介(晶振为11.0... 4页 1下载券 51单片机常用11.0592晶振... ...
51单片机晶振的问题总结
单片机时钟电路用 12MHZ 的晶振时那电容的值是怎样...八,4 个 AT89C51 单片机能否用一个 12M晶振...11.0592M 和 20M 24M 们都用的 30P 单片机内部...
11.0592M晶振 ms延时程序
11.0592M晶振 ms延时程序_信息与通信_工程科技_...(AT89C51 @ 11.0592MHz) { unsigned int i; ...段延时程序它的精确延时到底多少,这和汇编延时程序...
单片机晶振疑难问题全解
单片机时钟电路用 12MHZ 的晶振时那电容的值是怎样...八,4 个 AT89C51 单片机能否用一个 12M晶振...11.0592M 和 20M 24M 们都用的 30P 单片机内部...
51单片机晶振你所不知道的21个问题
单片机时钟电路用 12MHZ 的晶振时那电容的值是怎样...八,4 个 AT89C51 单片机能否用一个 12M晶振...11.0592M 和 20M 24M 们都用的 30P 单片机内部...
更多相关标签:
11.0592mhz晶振 | 晶振11.0592 | 11.0592晶振机器周期 | 11.0592mhz晶振封装 | 晶振11.0592延时程序 | 11.0592mhz晶振波特率 | 单片机晶振11.0592 | 11.0592晶振延时函数 |