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

📄 ds1305.lst

📁 DS1305程序代码,在网上很少,一般不容易找到.现上传一个给大家分享.
💻 LST
📖 第 1 页 / 共 4 页
字号:
    01E0 9546      LSR	R20
(0171)     if(in_ds1305_io()) data|=0x80; 
    01E1 9B9A      SBIS	0x13,2
    01E2 C001      RJMP	0x01E4
    01E3 6840      ORI	R20,0x80
(0172)     asm("nop"); 
    01E4 0000      NOP
(0173)     asm("nop"); 
    01E5 0000      NOP
(0174)     set_ds1305_sclk(); 
    01E6 9AA9      SBI	0x15,1
(0175)     asm("nop"); 
    01E7 0000      NOP
(0176)     asm("nop"); 
    01E8 0000      NOP
(0177)     clr_ds1305_sclk(); 
    01E9 98A9      CBI	0x15,1
(0178)     asm("nop"); 
    01EA 0000      NOP
(0179)     asm("nop"); 
    01EB 0000      NOP
    01EC 956A      DEC	R22
    01ED 2422      CLR	R2
    01EE 1626      CP	R2,R22
    01EF F380      BCS	0x01E0
(0180)   } 
(0181)   clr_ds1305_rst(); 
    01F0 98A8      CBI	0x15,0
(0182)   asm("nop"); 
    01F1 0000      NOP
(0183)   asm("nop"); 
    01F2 0000      NOP
(0184)   return(data); 
    01F3 2F04      MOV	R16,R20
    01F4 D321      RCALL	pop_gset2
    01F5 9508      RET
(0185) } 
(0186) unsigned char check_ds1305(void) 
(0187) { 
(0188)   ds1305_write(ds1305_control_reg,0x40); 
_check_ds1305:
    01F6 E420      LDI	R18,0x40
    01F7 E00F      LDI	R16,0xF
    01F8 DF84      RCALL	_ds1305_write
(0189)   if(ds1305_read(ds1305_control_reg)==0x40) return 1; 
    01F9 E00F      LDI	R16,0xF
    01FA DFBF      RCALL	_ds1305_read
    01FB 3400      CPI	R16,0x40
    01FC F411      BNE	0x01FF
    01FD E001      LDI	R16,1
    01FE C001      RJMP	0x0200
(0190)   return 0; 
    01FF 2700      CLR	R16
    0200 9508      RET
(0191) } 
(0192) void ds1305_read_time(void) 
(0193) { 
(0194)   year=ds1305_read(ds1305_year_reg);   //年
_ds1305_read_time:
    0201 E006      LDI	R16,6
    0202 DFB7      RCALL	_ds1305_read
    0203 2E20      MOV	R2,R16
    0204 2433      CLR	R3
    0205 9230014F  STS	year+1,R3
    0207 9220014E  STS	year,R2
(0195)   year=((year&0xf0)>>4)*10+(year&0x0F)+2000; 
    0209 0191      MOVW	R18,R2
    020A 7F20      ANDI	R18,0xF0
    020B 7030      ANDI	R19,0
    020C 9536      LSR	R19
    020D 9527      ROR	R18
    020E 9536      LSR	R19
    020F 9527      ROR	R18
    0210 9536      LSR	R19
    0211 9527      ROR	R18
    0212 9536      LSR	R19
    0213 9527      ROR	R18
    0214 E00A      LDI	R16,0xA
    0215 E010      LDI	R17,0
    0216 D2EF      RCALL	empy16s
    0217 9180014E  LDS	R24,year
    0219 9190014F  LDS	R25,year+1
    021B 708F      ANDI	R24,0xF
    021C 7090      ANDI	R25,0
    021D 0118      MOVW	R2,R16
    021E 0E28      ADD	R2,R24
    021F 1E39      ADC	R3,R25
    0220 01C1      MOVW	R24,R2
    0221 5380      SUBI	R24,0x30
    0222 4F98      SBCI	R25,0xF8
    0223 9390014F  STS	year+1,R25
    0225 9380014E  STS	year,R24
(0196)   month=ds1305_read(ds1305_month_reg);//月 
    0227 E005      LDI	R16,5
    0228 DF91      RCALL	_ds1305_read
    0229 93000155  STS	month,R16
(0197)   month=((month&0xf0)>>4)*10+(month&0x0F);
    022B 2F80      MOV	R24,R16
    022C 7F80      ANDI	R24,0xF0
    022D 9582      SWAP	R24
    022E 708F      ANDI	R24,0xF
    022F E09A      LDI	R25,0xA
    0230 9F98      MUL	R25,R24
    0231 2F80      MOV	R24,R16
    0232 708F      ANDI	R24,0xF
    0233 2C20      MOV	R2,R0
    0234 0E28      ADD	R2,R24
    0235 92200155  STS	month,R2
(0198)   day=ds1305_read(ds1305_date_reg);   //日
    0237 E004      LDI	R16,4
    0238 DF81      RCALL	_ds1305_read
    0239 93000153  STS	day,R16
(0199)   day=((day&0xf0)>>4)*10+(day&0x0F); 
    023B 2F80      MOV	R24,R16
    023C 7F80      ANDI	R24,0xF0
    023D 9582      SWAP	R24
    023E 708F      ANDI	R24,0xF
    023F E09A      LDI	R25,0xA
    0240 9F98      MUL	R25,R24
    0241 2F80      MOV	R24,R16
    0242 708F      ANDI	R24,0xF
    0243 2C20      MOV	R2,R0
    0244 0E28      ADD	R2,R24
    0245 92200153  STS	day,R2
(0200)   week=ds1305_read(ds1305_day_reg);   //周 
    0247 E003      LDI	R16,3
    0248 DF71      RCALL	_ds1305_read
    0249 93000154  STS	week,R16
(0201)   week=((week&0xf0)>>4)*10+(week&0x0F);
    024B 2F80      MOV	R24,R16
    024C 7F80      ANDI	R24,0xF0
    024D 9582      SWAP	R24
    024E 708F      ANDI	R24,0xF
    024F E09A      LDI	R25,0xA
    0250 9F98      MUL	R25,R24
    0251 2F80      MOV	R24,R16
    0252 708F      ANDI	R24,0xF
    0253 2C20      MOV	R2,R0
    0254 0E28      ADD	R2,R24
    0255 92200154  STS	week,R2
(0202)   hour=ds1305_read(ds1305_hr_reg);   //时 
    0257 E002      LDI	R16,2
    0258 DF61      RCALL	_ds1305_read
    0259 93000152  STS	hour,R16
(0203)   hour=((hour&0xf0)>>4)*10+(hour&0x0F);
    025B 2F80      MOV	R24,R16
    025C 7F80      ANDI	R24,0xF0
    025D 9582      SWAP	R24
    025E 708F      ANDI	R24,0xF
    025F E09A      LDI	R25,0xA
    0260 9F98      MUL	R25,R24
    0261 2F80      MOV	R24,R16
    0262 708F      ANDI	R24,0xF
    0263 2C20      MOV	R2,R0
    0264 0E28      ADD	R2,R24
    0265 92200152  STS	hour,R2
(0204)   minute=ds1305_read(ds1305_min_reg);   //分 
    0267 E001      LDI	R16,1
    0268 DF51      RCALL	_ds1305_read
    0269 93000151  STS	minute,R16
(0205)   minute=((minute&0xf0)>>4)*10+(minute&0x0F);
    026B 2F80      MOV	R24,R16
    026C 7F80      ANDI	R24,0xF0
    026D 9582      SWAP	R24
    026E 708F      ANDI	R24,0xF
    026F E09A      LDI	R25,0xA
    0270 9F98      MUL	R25,R24
    0271 2F80      MOV	R24,R16
    0272 708F      ANDI	R24,0xF
    0273 2C20      MOV	R2,R0
    0274 0E28      ADD	R2,R24
    0275 92200151  STS	minute,R2
(0206)   second=ds1305_read(ds1305_sec_reg);   //秒 
    0277 2700      CLR	R16
    0278 DF41      RCALL	_ds1305_read
    0279 93000150  STS	second,R16
(0207)   second=((second&0xf0)>>4)*10+(second&0x0F);
    027B 2F80      MOV	R24,R16
    027C 7F80      ANDI	R24,0xF0
    027D 9582      SWAP	R24
    027E 708F      ANDI	R24,0xF
    027F E09A      LDI	R25,0xA
    0280 9F98      MUL	R25,R24
    0281 2F80      MOV	R24,R16
    0282 708F      ANDI	R24,0xF
    0283 2C20      MOV	R2,R0
    0284 0E28      ADD	R2,R24
    0285 92200150  STS	second,R2
    0287 9508      RET
(0208) } 
(0209) void ds1305_write_time(void) 
(0210) { 
(0211)   ds1305_write(ds1305_control_reg,0x80);   //停止振荡器,关闭写保护,关闭闹铃中断       
_ds1305_write_time:
    0288 E820      LDI	R18,0x80
    0289 E00F      LDI	R16,0xF
    028A DEF2      RCALL	_ds1305_write
(0212)   ds1305_write(ds1305_charger_reg,0xa9);   //涓流充电 
    028B EA29      LDI	R18,0xA9
    028C E101      LDI	R16,0x11
    028D DEEF      RCALL	_ds1305_write
(0213)   //ds1305_write(ds1305_year_reg,year);     //年 
(0214)   //ds1305_write(ds1305_month_reg,month);   //月 
(0215)   //ds1305_write(ds1305_date_reg,day);     //日 
(0216)   //ds1305_write(ds1305_day_reg,week);     //周 
(0217)   //ds1305_write(ds1305_hr_reg,hour);     //时 
(0218)   minute=((minute/10)<<4)+minute%10; 
    028E E01A      LDI	R17,0xA
    028F 91000151  LDS	R16,minute
    0291 D25C      RCALL	mod8u
    0292 2E20      MOV	R2,R16
    0293 E01A      LDI	R17,0xA
    0294 91000151  LDS	R16,minute
    0296 D259      RCALL	div8u
    0297 2F80      MOV	R24,R16
    0298 708F      ANDI	R24,0xF
    0299 9582      SWAP	R24
    029A 0D82      ADD	R24,R2
    029B 93800151  STS	minute,R24
(0219)   ds1305_write(ds1305_min_reg,minute);   //分
    029D 2F28      MOV	R18,R24
    029E E001      LDI	R16,1
    029F DEDD      RCALL	_ds1305_write
(0220)   second=((second/10)<<4)+second%10; 
    02A0 E01A      LDI	R17,0xA
    02A1 91000150  LDS	R16,second
    02A3 D24A      RCALL	mod8u
    02A4 2E20      MOV	R2,R16
    02A5 E01A      LDI	R17,0xA
    02A6 91000150  LDS	R16,second
    02A8 D247      RCALL	div8u
    02A9 2F80      MOV	R24,R16
    02AA 708F      ANDI	R24,0xF
    02AB 9582      SWAP	R24
    02AC 0D82      ADD	R24,R2
    02AD 93800150  STS	second,R24
(0221)   ds1305_write(ds1305_sec_reg,second);   //秒   
    02AF 2F28      MOV	R18,R24
    02B0 2700      CLR	R16
    02B1 DECB      RCALL	_ds1305_write
(0222)   ds1305_write(ds1305_control_reg,0x41);   //打开写保护 
    02B2 E421      LDI	R18,0x41
    02B3 E00F      LDI	R16,0xF
    02B4 DEC8      RCALL	_ds1305_write
    02B5 9508      RET
(0223) }
(0224) 
(0225) void ds1305_init(void)
(0226) {
(0227)   ds1305_write(ds1305_control_reg,0x80);   //停止振荡器,关闭写保护,关闭闹铃中断       
_ds1305_init:
    02B6 E820      LDI	R18,0x80
    02B7 E00F      LDI	R16,0xF
    02B8 DEC4      RCALL	_ds1305_write
(0228)   ds1305_write(ds1305_charger_reg,0xa9);   //涓流充电 
    02B9 EA29      LDI	R18,0xA9
    02BA E101      LDI	R16,0x11
    02BB DEC1      RCALL	_ds1305_write
(0229)   ds1305_write(ds1305_year_reg,0x05);     //年 
    02BC E025      LDI	R18,5
    02BD E006      LDI	R16,6
    02BE DEBE      RCALL	_ds1305_write
(0230)   ds1305_write(ds1305_month_reg,0x12);   //月 
    02BF E122      LDI	R18,0x12
    02C0 E005      LDI	R16,5
    02C1 DEBB      RCALL	_ds1305_write
(0231)   ds1305_write(ds1305_date_reg,0x23);     //日 
    02C2 E223      LDI	R18,0x23
    02C3 E004      LDI	R16,4
    02C4 DEB8      RCALL	_ds1305_write
(0232)   ds1305_write(ds1305_day_reg,0x05);     //周 
    02C5 E025      LDI	R18,5
    02C6 E003      LDI	R16,3
    02C7 DEB5      RCALL	_ds1305_write
(0233)   ds1305_write(ds1305_hr_reg,0x10);     //时 
    02C8 E120      LDI	R18,0x10
    02C9 E002      LDI	R16,2
    02CA DEB2      RCALL	_ds1305_write
(0234)   ds1305_write(ds1305_min_reg,0x56);   //分 
    02CB E526      LDI	R18,0x56
    02CC E001      LDI	R16,1
    02CD DEAF      RCALL	_ds1305_write
(0235)   ds1305_write(ds1305_sec_reg,0x00);   //秒
    02CE 2722      CLR	R18
    02CF 2700      CLR	R16
    02D0 DEAC      RCALL	_ds1305_write
(0236)   ds1305_write(alarm0_sec_reg,0x20);  
    02D1 E220      LDI	R18,0x20
    02D2 E007      LDI	R16,7
    02D3 DEA9      RCALL	_ds1305_write
(0237)   ds1305_write(alarm0_min_reg,0x80); 
    02D4 E820      LDI	R18,0x80
    02D5 E008      LDI	R16,0x8
    02D6 DEA6      RCALL	_ds1305_write
(0238)   ds1305_write(alarm0_hr_reg,0x80); 
    02D7 E820      LDI	R18,0x80
    02D8 E009      LDI	R16,0x9
    02D9 DEA3      RCALL	_ds1305_write
(0239)   ds1305_write(alarm0_day_reg,0x80);  
    02DA E820      LDI	R18,0x80
    02DB E00A      LDI	R16,0xA
    02DC DEA0      RCALL	_ds1305_write
(0240)   ds1305_write(ds1305_control_reg,45);   //打开写保护 
    02DD E22D      LDI	R18,0x2D
    02DE E00F      LDI	R16,0xF
    02DF DE9D      RCALL	_ds1305_write
    02E0 9508      RET
(0241) }
(0242) void delay_1us(void)//1u延时函数
(0243) {
(0244)   asm("nop"); 
_delay_1us:
    02E1 0000      NOP
    02E2 9508      RET
(0245) }
(0246) 
(0247) void delay_1ms(void)//1ms延时函数
(0248) {
(0249)   unsigned int i;
(0250)   for (i=0;i<1034;i++)
_delay_1ms:
  i                    --> R16
    02E3 2700      CLR	R16
    02E4 2711      CLR	R17
    02E5 C002      RJMP	0x02E8
    02E6 5F0F      SUBI	R16,0xFF
    02E7 4F1F      SBCI	R17,0xFF
    02E8 300A      CPI	R16,0xA
    02E9 E0E4      LDI	R30,4
    02EA 071E      CPC	R17,R30
    02EB F3D0      BCS	0x02E6
    02EC 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    02ED D234      RCALL	push_gset2
    02EE 01B8      MOVW	R22,R16
(0251)   {
(0252)   } 
(0253) }
(0254) 
(0255) void delay_nus(unsigned int n)//nus延时函数
(0256) {
(0257)   unsigned int i;
(0258)   for (i=0;i<n;i++)//执行n次1微秒延时
    02EF 2744      CLR	R20
    02F0 2755      CLR	R21
    02F1 C003      RJMP	0x02F5
(0259)   delay_1us();
    02F2 DFEE      RCALL	_delay_1us
    02F3 5F4F      SUBI	R20,0xFF
    02F4 4F5F      SBCI	R21,0xFF
    02F5 1746      CP	R20,R22
    02F6 0757      CPC	R21,R23
    02F7 F3D0      BCS	0x02F2
    02F8 D21D      RCALL	pop_gset2
    02F9 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    02FA D227      RCALL	push_gset2
    02FB 01B8      MOVW	R22,R16
(0260) }
(0261) 
(0262) void delay_nms(unsigned int n)//延时n毫秒
(0263) {
(0264)   unsigned int i;
(0265)   for (i=0;i<n;i++)//执行n次1毫秒延时
    02FC 2744      CLR	R20
    02FD 2755      CLR	R21
    02FE C003      RJMP	0x0302
(0266)   delay_1ms(); 
    02FF DFE3      RCALL	_delay_1ms
    0300 5F4F      SUBI	R20,0xFF
    0301 4F5F      SBCI	R21,0xFF
    0302 1746      CP	R20,R22
    0303 0757      CPC	R21,R23
    0304 F3D0      BCS	0x02FF
    0305 D210      RCALL	pop_gset2
    0306 9508      RET
(0267) }
(0268) 
(0269) void uart_init(void)
(0270) {
(0271) //UCSRB=(1<<RXEN)|(1<<TXEN); //允许发送和接收
(0272) UBRRL=(fosc/16/baud-1)%256; //设置波特率寄存器低位字节
_uart_init:
    0307 E28F      LDI	R24,0x2F
    0308 B989      OUT	0x09,R24
(0273) UBRRH=(fosc/16/baud-1)/256; //设置波特率寄存器高位字节
    0309 2422      CLR	R2
    030A BC20      OUT	0x20,R2
(0274) UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据+1位STOP位
    030B E886      LDI	R24,0x86
    030C BD80      OUT	0x20,R24
(0275) UCSRB=(1<<RXEN)|(1<<TXEN); //允许发送和接收
FILE: <library>
    030D E188      LDI	R24,0x18
    030E B98A      OUT	0x0A,R24
    030F 9508      RET
__print:
    0310 D19F      RCALL	push_arg4
    0311 D20A      RCALL	push_gset5
    0312 972A      SBIW	R28,0xA
    0313 2400      CLR	R0
    0314 2411      CLR	R1
    0315 821F      STD	Y+7,R1
    0316 820E      STD	Y+6,R0

⌨️ 快捷键说明

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