定时器2 的中断是由T2CON 中的TF2 和EXF2 逻辑或产生的,当转向中断服务程序时,这些标志位不能被硬件清除,事实上,服务程序需确定是TF2 或EXF2 产生中断,而由软件清除中断标志位。
定时器0 和定时器1 的标志位TF0 和TF1 在定时器溢出那个机器周期的S5P2 状态置位,而会在下一个机器周期才查询到该中断标志。然而,定时器2 的标志位TF2 在定时器溢出的那个机器周期的S2P2 状态置位,并在同一个机器周期内查询到该标志。 时钟振荡器
AT89C52 中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1 和XTAL2 分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路参见图10。外接石英晶体(或陶瓷谐振器)及电容C1、C2 接在放大器的反馈回路中构成并联振荡电路。对外接电容C1、C2 虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性,如果使用石英晶体,我们推荐电容使用30pF±10pF,而如使用陶瓷谐振器建议选择40pF±10F。用户也可以采用外部时钟。采用外部时钟的电路如图10 右图所示。这种情况下,外部时钟脉冲接到XTAL1 端,即内部时钟发生器的输入端,XTAL2 则悬空。由于外部时钟信号是通过一个2 分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。 空闲节电模式
在空闲工作模式状态, CPU 自身处于睡眠状态而所有片内的外设仍保持激活状态,这种方式由软件产生。此时,同时将片内RAM 和所有特殊功能寄存器的内容冻结。空闲模式可由任何允许的中断请求或硬件复位终止。由硬件复位终止空闲状态只需两个机器周期有效复位信号,在此状态下,片内硬件禁止访问内部RAM,但可以访问端口引脚,当用复位终止空闲方式时,为避免可能对端口产生意外写入,激活空闲模式的那条指令后一条指令不应是一条对端口或外部存储器的写入指令。 掉电模式
在掉电模式下,振荡器停止工作,进入掉电模式的指令是最后一条被执行的指令,片内RAM 和特殊功能寄存器的内容在终止掉电模式前被冻结。退出掉电模式的唯一方法是硬件复位,复位后将重新定义全部特殊功
能寄存器,但不改变RAM中的内容,在Vcc恢复到正常工作电平前,复位应无效,且必须保持一定时间以使振荡器重启动并稳定工作。 程序存储器的加密
AT89C52 有3 个程序加密位,可对芯片上的3 个加密位LB1、LB2、LB3 进行编程(P)或不编程(U)来得到。当加密位LB1 被编程时,在复位期间,EA 端的逻辑电平被采样并锁存,如果单片机上电后一直没有复位,则锁存起的初始值是一个随机数,且这个随机数会一直保存到真正复位为止。为使单片机能正常工作,被锁存的EA 电平值必须与该引脚当前的逻辑电平一致。此外,加密位只能通过整片擦除的方法清除。 Flash存储器的编程
AT89C52单片机内部有8k字节的Flash PEROM,这个Flash 存储阵列出厂时已处于擦除状态(即所有存储单元的内容均为FFH),用户随时可对其进行编程。编程接口可接收高电压(+12V)或低电压(Vcc)的允许编程信号。低电压编程模式适合于用户在线编程系统,而高电压编程模式可与通用EPROM 编程器兼容。
AT89C52 单片机中,有些属于低电压编程方式,而有些则是高电压编程方式,用户可从芯片上的型号和读取芯片内的签名字节获得该信息。 AT89C52 的程序存储器阵列是采用字节写入方式编程的,每次写入一个字节,要对整个芯片内的PEROM 程序存储器写入一个非空字节,必须使用片擦除的方式将整个存储器的内容清除。 编程方法
编程前,须按表9 和图11 所示设置好地址、数据及控制信号, AT89C52 编程方法如下:
1. 在地址线上加上要编程单元的地址信号。 2. 在数据线上加上要写入的数据字节。 3. 激活相应的控制信号。
4. 在高电压编程方式时,将EA/Vpp 端加上+12V 编程电压。 5. 每对Flash 存储阵列写入一个字节或每写入一个程序加密位,加上一个ALE/PROG 编程脉冲。每个字节写入周期是自身定时的,通常约为1.5ms。重复1—5 步骤,改变编程单元的地址和写入的数据,直到全部文件编程结束。 数据查询
AT89C52 单片机用Data Palling 表示一个写周期结束为特征,在一个写周期中,如需读取最后写入的一个字节,则 出的数据的最高位(P0.7)
是原来写入字节最高位的反码。写周期完成后,所输出的数据是有效的数据,即可进入下一个字节的写周期,写周期开始后,Data Palling 可能随时有效。Ready/Busy:字节编程的进度可通过“RDY/BSY 输出信号监测,编程期间,ALE 变为高电平“H”后,P3.4(RDY/BSY)端电平被拉低,表示正在编程状态(忙状态)。编程完成后,P3.4 变为高电平表示准备就绪状态。·程序校验:如果加密位LB1、LB2 没有进行编程,则代码数据可通过地址和数据线读回原编写的数据,采用如图12的电路。加密位不可直接校验,加密位的校验可通过对存储器的校验和写入状态来验证。 芯片擦除:利用控制信号的正确组合(表6)并保持ALE/PROG 引脚10mS 的低电平脉冲宽度即可将PEROM 阵列(4k字节)和三个加密位整片擦除,代码阵列在片擦除操作中将任何非空单元写入“1”,这步骤需再编程之前进行。·读片内签名字节:AT89C52 单片机内有3 个签名字节,地址为030H、031H 和032H。用于声明该器件的厂商、型号和编程电压。读AT89C52 签名字节需将P3.6 和P3.7 置逻辑低电平,读签名字节的过程和单元030H、031H 及032H 的 正常校验相仿,只返回值意义如下:
(030H)=1EH 声明产品由ATMEL公司制造。 (031H)=52H 声明为AT89C52 单片机。 (032H)=FFH 声明为12V 编程电压。 (032H)=05H 声明为5V 编程电压。
三 硬件设计
在原理图设计中,使用网络标号代替连接线,使得原理图清晰美观,容易辨识;将各个模块进行了分割,利于针对各个模块进行电源及网络的调整;电路设计均采用供应商提供的经典电路及网络发烧友提供的改进电路,仿真状态下运行良好,由于没有进行印刷制版,所以在干扰及噪声环境下的测试没有进行。
在PCB设计中,使用大片覆铜作为地,能够提高地的稳定性;电源线宽度为50mil,并且走线转角均为45度,减少电流惯性对铜导线的影响;对于走线比较稠密的地方,多采用过孔的方法防止导线交叉;部分元件封装为自行设计(如0805);布局方式为手工布局,具体方法为按照各个模块依次放置,使得布局美观清晰;PCB板单面放置元器件,背面只有过孔线。
根据设计需求设计硬件原理图见附录。
四 软件设计
在代码便携方面,遵循大纲布局在细致微调的原则,首先根据设计的要求,对各个部件模块进行初始化,然后对具体需要编程部分进行针对性设计;在LED显示设计方面,利用人眼余辉,可以进行扫描式显示,在330ms间隔时间内进行切换显示,8路IO控制显示4路IO进行片选达到控制4
位8段数码管的目的;AD模块使用供应商提供的经典程序历程,仿真条件下运行良好;AT89C52频率设定为12MHz,方便其中各个模块时钟的设计;整体软件设计在仿真情况下运行良好。
部分代码实现见附录。
五 设计心得
首先需要感谢王安老师给我提供这次机会能够进行本仪器的设计,并对我进行了细致的指导,也感谢在进行设计时,对我提供无私帮助的刘三帅,张希铭和刘坤等同学。
通过本次设计及实验,了解了电路设计的基本知识和C语言编程在硬件系统上的实现与应用,丰富了工程实践经验,由于时间及资金的限制没能进行电路板的印刷是本次设计的一大遗憾,希望在以后的学习工作中能够对此进行弥补。
附录
#include
#define uchar unsigned char #define uint unsigned int
sbit MAX197_CS=P2^7; sbit MAX197_WR=P2^6; sbit MAX197_RD=P2^5; sbit MAX197_HBEN=P2^4; sbit MAX197_INT=P3^2;
void delays(uint i); void delayl(uint n); void nop(uint i); void LED_8(uint i);
void MAX197_Write(char temp) {
MAX197_CS=1; MAX197_WR=1; delays(1);
MAX197_CS=0; nop(2);
MAX197_WR=0; nop(4); P1=temp; nop(4);
MAX197_WR=1; nop(1);
MAX197_CS=1; delayl(5); }
long int MAX197_Read() {
long int premp;
uint TempL,TempH; while(MAX197_INT) ; delayl(2);
MAX197_HBEN=0; nop(1);
MAX197_CS=0; MAX197_RD=0;
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库基于AT89C52的数字式压力表设计及实现(3)在线全文阅读。
相关推荐: