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

📄 manager.lst

📁 C8051F020对实时时钟的读写
💻 LST
字号:
C51 COMPILER V6.12  MANAGER                                                                05/26/2005 20:51:46 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE MANAGER
OBJECT MODULE PLACED IN .\manager.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\manager.c LARGE BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //***********************************************************************************
   2          //	头文件
   3          //***********************************************************************************
   4          
   5          //-------------------------------------------------------------------------
   6          // 包含文件
   7          //-------------------------------------------------------------------------
   8          #include <c8051f020.h>          //SFR declarations
   9          #include <intrins.h>			//未知
  10          
  11          //------------------------------------------------------------------------------------
  12          // 数据类型定义
  13          //------------------------------------------------------------------------------------
  14          
  15          #define uchar unsigned char 
  16          #define uint unsigned int 
  17          
  18          //------------------------------------------------------------------------------------
  19          // 16-bit SFR Definitions for 'F02x
  20          //------------------------------------------------------------------------------------
  21          
  22          sfr16 DP       = 0x82;                    // data pointer
  23          sfr16 TMR3RL   = 0x92;                    // Timer3 reload value
  24          sfr16 TMR3     = 0x94;                    // Timer3 counter
  25          sfr16 ADC0     = 0xbe;                    // ADC0 data
  26          sfr16 ADC0GT   = 0xc4;                    // ADC0 greater than window
  27          sfr16 ADC0LT   = 0xc6;                    // ADC0 less than window
  28          sfr16 RCAP2    = 0xca;                    // Timer2 capture/reload
  29          sfr16 T2       = 0xcc;                    // Timer2
  30          sfr16 RCAP4    = 0xe4;                    // Timer4 capture/reload
  31          sfr16 T4       = 0xf4;                    // Timer4
  32          sfr16 DAC0     = 0xd2;                    // DAC0 data
  33          sfr16 DAC1     = 0xd5;                    // DAC1 data
  34          
  35          //------------------------------------------------------------------------------------
  36          // 全局常数
  37          //------------------------------------------------------------------------------------
  38          
  39          //------------------------------------------------------------------------------------
  40          // 数据类型定义
  41          //------------------------------------------------------------------------------------
  42          
  43          struct time			//时-分-秒结构
  44          {
  45          	int hour;
  46          	int minute;
  47          	int second;
  48          };
  49          
  50          //------------------------------------------------------------------------------------
  51          // 全局变量
  52          //------------------------------------------------------------------------------------
  53          
  54          int present_time[17];		//当前时间,RTC取得的数据
  55          int present_second;			//当前时间-秒
C51 COMPILER V6.12  MANAGER                                                                05/26/2005 20:51:46 PAGE 2   

  56          int present_minute;			//当前时间-分
  57          int present_hour;			//当前时间-时
  58          int present_date;			//当前时间-日
  59          int present_month;			//当前时间-月
  60          int present_year;			//当前时间-年
  61          
  62          uint rtc_read_write;		//RTC读写码
  63          uint rtc_register;			//RTC寄存器地址
  64          uint rtc_data;				//向RTC写的数据
  65          uint rtc_data_flag;			//RTC
  66          
  67          
  68          //------------------------------------------------------------------
  69          // 函数声明
  70          //------------------------------------------------------------------
  71          
  72          // RTC-实时时钟部分
  73          
  74          void rtc_int(void);				//RTC中断
  75          void send_rtc_command(uint rtc_register_local, uint rtc_data_local);	//向RTC写数据
  76          void init_rtc(void);			//RTC初始化
  77          void delay(int time);
  78          
  79          //*************************************************************************************
  80          // RTC-实时时钟部分
  81          // 
  82          // void rtc_int(void);				//RTC中断
  83          // void send_rtc_command(uint rtc_register_local, uint rtc_data_local);	//向RTC写数据
  84          // void init_rtc(void);				//RTC初始化
  85          // void read_rtc_data(void);		//读取RTC的数据
  86          //*************************************************************************************
  87          
  88          //================================================================ 
  89          // RTC串行中断
  90          //================================================================
  91          
  92          void rtc_int(void) interrupt 7 
  93          {
  94   1      	//EA=0;
  95   1      
  96   1      	switch(SMB0STA)
  97   1      	{
  98   2      		case 0x08:
  99   2      		{
 100   3      			SMB0DAT=rtc_read_write;
 101   3      			STA=0;
 102   3      			break;
 103   3      		}
 104   2      		case 0x10:
 105   2      		{
 106   3      			STO=1;///
 107   3      			break;
 108   3      		}
 109   2      		case 0x18:
 110   2      		{
 111   3      			SMB0DAT=rtc_register;
 112   3      			break;
 113   3      		}
 114   2      		case 0x20:
 115   2      		{			
 116   3      			STO=1;///
 117   3      			break;
C51 COMPILER V6.12  MANAGER                                                                05/26/2005 20:51:46 PAGE 3   

 118   3      		}
 119   2      		case 0x28:
 120   2      		{
 121   3      			if(rtc_data_flag==0)
 122   3      			{
 123   4      				SMB0DAT=rtc_data;
 124   4      				rtc_data_flag=1;
 125   4      			}
 126   3      			else
 127   3      			{
 128   4      				STO=1;
 129   4      				rtc_data_flag=0;
 130   4      			}
 131   3      			break;
 132   3      		}
 133   2      		case 0x30:
 134   2      		{
 135   3      			STO=1;///
 136   3      			break;
 137   3      		}
 138   2      		case 0x38:
 139   2      		{
 140   3      			STO=1;///
 141   3      			break;
 142   3      		}
 143   2      		case 0x40:
 144   2      		{
 145   3      			AA=1;
 146   3      			break;
 147   3      		}
 148   2      		case 0x48:
 149   2      		{
 150   3      			STO=1;///
 151   3      			break;
 152   3      		}
 153   2      		case 0x50:
 154   2      		{
 155   3      			present_time[rtc_data_flag]=SMB0DAT;	
 156   3      			if(rtc_data_flag==15)
 157   3      			{
 158   4      				AA=0;
 159   4      			}
 160   3      			rtc_data_flag=rtc_data_flag+1;
 161   3      			break;
 162   3      		}
 163   2      		case 0x58:
 164   2      		{
 165   3      			STO=1;
 166   3      			break;
 167   3      		}
 168   2      		default:
 169   2      		{
 170   3      			STO=1;///
 171   3      			break;
 172   3      		}
 173   2      	}
 174   1      	SI=0;
 175   1      
 176   1      	//EA=1;
 177   1      } 
 178          
 179          //================================================================ 
C51 COMPILER V6.12  MANAGER                                                                05/26/2005 20:51:46 PAGE 4   

 180          // 向RTC写数据
 181          //================================================================
 182          
 183          void send_rtc_command(uint rtc_register_local, uint rtc_data_local)
 184          {	
 185   1      	rtc_read_write=0xd0;
 186   1      	rtc_register=rtc_register_local;
 187   1      	rtc_data=rtc_data_local;
 188   1      	rtc_data_flag=0;
 189   1      
 190   1      	STA=1;
 191   1      }
 192          
 193          //================================================================ 
 194          // 初始化RTC
 195          //================================================================
 196          
 197          void init_rtc(void)
 198          {	
 199   1      	send_rtc_command(0x00,0x00);delay(1000);		//second	
 200   1      	send_rtc_command(0x01,0x32);delay(1000);		//minute
 201   1      	send_rtc_command(0x02,0x08);delay(1000);		//hour
 202   1      	send_rtc_command(0x03,0x04);delay(1000);		//day
 203   1      	send_rtc_command(0x04,0x14);delay(1000);		//date
 204   1      	send_rtc_command(0x05,0x04);delay(1000);		//month
 205   1      	send_rtc_command(0x06,0x05);delay(1000);		//year
 206   1      	send_rtc_command(0x07,0x00);delay(1000);
 207   1      	send_rtc_command(0x08,0x00);delay(1000);
 208   1      	send_rtc_command(0x09,0x00);delay(1000);
 209   1      	send_rtc_command(0x0a,0x00);delay(1000);
 210   1      	send_rtc_command(0x0b,0x00);delay(1000);
 211   1      	send_rtc_command(0x0c,0x00);delay(1000);
 212   1      	send_rtc_command(0x0d,0x00);delay(1000);
 213   1      	send_rtc_command(0x0e,0x18);delay(1000);		//control
 214   1      	send_rtc_command(0x0f,0x00);delay(1000);		//status
 215   1      	send_rtc_command(0x10,0xa5);delay(1000);		//trickle charge
 216   1      }
 217          
 218          //================================================================ 
 219          // 延时函数 
 220          //================================================================
 221          
 222          void delay(int time) 
 223          {     
 224   1      	int i;  
 225   1      	for(i=0;i<time;i++){;}         
 226   1      } 
 227          
 228          //********************************************************************
 229          // 主程序部分
 230          //********************************************************************
 231          
 232          void main (void) 
 233          {
 234   1      	int i;
 235   1      
 236   1      	P0MDOUT=0xff;
 237   1      	P1MDOUT=0x00;
 238   1      	P3MDOUT=0xff;		//端口设置
 239   1      
 240   1      	WDTCN = 0xde;	WDTCN = 0xad;	// 关闭看门狗
 241   1      
C51 COMPILER V6.12  MANAGER                                                                05/26/2005 20:51:46 PAGE 5   

 242   1      	//启动外部时钟
 243   1      	OSCXCN=0x27;					//外部时钟允许
 244   1      	for(i=0;i<100;i++) delay(500);	//等待至少1ms
 245   1      	//while(!(OSCXCN&0x80));
 246   1      	OSCICN=0x88;	
 247   1      	
 248   1      	XBR0 = 0x01;		//SDA-P0.0, SCL-P0.1
 249   1      	XBR1 = 0x14;		//INT0-P0.2,  INT1-P0.3
 250   1      	XBR2 = 0x40;		//交叉开关允许
 251   1      
 252   1      	EX0 = 1;	//INT0允许
 253   1      	EX1 = 1;	//INT1允许
 254   1      	EIE1=0x02;	//MSBus中断允许
 255   1      
 256   1      	IT0=1;		//INT0下降沿触发
 257   1      	IT1=0;		//INT1电平触发
 258   1      
 259   1      	EA = 1;		//允许所有中断
 260   1      
 261   1      	SMB0CR=0x00;		//时钟速率寄存器
 262   1      	ENSMB=1;
 263   1      	SMBFTE=0;
 264   1      	SMBTOE=1;
 265   1      
 266   1      	TMR3CN=0x87;
 267   1      	TMR3RLL=0xff;
 268   1      
 269   1      	init_rtc();		//初始化时钟
 270   1      
 271   1      	while(1)
 272   1      	{
 273   2      	}
 274   1      	
 275   1      }
 276          
 277          
 278          
 279          
 280          
 281          
 282          
 283          
 284          
 285          
 286          
 287          
 288          
 289          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    550    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     54    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -