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

📄 ds12887.lst

📁 本程序经调试好使
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    002A E5CF      LDI	R28,0x5F
    002B E0D4      LDI	R29,4
    002C BFCD      OUT	0x3D,R28
    002D BFDE      OUT	0x3E,R29
    002E 51C0      SUBI	R28,0x10
    002F 40D0      SBCI	R29,0
    0030 EA0A      LDI	R16,0xAA
    0031 8308      STD	Y+0,R16
    0032 2400      CLR	R0
    0033 E6E0      LDI	R30,0x60
    0034 E0F0      LDI	R31,0
    0035 E010      LDI	R17,0
    0036 36E6      CPI	R30,0x66
    0037 07F1      CPC	R31,R17
    0038 F011      BEQ	0x003B
    0039 9201      ST	R0,Z+
    003A CFFB      RJMP	0x0036
    003B 8300      STD	Z+0,R16
    003C E5E4      LDI	R30,0x54
    003D E0F0      LDI	R31,0
    003E E6A0      LDI	R26,0x60
    003F E0B0      LDI	R27,0
    0040 E010      LDI	R17,0
    0041 35E4      CPI	R30,0x54
    0042 07F1      CPC	R31,R17
    0043 F021      BEQ	0x0048
    0044 95C8      LPM
    0045 9631      ADIW	R30,1
    0046 920D      ST	R0,X+
    0047 CFF9      RJMP	0x0041
    0048 940E0147  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: C:\DOCUME~1\wangqinbo\MYDOCU~1\avrc\ds12997.c
(0001) /******************************************************/
(0002) // AVR 执行时间:8MHZ ->0.125us  4MHZ->0.25us  //无串口,模拟总线最简版
(0003) //               2MHZ->0.5us      *1MHZ->1us ,每句后延时2句
(0004) //51  执行时间:11.0592MHZ->2.17us 
(0005) //
(0006) //
(0007) /****************************************************/
(0008) 
(0009) #include <iom16v.h>        //2009-2-27-12-44 bf.1MHZ->2us
(0010) #include <macros.h>
(0011) 
(0012) #define uchar unsigned char		//定义无符号字符为 uchar
(0013) #define uint  unsigned int       //定义无符号整型
(0014) 
(0015) uchar y1,y2,y3,y4,y5,y6;
(0016) 
(0017) /**********************接口定义*********************************/
(0018) //GND <--   MOT		   VCC  -->VCC
(0019) //			.		   SQW
(0020) //			.		   .
(0021) //PA_0<-- 	AD0	       .     
(0022) //PA_1<-- 	AD1		   .
(0023) //PA_2<-- 	AD2        IRQ   -->PB_0
(0024) //PA_3<-- 	AD3        REET	 -->VCC
(0025) //PA_4<-- 	AD4		   DS	 -->PB_1
(0026) //PA_5<-- 	AD5		   .
(0027) //PA_6<-- 	AD6		   R/W	 -->PB_2
(0028) //PA_7<-- 	AD7		   AS	 -->PB_3
(0029) //		    GND		   CS    -->PB_4 
(0030) /*********************引脚说明***********************************/
(0031) //DS12887       16    器件
(0032) //数据线       PA口    数据地址公用总线
(0033) //DS_IRQ        PB0    时间中断     
(0034) //DS_DS         PB1    数据选通
(0035) //DS_RW    		PB2	   读写控制
(0036) //DS_AS			PB3	   地址选通
(0037) //DS_CS         PB4	   芯片片选
(0038) //DS_MOT        GND    模式选择
(0039) 
(0040) /*******************数据地址定义*************************************/
(0041) #define	DS12887_Second		0x00	//秒
(0042) #define	DS12887_Minute		0x02	//分
(0043) #define	DS12887_Hour		0x04	//时
(0044) #define	DS12887_Week		0x06	//星期
(0045) #define	DS12887_Day		    0x07	//日
(0046) #define	DS12887_Month		0x08	//月
(0047) #define	DS12887_Year		0x09	//年
(0048) 
(0049) //引脚电平定义
(0050) #define P_DS_1 PORTB|=BIT(PB1)	  	//DS_DS为1
(0051) #define P_DS_0 PORTB&=~BIT(PB1)		//DS_DS为0
(0052) #define D_DS_1 DDRB |=BIT(PB1)      //设为输出
(0053) 
(0054) #define P_RW_1  PORTB|=BIT(PB2)	    //DS_RW为1
(0055) #define P_RW_0  PORTB&=~BIT(PB2)	//DS_RW为0
(0056) #define D_RW_1   DDRB |=BIT(PB2)    //设为输出
(0057) 
(0058) #define P_AS_1 PORTB|=BIT(PB3)		//DS_AS为1
(0059) #define P_AS_0 PORTB&=~BIT(PB3)    	//DS_AS为0
(0060) #define D_AS_1  DDRB |=BIT(PB3)     //设为输出
(0061) 
(0062) #define P_CS_1 PORTB|=BIT(PB4)     //DS_CS为1
(0063) #define P_CS_0 PORTB&=~BIT(PB4)	   //DS_CS为0				
(0064) #define D_CS_1  DDRB |=BIT(PB4)     //设为输出
(0065) 
(0066)  			
(0067) //数据端口定义
(0068) #define AD_DDR DDRA 			//AD(地址/数据服用线)的输入/输出控制
(0069) #define AD_PORT PORTA			//AD(地址/数据服用线)的输出电平控制
(0070) #define AD_PIN PINA			//AD(地址/数据服用线)的输入电平控制
(0071) 
(0072) #define s1us_NOP();  _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
(0073) #define s2us_NOP();  s1us_NOP();s1us_NOP(); //延时等待2us
(0074) //定义时间类型,结构体数据类型
(0075) typedef struct _SYSTEMTIME_
(0076) {
(0077) 	unsigned  char Second;
(0078) 	unsigned  char Minute;
(0079) 	unsigned  char Hour;
(0080) 	unsigned  char Week;
(0081) 	unsigned  char Day;
(0082) 	unsigned  char Month;
(0083) 	unsigned  char Year;
(0084) 	unsigned  char DateString[9];
(0085) 	unsigned  char TimeString[9];
(0086) }SYSTEMTIME;			
(0087) 
(0088) /***********************函数声明*****************************/
(0089) void DS12887_Init(void);											//DS12887初始化
(0090) void DS12887_Write( uchar Address,  uchar Value);		//DS12887指定地址写入数据
(0091) uchar DS12887_Read(uchar Address);					//DS12887指定地址中读出数据	
(0092) void DS12887_SetTime( uchar Address,  uchar Value);	//设置时间函数
(0093) void DS12887_GetTime(SYSTEMTIME *Time);								//读出时间
(0094) void delay_8nus(uchar n);
(0095) 
(0096) /*********************延时5000+0us 函数定义**********/
(0097) void delay5ms(void)
(0098) {
(0099)     uchar i,j;
(0100)     for(i=185;i>0;i--)
_delay5ms:
  i                    --> R16
  j                    --> R18
    004B EB09      LDI	R16,0xB9
    004C C007      RJMP	0x0054
(0101)     for(j=12;j>0;j--);
    004D E02C      LDI	R18,0xC
    004E C001      RJMP	0x0050
    004F 952A      DEC	R18
    0050 2422      CLR	R2
    0051 1622      CP	R2,R18
    0052 F3E0      BCS	0x004F
    0053 950A      DEC	R16
    0054 2422      CLR	R2
    0055 1620      CP	R2,R16
    0056 F3B0      BCS	0x004D
    0057 9508      RET
(0102) }
(0103) /*****************延时1秒子函数*******************/
(0104) void delay_1ms(void)
(0105) {
(0106)  uint i;
(0107) for(i=1;i<(8*143-2);i++) //8为晶振频率
_delay_1ms:
  i                    --> R16
    0058 E001      LDI	R16,1
    0059 E010      LDI	R17,0
    005A C002      RJMP	0x005D
    005B 5F0F      SUBI	R16,0xFF
    005C 4F1F      SBCI	R17,0xFF
    005D 3706      CPI	R16,0x76
    005E E0E4      LDI	R30,4
    005F 071E      CPC	R17,R30
    0060 F3D0      BCS	0x005B
    0061 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    0062 940E016D  CALL	push_gset2
    0064 01B8      MOVW	R22,R16
(0108) ;
(0109) }
(0110) /****************延时N毫秒子函数****************/
(0111) void delay_nms(uint n)
(0112) {
(0113) uint i;
(0114) for(i=0;i<n;i++)
    0065 2744      CLR	R20
    0066 2755      CLR	R21
    0067 C003      RJMP	0x006B
(0115) delay_1ms();
    0068 DFEF      RCALL	_delay_1ms
    0069 5F4F      SUBI	R20,0xFF
    006A 4F5F      SBCI	R21,0xFF
    006B 1746      CP	R20,R22
    006C 0757      CPC	R21,R23
    006D F3D0      BCS	0x0068
    006E 940E0164  CALL	pop_gset2
    0070 9508      RET
_delay_8nus:
  i                    --> R22
  k                    --> R20
  n                    --> R16
    0071 940E016D  CALL	push_gset2
(0116) }
(0117) /****************精确延时微妙级,8MHZ,0.25us/step***********/
(0118) void delay_8nus(uchar n)
(0119) {
(0120)   uint i,k;
(0121)   i=n;
    0073 2F60      MOV	R22,R16
    0074 2777      CLR	R23
(0122)   for(k=i;k>0;k--)
    0075 01AB      MOVW	R20,R22
    0076 C003      RJMP	0x007A
(0123)   {
(0124)    _NOP();
    0077 0000      NOP
    0078 5041      SUBI	R20,1
    0079 4050      SBCI	R21,0
    007A 3040      CPI	R20,0
    007B 0745      CPC	R20,R21
    007C F7D1      BNE	0x0077
    007D 940E0164  CALL	pop_gset2
    007F 9508      RET
(0125)     }
(0126) }
(0127) /*******DS12887指定地址写入数据 ,严格按照INTERL的时序,程序**********/
(0128) void DS12887_Write( uchar Address, uchar Value)
(0129) {
(0130) 	
(0131) 	P_AS_0; 
_DS12887_Write:
  Value                --> R18
  Address              --> R16
    0080 98C3      CBI	0x18,3
(0132)     _NOP(); 
    0081 0000      NOP
(0133)     _NOP();     
    0082 0000      NOP
(0134)     P_DS_1; 
    0083 9AC1      SBI	0x18,1
(0135) 	_NOP(); 
    0084 0000      NOP
(0136)     _NOP();
    0085 0000      NOP
(0137)     P_RW_1;            //给出读信号 
    0086 9AC2      SBI	0x18,2
(0138)     _NOP(); 
    0087 0000      NOP
(0139)     _NOP();    
    0088 0000      NOP
(0140)     P_AS_1;            //锁存信号高电平 
    0089 9AC3      SBI	0x18,3
(0141)     _NOP(); 
    008A 0000      NOP
(0142)     _NOP(); 
    008B 0000      NOP
(0143)     AD_DDR = 0xFF;          //数据口设置为输出 
    008C EF8F      LDI	R24,0xFF
    008D BB8A      OUT	0x1A,R24
(0144)     _NOP(); 
    008E 0000      NOP
(0145)     _NOP();
    008F 0000      NOP
(0146) 	_NOP();
    0090 0000      NOP
(0147) 	_NOP(); 
    0091 0000      NOP
(0148)     AD_PORT = Address;       //给出地址 
    0092 BB0B      OUT	0x1B,R16
(0149)     _NOP(); 
    0093 0000      NOP
(0150)     _NOP();  
    0094 0000      NOP
(0151) 	_NOP(); 
    0095 0000      NOP
(0152)     _NOP();
    0096 0000      NOP
(0153) 	_NOP();
    0097 0000      NOP
(0154) 	_NOP();                     // 
    0098 0000      NOP
(0155)     P_AS_0;            //锁存信号低电平 
    0099 98C3      CBI	0x18,3
(0156)     _NOP(); 
    009A 0000      NOP
(0157)     _NOP();  
    009B 0000      NOP
(0158)     P_RW_0;            //给出写信号 
    009C 98C2      CBI	0x18,2
(0159)     _NOP(); 
    009D 0000      NOP
(0160)     _NOP(); 
    009E 0000      NOP
(0161)     _NOP(); 
    009F 0000      NOP
(0162)     AD_PORT = Value;  //写出数据 
    00A0 BB2B      OUT	0x1B,R18
(0163)     _NOP(); 
    00A1 0000      NOP
(0164)     _NOP(); 
    00A2 0000      NOP
(0165)     _NOP(); 
    00A3 0000      NOP
(0166)     _NOP();
    00A4 0000      NOP
(0167) 	_NOP();
    00A5 0000      NOP
(0168) 	_NOP();
    00A6 0000      NOP
(0169) 	_NOP();
    00A7 0000      NOP
(0170) 	_NOP(); 
    00A8 0000      NOP
(0171)     P_RW_1;            //给出读信号 
    00A9 9AC2      SBI	0x18,2
(0172)     _NOP(); 
    00AA 0000      NOP
(0173)     _NOP(); 
    00AB 0000      NOP
(0174)     _NOP(); 
    00AC 0000      NOP
(0175)     P_AS_1;            //片选信号高电平 
    00AD 9AC3      SBI	0x18,3
(0176)     _NOP(); 
    00AE 0000      NOP
(0177)     _NOP();  
    00AF 0000      NOP
    00B0 9508      RET
_DS12887_Read:
  temp                 --> R20
  Address              --> R16
    00B1 940E016F  CALL	push_gset1
(0178) }
(0179) /*********DS12887指定地址中读出数据,严格按照INTERL的时序!!!!!********/
(0180) uchar DS12887_Read( uchar Address)
(0181) {   
(0182) 	 unsigned char temp = 0;     
    00B3 2744      CLR	R20
(0183)     P_AS_0;            //锁存信号高电平 
    00B4 98C3      CBI	0x18,3
(0184)     _NOP(); 
    00B5 0000      NOP
(0185)     _NOP(); 
    00B6 0000      NOP
(0186) 	P_DS_1; 
    00B7 9AC1      SBI	0x18,1

⌨️ 快捷键说明

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