一些51单片机基础模块的程序

源代码在线查看: 宏晶eeprom.c

软件大小: 600 K
上传用户: hahuhuhuhu
关键词: 51单片机 模块 程序
下载地址: 免注册下载 普通下载 VIP

相关代码

				/********************************************************************
				* 文件名  : 宏晶EEPROM.c
				* 描述    :  该程序实现了对STC单片机的EEPROM的操作。每隔0.5秒钟,单片机对EEPROM进行一次
							 读、擦除和写操作,并把数值显示到数码管上。
							 确认试验是否成功:电源上电后,数码管的值在递增,观察值。关闭电源,待几秒后上电,
							 数码管显示的值会从断电钱的那个值开始显示。
				* 创建人  : 东流,2009年4月9日
				* 版本号  : 2.0
				* 技术支持论坛:www.zidh.com/bbs(请进入“赞助商板块”中的“东流电子工作室”)
				* 感谢“中国自动化资讯网”对本工作室的大力支持。
				***********************************************************************/
				#include
				#include
				/*以下是配置STC单片机的寄存器*/
				/*相关资料在STC89C51RC的PDF的第35页开始*/
				sfr ISP_DATA  = 0xE2;
				sfr ISP_ADDRH = 0xE3;
				sfr ISP_ADDRL = 0xE4;
				sfr ISP_CMD   = 0xE5;
				sfr ISP_TRIG  = 0xE6;
				sfr ISP_CONTR = 0xE7;
				
				#define uint  unsigned int
				#define uchar unsigned char
				
				#define ISP_BYTE_READ    1		//ISP字节读
				#define ISP_BYTE_PROGRAM 2		//ISP直接编程
				#define ISP_SECTOR_ERASE 3		//ISP扇区擦除
				
				uchar code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09};
				
				/********************************************************************
				* 名称 : Delay()
				* 功能 : 延时,延时时间为 10ms * del
				* 输入 : del
				* 输出 : 无
				***********************************************************************/
				void Delay_1ms(uint i)
				{
					uchar x,j;
					for(j=0;j					for(x=0;x				}
				
				/********************************************************************
				* 名称 : ISP_ERASE()
				* 功能 : EEPROM的扇区擦除
				* 输入 : Address(擦除扇区的地址)
				* 输出 : 无
				***********************************************************************/
				void ISP_ERASE(Address)
				{
					ISP_ADDRL = Address;
					ISP_ADDRH = Address >> 8;
					ISP_CONTR = 0x81;				
					ISP_CMD = ISP_SECTOR_ERASE;	
					ISP_TRIG = 0x46;	//PDF手册中说先像 ISP_TRIG 中写入 0x46, 然后写入 0xb9
					ISP_TRIG = 0xb9;
					_nop_();
					_nop_();	
				}
				
				/********************************************************************
				* 名称 : ISP_READ()
				* 功能 : 从EEPROM相应的地址中读出值
				* 输入 : Address(想要读取EEPROM的地址)
				* 输出 : Read_Data(从EEPROM读出的值)
				*********************************************************************/
				uint ISP_READ(Address)
				{
					uchar Read_Data;
					ISP_ADDRL = Address;
					ISP_ADDRH = Address >> 8;
					EA = 0;	
					ISP_CONTR = 0x81;
					ISP_CMD = ISP_BYTE_READ;
					ISP_TRIG = 0x46;
					ISP_TRIG = 0xb9;
					_nop_();
					_nop_();
					Read_Data = ISP_DATA;
					return Read_Data;	
				}
				
				/********************************************************************
				* 名称 : ISP_PROGRAM()
				* 功能 : 实现EEPROM的字节编程
				* 输入 : Address为编程的地址,Data_temp为想要编程的值
				* 输出 : 无
				***********************************************************************/
				void ISP_PROGRAM(Address, Data_temp)
				{
					ISP_DATA = Data_temp;
					ISP_ADDRL = Address;
					ISP_ADDRH = Address >> 8;
					ISP_CONTR = 0x81;
					ISP_CMD = ISP_BYTE_PROGRAM;
					ISP_TRIG = 0x46;
					ISP_TRIG = 0xb9;
					_nop_();
					_nop_(); 	
				}
				
				/********************************************************************
				* 名称 : Main()
				* 功能 : 主函数
				* 输入 : 无
				* 输出 : 无
				***********************************************************************/
				void Main()
				{
					uint i;
					uchar LED_Buffer = 0; 	
					while(1)
					{
						for(i=0; i						{		
							LED_Buffer = ISP_READ(0x2c00);
							P0 = table[LED_Buffer % 10];
							P2 = 0x01;
							Delay_1ms(6);
							P0 = table[LED_Buffer / 10 % 10];
							P2 = 0x02;
							Delay_1ms(6);
						}
						LED_Buffer++;
						ISP_ERASE(0x2c00);		//注意:字节编程时必须要先要擦除整个扇区	
						ISP_PROGRAM(0x2c00, LED_Buffer);		
					} 					
				}			

相关资源