掉电模式:
在掉电模式下,振荡器停止工作,进入掉电模式的指令是最后一条被执行的指令,片内RAM和特殊功能寄存器的内容在中指掉电模式前被冻结。退出掉电模式的唯一方法是硬件复位,复位后将从新定义全部特殊功能寄存器但不改变RAM中的内容,在VCC恢复到正常工作电平前,复位应无效切必须保持一定时间以使振荡器从新启动并稳定工作。
程序存储模式 器 闲散模式 闲散模式 掉电模式 掉电模式 内部 内部 外部 外部 ALE 1 1 0 0 PSEN P0 P1 P2 P3 1 1 0 0 数据 数据 数据 数据 浮空 数据 地址 数据 数据 数据 数据 数据 数据 数据 数据 数据 表2.2闲散和掉电模式外部引脚状态。
程序存储器的加密
AT89C51可使用对芯片上的三个加密位LB1,LB2,LB3进行编程(P)或不编程(U)得到如下表所示的功能:
程序加密位 1 2 3 4 U P P P U U P P U U U P 没有程序保护功能 禁止从外部程序存储器中执行MOVC指令读取内部程序存储器的内容 除上表功能外,还禁止程序校验 除以上功能外,同时禁止外部执行 表2.3程序存储器的加密
保护类型 当LB1被编程时,在复位期间,EA端的电平被锁存,如果单片机上电后一直没有复位,锁存起来的初始值是一个不确定数,这个不确定数会一直保存到真正复位位置。为了使单片机正常工作,被锁存的EA电平与这个引脚当前辑电平
9
一致。机密位只能通过整片擦除的方法清除。
3.2MAX232电平芯片介绍
MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的接口电路,使用+5v单电源供电。
内部结构基本可分三个部分:
第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。
第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。
其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。
8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。
TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DP9插头;DP9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。
第三部分是供电。15脚DNG、16脚VCC(+5v)。 电平转换电路如下:
图3.4 MAX232电平芯片
10
3.3 硬件电路设计图
3.3.1 PC机与单片机通信接口电路设计框图
本文采用MAx232作为PC机与单片机的串行通信接口芯片。硬件连接时,可从MAX232中的2路发送器和接收器中任选一路,只要注意发送与接收的引脚对应关系即可。接口电路如图3.5所示。
图3.5 PC机与单片机通信接口电路设计框图
3.3.2整体设计原理图
总体设计按照整体设计思路方案绘制原理图如下所示:
图3.6整体设计原理图
11
4软件设计
4.1上位机程序设计
void CTem_conDlg::OnOnCommMscomm1() { 数据
VARIANT variant_inp; LONG len,k;
// TODO: Add your control notification handler code here
m_strRXData=\ //每次进入则将编辑框内容清空等待显示新的
BYTE rxdata[2048]; //设置BYTE数组 CString strtemp;
if(m_ctrlComm.GetCommEvent()==2)//事件值为2表示接收缓冲区内有字符
{ //以下你可以根据自己的通信协议加入//处理代码
variant_inp=m_ctrlComm.GetInput();//读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为
//ColeSafeArray型变量
len=safearray_inp.GetOneDimSize();//得到有效数据长度 for(k=0;k safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组 for(k=0;k BYTE bt=*(char*)(rxdata+k);//字符型 strtemp.Format(\ //将字符送入临时变量strtemp存放 m_strRXData+=strtemp; //加入接收编辑框对应字符串 } } 12 } UpdateData(FALSE); //更新编辑框内容 4.2下位机程序设计 #include #define XTAL 11059200 // CUP 晶振频率 #define baudrate 9600 // 通信波特率 #define uchar unsigned char #define uint unsigned int sbit DQ = P3^3; // 定义DS18B20端口DQ sbit BEEP = P3^7; unsigned char presence ; unsigned char code LEDData1[ ={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xff}; unsigned char code LEDData[ ] {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0xff}; unsigned char data temp_data[2] = {0x00,0x00}; unsigned char data display[5] = {0x00,0x00,0x00,0x00,0x00}; unsigned char code ditab[16] {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; void beep(); sbit DIN = P0^7; // 小数点 bit flash=0; // 显示开关标记 bit flag_zf=0; // 正负温度标志 /**********************************************************/ void Delay(unsigned int num)// 延时函数 { while( --num ); } /**********************************************************/ uchar Init_DS18B20(void) // 初始化ds1820 13 ] = =