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

📄 i2c.lst

📁 I2C实用源代码。KEIL C51编译器编写。
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V5.50,  I2C                                                                   02/12/03  05:12:36  PAGE 1   


DOS C51 COMPILER V5.50, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.OBJ
COMPILER INVOKED BY: C:\C51\BIN\C51.EXE I2C.C SB DB OE

stmt level    source

   1          /*******************************************************************************/
   2          /*									       */
   3          /*	Title: I2C Code							       */
   4          /*									       */
   5          /*	This example demo code is provided as is and has no warranty, implied  */
   6          /*	or otherwise.  You are free to use/modify any of the provided code at  */
   7          /*	your own risk in your applications.				       */
   8          /*									       */
   9          /*	LIMITATION OF LIABILITY:  NEITHER STMicroelectronics NOR ITS VENDORS   */
  10          /*	OR AGENTS SHALL BE LIABLE FOR ANY LOSS OF PROFITS, LOST OF USE, LOSS   */
  11          /*	OF DATA, INTERRUPTION OF BUSINESS, NOR FOR INDIRECT, SPECIAL,	       */
  12          /*	INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND WHETHER UNDER THIS     */
  13          /*	AGREEMENT OR OTHERWISE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH     */
  14          /* 	DAMAGES.							       */
  15          /*									       */
  16          /*   	Application Test Program for: 					       */
  17          /*	-----------------------------					       */	
  18          /*									       */
  19          /* 	      M41T0/T00/T11/T56 (I2C - 8 Bytes RTC Reg. Map)		       */
  20          /* 	      M41T80/T81 (I2C - 20 Bytes RTC Reg. Map)   		       */
  21          /* 	      M41ST84/ST85 (I2C - 20 Bytes RTC Reg. Map) 		       */
  22          /* 	      M41ST87 (I2C - RTC Reg. Map)	       			       */
  23          /*				 					       */
  24          /*=============================================================================*/
  25          /*									       */
  26          /*	Rev.  Description		  Date:	       			       */
  27          /*=============================================================================*/
  28          /*									       */
  29          /*	01 -  Initial Rev.		  03-01-03    			       */			
  30          /*									       */	
  31          /*******************************************************************************/
  32          								
  33          #include <c:\c51\inc\REG515.H> 		/* DEFINE 8051 REGISTERS */
  34          #include <c:\c51\inc\STDIO.H> 		/* DEFINE I/O FUNCTIONS */
  35          #include <c:\c51\inc\CTYPE.H>  		/* DEFINITIONS FOR CHAR CONVERSION */
  36          #include <c:\c51\inc\ABSACC.H> 		/* DIRECT ACCESS TO 8051 MEMORY */
  37          #include <c:\c51\inc\STDLIB.H> 		/* STANDARD LIBRARY */
  38          #include <c:\c51\inc\STRING.H> 		/* STRING FUNCTIONS */
  39          #include <c:\c51\inc\INTRINS.H> 
  40          
  41          
  42          /********************** PORT ASSIGNMENTS **************************************/
  43          /*									      */
  44          /*  Use Port 1, 4 and 5 for the following signals.			      */
  45          /*									      */
  46          /*  P4.0 = SDA	    (Input/Output)					      */
  47          /*  P4.1 = SCL	   (Input)						      */
  48          /*									      */
  49          /******************************************************************************/
  50          
  51          
  52          
  53          /*********************** FUNCTIONS PROTOTYPE **********************************/
  54          /*									      */
  55          /******************************************************************************/
  56          
  57          void main (void);
  58          void Board_Init(void);
  59          
C51 COMPILER V5.50,  I2C                                                                   02/12/03  05:12:36  PAGE 2   

  60          /*  I2C Functions Prototype */
  61          void I2CStart(void);                                                                             
  62          void I2C_Init(void);
  63          
  64          void Delay(unsigned int count);
  65          
  66          unsigned char I2CMasterWrite(unsigned char input_byte);
  67          unsigned char I2CMasterRead(unsigned char ack);
  68          unsigned char I2CStop();
  69          
  70          
  71          /********************* DEFINE CONSTANTS & GLOBAL VARIABLES ********************/
  72          /*									      */
  73          /*   Define Timekeeper registers constants.				      */
  74          /*									      */
  75          /******************************************************************************/
  76          
  77          #define Good_Device 1
  78          #define Bad_Device 2
  79          
  80          sbit SDA = P4^0;
  81          sbit SCL = P4^1; 
  82          
  83          
  84          /******************************************************************************/
  85          /*	Subroutine:	Main			      		      	      */
  86          /*			                                 		      */	
  87          /*	Description:	Write and read to the Timekeeper Register and also    */
  88          /*			write and read to the RAM.			      */
  89          /*                                                                    	      */
  90          /******************************************************************************/
  91          
  92          void main(void)
  93          {       /* Start of Main Program */
  94   1      	unsigned char Dev_Sel;
  95   1      	unsigned char Sec_Add_Reg, Min_Add_Reg, Hr_Add_Reg, DOW_Add_Reg, DOM_Add_Reg;
  96   1      	unsigned char Mon_Add_Reg, Yr_Add_Reg, Cont_Add_Reg, Word_Add, RAM_Size;
  97   1              unsigned char Tenths_Sec_Add_Reg, Wdog_Add_Reg, Al_Mon_Add_Reg;
  98   1      	unsigned char Al_DOM_Add_Reg, Al_Hr_Add_Reg, Al_Min_Add_Reg, Al_Sec_Add_Reg;
  99   1      	unsigned char Flags_Add_Reg, SQW_Add_Reg, Tamper1_Add_Reg, Tamper2_Add_Reg;
 100   1      	unsigned char Sel_RTC_Reg, RTC_Data;
 101   1      	unsigned char Sec_Reg, Min_Reg, Hr_Reg, DOW_Reg, DOM_Reg, Mon_Reg, Yr_Reg;
 102   1      	unsigned char Cont_Reg, Tenths_Sec_Reg, Wdog_Reg, Al_Mon_Reg, Al_DOM_Reg; 
 103   1      	unsigned char Al_Hr_Reg, Al_Min_Reg, Al_Sec_Reg,  Flags_Reg, SQW_Reg;
 104   1      	unsigned char Tamper1_Reg, Tamper2_Reg, Interrupts;
 105   1      	unsigned char Sec_Data, Min_Data, Hr_Data, DOW_Data, DOM_Data, Mon_Data, Yr_Data;
 106   1      	unsigned char j, i,  Number_Bytes, Error_Flag;
 107   1      	unsigned char RAM_Data_In, RAM_Add, RAM_Data_Out, Dev_Add, RTC_Reg_Size, RAM_Density;
 108   1      	
 109   1      
 110   1      
 111   1              Board_Init();
 112   1              Dev_Add = 0xD0;
 113   1      
 114   1                          /* Start of I2C Mode */
 115   1          		   I2C_Init();
 116   1         		   Dev_Sel = _getkey();                                       
 117   1         		   switch (Dev_Sel)                                      
 118   1         		        {	 /* Start of Device Selection */	
 119   2            	 		case 1 : /* T0/T00/T11/T56 RTC Address Location */
 120   2      				 /* T0 & T00 device have no memory */
 121   2      				 /* T11 & T56 have 56 bytes of memory */
 122   2      				 P5 = 0xFF;
 123   2      	       	    		 Sec_Add_Reg = _getkey();
 124   2      		    		 Min_Add_Reg = _getkey();
 125   2      	            		 Hr_Add_Reg = _getkey();
C51 COMPILER V5.50,  I2C                                                                   02/12/03  05:12:36  PAGE 3   

 126   2      		    		 DOW_Add_Reg = _getkey();
 127   2      		    		 DOM_Add_Reg = _getkey();
 128   2      	 	    		 Mon_Add_Reg = _getkey();
 129   2      		    		 Yr_Add_Reg = _getkey();
 130   2      		    		 Cont_Add_Reg = _getkey();
 131   2       	            		 Word_Add = _getkey();
 132   2      		    		 RAM_Size = _getkey();
 133   2                          		 break ;
 134   2      
 135   2                 		case 2 : /* M41T80/T81/ST84/ST85 RTC Address Location */
 136   2      				 /* T80 & T81 device have no memory */
 137   2      				 /* ST84 & ST85 have 56 bytes of memory */	
 138   2      				 P5 = 0xFF;
 139   2      	       	    		 Tenths_Sec_Add_Reg = _getkey();
 140   2      	       	    	 	 Sec_Add_Reg = _getkey();
 141   2      		    		 Min_Add_Reg = _getkey();
 142   2      	            		 Hr_Add_Reg =  _getkey();
 143   2      		    		 DOW_Add_Reg = _getkey();
 144   2      		    		 DOM_Add_Reg = _getkey();
 145   2      	 	    		 Mon_Add_Reg = _getkey();
 146   2      		    		 Yr_Add_Reg =  _getkey();
 147   2      		    		 Cont_Add_Reg = _getkey();
 148   2      	 	    		 Wdog_Add_Reg = _getkey();
 149   2      	 	    		 Al_Mon_Add_Reg = _getkey();
 150   2      		    	         Al_DOM_Add_Reg = _getkey();
 151   2      		    		 Al_Hr_Add_Reg = _getkey();
 152   2      		    		 Al_Min_Add_Reg = _getkey();
 153   2      		    		 Al_Sec_Add_Reg = _getkey();
 154   2      		    		 Flags_Add_Reg = _getkey();
 155   2       		    		 SQW_Add_Reg = _getkey();
 156   2       	            		 Word_Add = _getkey();
 157   2      		    		 RAM_Size = _getkey();
 158   2                          		 break ;
 159   2      
 160   2                 		case 3 : /* M41ST87 RTC Address Location */
 161   2      				 /* ST87 has 144 bytes of memory */
 162   2      				 P5 = 0xEF;
 163   2      	       	    		 Tenths_Sec_Add_Reg = _getkey();
 164   2      	       	    	 	 Sec_Add_Reg = _getkey();
 165   2      		    		 Min_Add_Reg = _getkey();
 166   2      	            		 Hr_Add_Reg =  _getkey();
 167   2      		    		 DOW_Add_Reg = _getkey();
 168   2      		    		 DOM_Add_Reg = _getkey();
 169   2      	 	    		 Mon_Add_Reg = _getkey();
 170   2      		    		 Yr_Add_Reg =  _getkey();
 171   2      		    		 Cont_Add_Reg = _getkey();
 172   2      	 	    		 Wdog_Add_Reg = _getkey();
 173   2      	 	    		 Al_Mon_Add_Reg = _getkey();
 174   2      		    	         Al_DOM_Add_Reg = _getkey();
 175   2      		    		 Al_Hr_Add_Reg = _getkey();
 176   2      		    		 Al_Min_Add_Reg = _getkey();
 177   2      		    		 Al_Sec_Add_Reg = _getkey();
 178   2      		    		 Flags_Add_Reg = _getkey();
 179   2       		    		 SQW_Add_Reg = _getkey();
 180   2      				 Tamper1_Add_Reg = _getkey();
 181   2      				 Tamper2_Add_Reg = _getkey();
 182   2       	            		 Word_Add = _getkey();
 183   2      		    		 RAM_Size = _getkey();
 184   2                          		 break ;
 185   2      
 186   2                 		default:
 187   2       	       			 break ;                         
 188   2      		        }
 189   1                                       /* End of Device Selection */
 190   1      		   while(1)
 191   1      		   {             /* Start of Input Selection */
C51 COMPILER V5.50,  I2C                                                                   02/12/03  05:12:36  PAGE 4   

 192   2      	   		Sel_RTC_Reg = _getkey ();
 193   2                                                                  
 194   2      	   		switch (Sel_RTC_Reg)
 195   2      	   		{	 /* Start of RTC Reg. Selection */
 196   3                    		    case 11: /* write to seconds register */
 197   3      		            	     RTC_Data = _getkey();	
 198   3      		       		     I2CStart();
 199   3      		       		     if (I2CMasterWrite(Dev_Add))
 200   3      	   	          		I2CStop();    
 201   3      
 202   3      		       		     if (I2CMasterWrite(Sec_Add_Reg))
 203   3      	   	          		I2CStop();
 204   3      
 205   3              	       		     if (I2CMasterWrite(RTC_Data))
 206   3      	   	          		I2CStop();
 207   3      
 208   3      		       		     I2CStop();
 209   3              	       		     break;
 210   3                                              	
 211   3                    		    case 12: /* write to minutes register */
 212   3      		       		     RTC_Data = _getkey();	
 213   3      		       		     I2CStart();
 214   3      		       		     if (I2CMasterWrite(Dev_Add))
 215   3      	   	          		I2CStop();    
 216   3      
 217   3      		       	 	     if (I2CMasterWrite(Min_Add_Reg))
 218   3      	   	          		I2CStop();
 219   3      
 220   3              	       		     if (I2CMasterWrite(RTC_Data))
 221   3      	   	          		I2CStop();
 222   3      
 223   3      		       		     I2CStop();
 224   3              	       		     break;
 225   3      
 226   3                    		    case 13: /* write to hours register */
 227   3      		       		     RTC_Data = _getkey();	
 228   3      		       		     I2CStart();
 229   3      		       		     if (I2CMasterWrite(Dev_Add))
 230   3      	   	          		I2CStop();    
 231   3      
 232   3      		       		     if (I2CMasterWrite(Hr_Add_Reg))
 233   3      	   	          		I2CStop();
 234   3      
 235   3              	       		     if (I2CMasterWrite(RTC_Data))
 236   3      	   	          		I2CStop();

⌨️ 快捷键说明

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