📄 ds1302.lis
字号:
.module ds1302.c
.area text(rom, con, rel)
0000 .dbfile D:\时钟芯片\1302\1302-162\ds1302.c
0000 .dbfunc e delay _delay fV
0000 ; a -> R20
0000 ; n -> R16
.even
0000 _delay::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 9
0002 ;
0002 ; #include <io8515v.h>
0002 ; #include <macros.h>
0002 ; #include <162-1302.h>
0002 ; /************************************************
0002 ; 延时程序
0002 ; ************************************************/
0002 ; void delay(uchar n)
0002 ; {
0002 .dbline 11
0002 ; uchar a;
0002 ; for(a=0;a<n;a++)
0002 4427 clr R20
0004 01C0 rjmp L5
0006 L2:
0006 .dbline 12
0006 L3:
0006 .dbline 11
0006 4395 inc R20
0008 L5:
0008 .dbline 11
0008 4017 cp R20,R16
000A E8F3 brlo L2
000C .dbline -2
000C L1:
000C 00D0 rcall pop_gset1
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbsym r a 20 c
0010 .dbsym r n 16 c
0010 .dbend
0010 .dbfunc e write_data _write_data fV
0010 ; temp -> R20
0010 ; i -> R22
0010 ; data -> R10
0010 ; addr -> R22
.even
0010 _write_data::
0010 00D0 rcall push_gset3
0012 A22E mov R10,R18
0014 602F mov R22,R16
0016 .dbline -1
0016 .dbline 18
0016 ; ;
0016 ; }
0016 ; /****************************************************
0016 ; 写一个字节
0016 ; ****************************************************/
0016 ; void write_data(uchar addr,uchar data)
0016 ; {
0016 .dbline 20
0016 ; unsigned char i,temp;
0016 ; T_DDR|=T_IO;
0016 A69A sbi 0x14,6
0018 .dbline 21
0018 ; T_PORT&=~T_RST;
0018 AF98 cbi 0x15,7
001A .dbline 22
001A ; T_PORT&=~T_CLK;
001A AD98 cbi 0x15,5
001C .dbline 23
001C ; asm("nop");
001C 0000 nop
001E .dbline 24
001E ; asm("nop");
001E 0000 nop
0020 .dbline 25
0020 ; asm("nop");
0020 0000 nop
0022 .dbline 26
0022 ; asm("nop");
0022 0000 nop
0024 .dbline 27
0024 ; T_PORT|=T_RST; //时钟信号低时拉高RST初始化
0024 AF9A sbi 0x15,7
0026 .dbline 28
0026 ; temp=addr;
0026 462F mov R20,R22
0028 .dbline 29
0028 ; for(i=0;i<8;i++)
0028 6627 clr R22
002A 0FC0 rjmp L10
002C L7:
002C .dbline 30
002C ; {
002C .dbline 31
002C ; if(temp&(1<<i))
002C 01E0 ldi R16,1
002E 162F mov R17,R22
0030 00D0 rcall lsl8
0032 242E mov R2,R20
0034 2022 and R2,R16
0036 11F0 breq L11
0038 .dbline 32
0038 ; T_PORT |=T_IO ;
0038 AE9A sbi 0x15,6
003A 01C0 rjmp L12
003C L11:
003C .dbline 34
003C ; else
003C ; T_PORT &=~T_IO ;
003C AE98 cbi 0x15,6
003E L12:
003E .dbline 35
003E 0000 nop
0040 .dbline 36
0040 0000 nop
0042 .dbline 37
0042 AD9A sbi 0x15,5
0044 .dbline 38
0044 0000 nop
0046 .dbline 39
0046 AD98 cbi 0x15,5
0048 .dbline 40
0048 L8:
0048 .dbline 29
0048 6395 inc R22
004A L10:
004A .dbline 29
004A 6830 cpi R22,8
004C 78F3 brlo L7
004E .dbline 41
004E ; asm("nop");
004E ; asm("nop");
004E ; T_PORT |=T_CLK; //时钟上升沿写入数据
004E ; asm("nop");
004E ; T_PORT &=~T_CLK; //时钟拉低电平
004E ; }
004E ; temp=data;
004E 4A2D mov R20,R10
0050 .dbline 42
0050 ; for(i=0;i<8;i++)
0050 6627 clr R22
0052 0FC0 rjmp L16
0054 L13:
0054 .dbline 43
0054 ; {
0054 .dbline 44
0054 ; if(temp&(1<<i))
0054 01E0 ldi R16,1
0056 162F mov R17,R22
0058 00D0 rcall lsl8
005A 242E mov R2,R20
005C 2022 and R2,R16
005E 11F0 breq L17
0060 .dbline 45
0060 ; T_PORT |=T_IO ;
0060 AE9A sbi 0x15,6
0062 01C0 rjmp L18
0064 L17:
0064 .dbline 47
0064 ; else
0064 ; T_PORT &=~T_IO ;
0064 AE98 cbi 0x15,6
0066 L18:
0066 .dbline 48
0066 0000 nop
0068 .dbline 49
0068 0000 nop
006A .dbline 50
006A AD9A sbi 0x15,5
006C .dbline 51
006C 0000 nop
006E .dbline 52
006E AD98 cbi 0x15,5
0070 .dbline 53
0070 L14:
0070 .dbline 42
0070 6395 inc R22
0072 L16:
0072 .dbline 42
0072 6830 cpi R22,8
0074 78F3 brlo L13
0076 .dbline 54
0076 ; asm("nop");
0076 ; asm("nop");
0076 ; T_PORT |=T_CLK; //时钟上升沿写入数据
0076 ; asm("nop");
0076 ; T_PORT &=~T_CLK; //时钟拉低电平
0076 ; }
0076 ; T_PORT&=~T_RST; //禁止DS1302
0076 AF98 cbi 0x15,7
0078 .dbline -2
0078 L6:
0078 00D0 rcall pop_gset3
007A .dbline 0 ; func end
007A 0895 ret
007C .dbsym r temp 20 c
007C .dbsym r i 22 c
007C .dbsym r data 10 c
007C .dbsym r addr 22 c
007C .dbend
007C .dbfunc e read_data _read_data fc
007C ; k -> R20
007C ; temp -> R22
007C ; i -> R10
007C ; addr -> R20
.even
007C _read_data::
007C 00D0 rcall push_gset3
007E 402F mov R20,R16
0080 .dbline -1
0080 .dbline 61
0080 ; }
0080 ;
0080 ; /***************************************************
0080 ; 读一个字节
0080 ; ***************************************************/
0080 ; uchar read_data(uchar addr)
0080 ; {
0080 .dbline 63
0080 ; uchar i,temp,k;
0080 ; temp=0;
0080 6627 clr R22
0082 .dbline 64
0082 ; T_DDR|=T_IO;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -