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

📄 ds12997.s

📁 本程序经调试好使
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module ds12997.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\wangqinbo\MYDOCU~1\avrc\ds12997.c
	.dbfunc e delay5ms _delay5ms fV
;              i -> R16
;              j -> R18
	.even
_delay5ms::
	.dbline -1
	.dbline 98
; /******************************************************/
; // AVR 执行时间:8MHZ ->0.125us  4MHZ->0.25us  //无串口,模拟总线最简版
; //               2MHZ->0.5us      *1MHZ->1us ,每句后延时2句
; //51  执行时间:11.0592MHZ->2.17us 
; //
; //
; /****************************************************/
; 
; #include <iom16v.h>        //2009-2-27-12-44 bf.1MHZ->2us
; #include <macros.h>
; 
; #define uchar unsigned char		//定义无符号字符为 uchar
; #define uint  unsigned int       //定义无符号整型
; 
; uchar y1,y2,y3,y4,y5,y6;
; 
; /**********************接口定义*********************************/
; //GND <--   MOT		   VCC  -->VCC
; //			.		   SQW
; //			.		   .
; //PA_0<-- 	AD0	       .     
; //PA_1<-- 	AD1		   .
; //PA_2<-- 	AD2        IRQ   -->PB_0
; //PA_3<-- 	AD3        REET	 -->VCC
; //PA_4<-- 	AD4		   DS	 -->PB_1
; //PA_5<-- 	AD5		   .
; //PA_6<-- 	AD6		   R/W	 -->PB_2
; //PA_7<-- 	AD7		   AS	 -->PB_3
; //		    GND		   CS    -->PB_4 
; /*********************引脚说明***********************************/
; //DS12887       16    器件
; //数据线       PA口    数据地址公用总线
; //DS_IRQ        PB0    时间中断     
; //DS_DS         PB1    数据选通
; //DS_RW    		PB2	   读写控制
; //DS_AS			PB3	   地址选通
; //DS_CS         PB4	   芯片片选
; //DS_MOT        GND    模式选择
; 
; /*******************数据地址定义*************************************/
; #define	DS12887_Second		0x00	//秒
; #define	DS12887_Minute		0x02	//分
; #define	DS12887_Hour		0x04	//时
; #define	DS12887_Week		0x06	//星期
; #define	DS12887_Day		    0x07	//日
; #define	DS12887_Month		0x08	//月
; #define	DS12887_Year		0x09	//年
; 
; //引脚电平定义
; #define P_DS_1 PORTB|=BIT(PB1)	  	//DS_DS为1
; #define P_DS_0 PORTB&=~BIT(PB1)		//DS_DS为0
; #define D_DS_1 DDRB |=BIT(PB1)      //设为输出
; 
; #define P_RW_1  PORTB|=BIT(PB2)	    //DS_RW为1
; #define P_RW_0  PORTB&=~BIT(PB2)	//DS_RW为0
; #define D_RW_1   DDRB |=BIT(PB2)    //设为输出
; 
; #define P_AS_1 PORTB|=BIT(PB3)		//DS_AS为1
; #define P_AS_0 PORTB&=~BIT(PB3)    	//DS_AS为0
; #define D_AS_1  DDRB |=BIT(PB3)     //设为输出
; 
; #define P_CS_1 PORTB|=BIT(PB4)     //DS_CS为1
; #define P_CS_0 PORTB&=~BIT(PB4)	   //DS_CS为0				
; #define D_CS_1  DDRB |=BIT(PB4)     //设为输出
; 
;  			
; //数据端口定义
; #define AD_DDR DDRA 			//AD(地址/数据服用线)的输入/输出控制
; #define AD_PORT PORTA			//AD(地址/数据服用线)的输出电平控制
; #define AD_PIN PINA			//AD(地址/数据服用线)的输入电平控制
; 
; #define s1us_NOP();  _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
; #define s2us_NOP();  s1us_NOP();s1us_NOP(); //延时等待2us
; //定义时间类型,结构体数据类型
; typedef struct _SYSTEMTIME_
; {
; 	unsigned  char Second;
; 	unsigned  char Minute;
; 	unsigned  char Hour;
; 	unsigned  char Week;
; 	unsigned  char Day;
; 	unsigned  char Month;
; 	unsigned  char Year;
; 	unsigned  char DateString[9];
; 	unsigned  char TimeString[9];
; }SYSTEMTIME;			
; 
; /***********************函数声明*****************************/
; void DS12887_Init(void);											//DS12887初始化
; void DS12887_Write( uchar Address,  uchar Value);		//DS12887指定地址写入数据
; uchar DS12887_Read(uchar Address);					//DS12887指定地址中读出数据	
; void DS12887_SetTime( uchar Address,  uchar Value);	//设置时间函数
; void DS12887_GetTime(SYSTEMTIME *Time);								//读出时间
; void delay_8nus(uchar n);
; 
; /*********************延时5000+0us 函数定义**********/
; void delay5ms(void)
; {
	.dbline 100
;     uchar i,j;
;     for(i=185;i>0;i--)
	ldi R16,185
	xjmp L5
L2:
	.dbline 101
	ldi R18,12
	xjmp L9
L6:
	.dbline 101
L7:
	.dbline 101
	dec R18
L9:
	.dbline 101
	clr R2
	cp R2,R18
	brlo L6
L3:
	.dbline 100
	dec R16
L5:
	.dbline 100
	clr R2
	cp R2,R16
	brlo L2
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbsym r j 18 c
	.dbend
	.dbfunc e delay_1ms _delay_1ms fV
;              i -> R16,R17
	.even
_delay_1ms::
	.dbline -1
	.dbline 105
;     for(j=12;j>0;j--);
; }
; /*****************延时1秒子函数*******************/
; void delay_1ms(void)
; {
	.dbline 107
;  uint i;
; for(i=1;i<(8*143-2);i++) //8为晶振频率
	ldi R16,1
	ldi R17,0
	xjmp L14
L11:
	.dbline 108
L12:
	.dbline 107
	subi R16,255  ; offset = 1
	sbci R17,255
L14:
	.dbline 107
	cpi R16,118
	ldi R30,4
	cpc R17,R30
	brlo L11
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e delay_nms _delay_nms fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_nms::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 112
; ;
; }
; /****************延时N毫秒子函数****************/
; void delay_nms(uint n)
; {
	.dbline 114
; uint i;
; for(i=0;i<n;i++)
	clr R20
	clr R21
	xjmp L19
L16:
	.dbline 115
	xcall _delay_1ms
L17:
	.dbline 114
	subi R20,255  ; offset = 1
	sbci R21,255
L19:
	.dbline 114
	cp R20,R22
	cpc R21,R23
	brlo L16
	.dbline -2
L15:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 22 i
	.dbend
	.dbfunc e delay_8nus _delay_8nus fV
;              i -> R22,R23
;              k -> R20,R21
;              n -> R16
	.even
_delay_8nus::
	xcall push_gset2
	.dbline -1
	.dbline 119
; delay_1ms();
; }
; /****************精确延时微妙级,8MHZ,0.25us/step***********/
; void delay_8nus(uchar n)
; {
	.dbline 121
;   uint i,k;
;   i=n;
	mov R22,R16
	clr R23
	.dbline 122
;   for(k=i;k>0;k--)
	movw R20,R22
	xjmp L24
L21:
	.dbline 123
	.dbline 124
	nop
	.dbline 125
L22:
	.dbline 122
	subi R20,1
	sbci R21,0
L24:
	.dbline 122
	cpi R20,0
	cpc R20,R21
	brne L21
X0:
	.dbline -2
L20:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 22 i
	.dbsym r k 20 i
	.dbsym r n 16 c
	.dbend
	.dbfunc e DS12887_Write _DS12887_Write fV
;          Value -> R18
;        Address -> R16
	.even
_DS12887_Write::
	.dbline -1
	.dbline 129
;   {
;    _NOP();
;     }
; }
; /*******DS12887指定地址写入数据 ,严格按照INTERL的时序,程序**********/
; void DS12887_Write( uchar Address, uchar Value)
; {
	.dbline 131
; 	
; 	P_AS_0; 
	cbi 0x18,3
	.dbline 132
;     _NOP(); 
	nop
	.dbline 133
;     _NOP();     
	nop
	.dbline 134
;     P_DS_1; 
	sbi 0x18,1
	.dbline 135
; 	_NOP(); 
	nop
	.dbline 136
;     _NOP();
	nop
	.dbline 137
;     P_RW_1;            //给出读信号 
	sbi 0x18,2
	.dbline 138
;     _NOP(); 
	nop
	.dbline 139
;     _NOP();    
	nop
	.dbline 140
;     P_AS_1;            //锁存信号高电平 
	sbi 0x18,3
	.dbline 141
;     _NOP(); 
	nop
	.dbline 142
;     _NOP(); 
	nop
	.dbline 143
;     AD_DDR = 0xFF;          //数据口设置为输出 
	ldi R24,255
	out 0x1a,R24
	.dbline 144
;     _NOP(); 
	nop
	.dbline 145
;     _NOP();
	nop
	.dbline 146
; 	_NOP();
	nop
	.dbline 147
; 	_NOP(); 
	nop
	.dbline 148
;     AD_PORT = Address;       //给出地址 
	out 0x1b,R16
	.dbline 149
;     _NOP(); 
	nop
	.dbline 150
;     _NOP();  
	nop
	.dbline 151
; 	_NOP(); 
	nop
	.dbline 152
;     _NOP();
	nop
	.dbline 153
; 	_NOP();
	nop
	.dbline 154
; 	_NOP();                     // 
	nop
	.dbline 155
;     P_AS_0;            //锁存信号低电平 
	cbi 0x18,3
	.dbline 156
;     _NOP(); 
	nop
	.dbline 157
;     _NOP();  
	nop
	.dbline 158
;     P_RW_0;            //给出写信号 
	cbi 0x18,2
	.dbline 159
;     _NOP(); 
	nop
	.dbline 160
;     _NOP(); 
	nop
	.dbline 161
;     _NOP(); 
	nop
	.dbline 162
;     AD_PORT = Value;  //写出数据 
	out 0x1b,R18
	.dbline 163
;     _NOP(); 
	nop
	.dbline 164
;     _NOP(); 
	nop
	.dbline 165
;     _NOP(); 
	nop
	.dbline 166
;     _NOP();
	nop
	.dbline 167
; 	_NOP();
	nop
	.dbline 168
; 	_NOP();
	nop
	.dbline 169
; 	_NOP();
	nop
	.dbline 170
; 	_NOP(); 
	nop
	.dbline 171
;     P_RW_1;            //给出读信号 
	sbi 0x18,2
	.dbline 172
;     _NOP(); 
	nop
	.dbline 173
;     _NOP(); 
	nop
	.dbline 174
;     _NOP(); 
	nop
	.dbline 175
;     P_AS_1;            //片选信号高电平 
	sbi 0x18,3
	.dbline 176
;     _NOP(); 
	nop
	.dbline 177
;     _NOP();  
	nop
	.dbline -2
L25:
	.dbline 0 ; func end
	ret
	.dbsym r Value 18 c
	.dbsym r Address 16 c
	.dbend
	.dbfunc e DS12887_Read _DS12887_Read fc
;           temp -> R20
;        Address -> R16
	.even
_DS12887_Read::
	xcall push_gset1
	.dbline -1
	.dbline 181
; }
; /*********DS12887指定地址中读出数据,严格按照INTERL的时序!!!!!********/
; uchar DS12887_Read( uchar Address)
; {   
	.dbline 182
; 	 unsigned char temp = 0;     
	clr R20
	.dbline 183
;     P_AS_0;            //锁存信号高电平 
	cbi 0x18,3
	.dbline 184
;     _NOP(); 
	nop
	.dbline 185
;     _NOP(); 
	nop
	.dbline 186
; 	P_DS_1; 
	sbi 0x18,1
	.dbline 187
; 	_NOP(); 
	nop
	.dbline 188
;     _NOP();
	nop
	.dbline 189
;     P_RW_1;            //给出读信号    
	sbi 0x18,2
	.dbline 190

⌨️ 快捷键说明

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