⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 93c46.lst

📁 93C46读写练习程序(C语言).
💻 LST
字号:
C51 COMPILER V6.12  93C46                                                                  05/30/2008 14:02:14 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE 93C46
OBJECT MODULE PLACED IN .\93C46.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE .\93C46.c DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          
   3          #include <reg51.h>
   4          #include <intrins.h>
   5          
   6          //define OP code
   7          #define OP_EWEN_H		0x00	// 00					write enable
   8          #define OP_EWEN_L		0x60	// 11X XXXX				write enable
   9          #define OP_EWDS_H		0x00	// 00					disable
  10          #define OP_EWDS_L		0x00	// 00X XXXX				disable
  11          
  12          #define OP_WRITE_H		0x40	// 01 A6-A0				write data
  13          #define OP_READ_H		0x80	// 10 A6-A0				read data
  14          
  15          #define OP_ERASE_H		0xc0	// 11 A6-A0				erase a word
  16          
  17          #define OP_ERAL_H		0x00	// 00					erase all
  18          #define OP_ERAL_L		0x40	// 10X XXXX				erase all
  19          #define OP_WRAL_H		0x00	// 00  					write all	
  20          #define OP_WRAL_L		0x20	// 01X XXXX		 		write all	
  21          
  22          
  23          //define pin
  24          sbit CS = P3^4;
  25          sbit SK = P3^3;
  26          sbit DI	= P3^5;
  27          sbit DO = P3^6;
  28          
  29          unsigned char code dis_code[] = {0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e,0xff};
  30          
  31          void start();
  32          void ewen();
  33          void ewds();
  34          void erase();
  35          void write(unsigned char addr, unsigned char indata);
  36          unsigned char read(unsigned char addr);
  37          void inop(unsigned char op_h, unsigned char op_l);
  38          void shin(unsigned char indata);
  39          unsigned char shout();
  40          void delayms(unsigned char ms);
  41          
  42          main()
  43          {
  44   1      	unsigned char i;
  45   1      	CS = 0;				//初始化端口
  46   1      	SK = 0;
  47   1      	DI = 1;
  48   1      	DO = 1;
  49   1      
  50   1      	ewen();				// 使能写入操作
  51   1      	erase();			// 擦除全部内容
  52   1      		
  53   1      	for(i = 0 ; i < 8; i++)		//写入显示代码到AT93C46
  54   1      	{
  55   2      		write(i, dis_code[i]);
C51 COMPILER V6.12  93C46                                                                  05/30/2008 14:02:14 PAGE 2   

  56   2      	}
  57   1      	
  58   1      	ewds();				// 禁止写入操作	
  59   1      	
  60   1      	i = 0;
  61   1      	while(1)
  62   1      	{
  63   2      		P0 = read(i);	// 循环读取AT93C46内容,并输出到P0口
  64   2      		i++;
  65   2      		i &= 0x07;		// 循环读取地址为0x00~0x07
  66   2      		delayms(250);		
  67   2      	}
  68   1      }
  69          
  70          
  71          void write(unsigned char addr, unsigned char indata)
  72          // 写入数据indata到addr
  73          {
  74   1      	inop(OP_WRITE_H, addr);	// 写入指令和地址
  75   1      		shin(indata);
  76   1      		CS = 0;
  77   1      	delayms(10);			// Twp
  78   1      }
  79          
  80          unsigned char read(unsigned char addr)
  81          // 读取addr处的数据
  82          {
  83   1      	unsigned char out_data;
  84   1      	inop(OP_READ_H, addr);	// 写入指令和地址
  85   1      	out_data = shout();
  86   1      	CS = 0;	
  87   1      	return out_data;
  88   1      }
  89          
  90          void ewen()
  91          {
  92   1      	inop(OP_EWEN_H, OP_EWEN_L);
  93   1      	CS= 0;
  94   1      }
  95          
  96          void ewds()
  97          {
  98   1      	inop(OP_EWDS_H, OP_EWDS_L);
  99   1      	CS= 0;	
 100   1      }
 101          
 102          void erase()
 103          {
 104   1      	inop(OP_ERAL_H, OP_ERAL_L);
 105   1      	delayms(30);
 106   1      	CS = 0;
 107   1      }
 108          
 109          
 110          void inop(unsigned char op_h, unsigned char op_l)
 111          //移入op_h的高两位和op_l的低7位
 112          //op_h为指令码的高两位
 113          //op_l为指令码的低7位或7位地址
 114          {	
 115   1      
 116   1      	unsigned char i;
 117   1      	
C51 COMPILER V6.12  93C46                                                                  05/30/2008 14:02:14 PAGE 3   

 118   1      	SK = 0;		// 开始位
 119   1      	DI = 1;
 120   1      	CS = 1;
 121   1      	_nop_();
 122   1      	_nop_(); 
 123   1      	SK = 1;
 124   1      	_nop_();
 125   1      	_nop_();
 126   1      	SK = 0;		// 开始位结束
 127   1      
 128   1      	DI = (bit)(op_h & 0x80);	// 先移入指令码高位
 129   1      	SK = 1;
 130   1      	op_h <<= 1;
 131   1      	SK = 0;		
 132   1      
 133   1      	DI = (bit)(op_h & 0x80);	// 移入指令码次高位
 134   1      	SK = 1;
 135   1      	_nop_();
 136   1      	_nop_();	
 137   1      	SK = 0;
 138   1      	
 139   1      	// 移入余下的指令码或地址数据
 140   1      	op_l <<= 1;	
 141   1      	for(i = 0; i < 7; i++)		
 142   1      	{
 143   2      		DI = (bit)(op_l & 0x80);	// 先移入高位
 144   2      		SK = 1;
 145   2      		op_l <<= 1;
 146   2      		SK = 0;		
 147   2      	}
 148   1      	DI = 1;		
 149   1      }
 150          
 151          
 152          void shin(unsigned char indata)		
 153          //移入数据
 154          {
 155   1      	unsigned char i;
 156   1      	for(i = 0; i < 8; i++)
 157   1      	{
 158   2      		DI = (bit)(indata & 0x80);	// 先移入高位
 159   2      		SK = 1;
 160   2      		indata <<= 1;
 161   2      		SK = 0;		
 162   2      	}
 163   1      	DI = 1;
 164   1      }
 165          
 166          unsigned char shout(void)			
 167          // 移出数据
 168          {
 169   1      	unsigned char i, out_data;
 170   1      	for(i = 0; i < 8; i++)
 171   1      	{
 172   2      		SK = 1;
 173   2      		out_data <<= 1;
 174   2      		SK = 0;
 175   2      		out_data |= (unsigned char)DO;
 176   2      	}
 177   1      	return(out_data);
 178   1      }
 179          
C51 COMPILER V6.12  93C46                                                                  05/30/2008 14:02:14 PAGE 4   

 180          void delayms(unsigned char ms)	
 181          // 延时子程序
 182          {						
 183   1      	unsigned char i;
 184   1      	while(ms--)
 185   1      	{
 186   2      		for(i = 0; i < 120; i++);
 187   2      	}
 188   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    251    ----
   CONSTANT SIZE    =      8    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -