📄 rtc.lis
字号:
.module RTC.C
.area data(ram, con, rel)
0000 _Table::
0000 .blkb 2
.area idata
0000 3F06 .byte 63,6
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 5B4F .byte 91,'O
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 666D .byte 'f,'m
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 7D07 .byte 125,7
.area data(ram, con, rel)
0008 .blkb 2
.area idata
0008 7F6F .byte 127,'o
.area data(ram, con, rel)
000A .dbfile C:\DOCUME~1\Administrator\桌面\张军\PS2-ICC\RTC.C
000A .dbsym e Table _Table A[10:10]c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\张军\PS2-ICC\RTC.C
0000 .dbfunc e DelayMs _DelayMs fV
0000 ; j -> R20
0000 ; i -> R16,R17
.even
0000 _DelayMs::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 14
0002 ; #include <io8535v.h>
0002 ; #include <macros.h>
0002 ; #ifndef uchar
0002 ; #define uchar unsigned char
0002 ; #define uint unsigned int
0002 ; #endif
0002 ;
0002 ; #define SD2303 0x64 //SD2303器件IIC识别码
0002 ;
0002 ; uchar F_Flag;
0002 ; uchar Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
0002 ;
0002 ; void DelayMs(uint i) //0.25ms
0002 ; {uchar j;
0002 .dbline 15
0002 ; for(;i!=0;i--)
0002 07C0 rjmp L5
0004 L2:
0004 .dbline 16
0004 .dbline 16
0004 40ED ldi R20,208
0006 01C0 rjmp L9
0008 L6:
0008 .dbline 16
0008 .dbline 16
0008 .dbline 16
0008 L7:
0008 .dbline 16
0008 4A95 dec R20
000A L9:
000A .dbline 16
000A 4423 tst R20
000C E9F7 brne L6
000E .dbline 16
000E L3:
000E .dbline 15
000E 0150 subi R16,1
0010 1040 sbci R17,0
0012 L5:
0012 .dbline 15
0012 0030 cpi R16,0
0014 0107 cpc R16,R17
0016 B1F7 brne L2
0018 X0:
0018 .dbline -2
0018 .dbline 17
0018 ; {for(j=2000;j!=0;j--) {;}}
0018 ; }
0018 L1:
0018 00D0 rcall pop_gset1
001A .dbline 0 ; func end
001A 0895 ret
001C .dbsym r j 20 c
001C .dbsym r i 16 i
001C .dbend
001C .dbfunc e Display _Display fV
001C ; i -> R20
001C ; sel -> R22
001C ; p -> R10,R11
.even
001C _Display::
001C 00D0 rcall push_gset3
001E A02E mov R10,R16
0020 B12E mov R11,R17
0022 .dbline -1
0022 .dbline 20
0022 ;
0022 ; void Display(uchar *p) //间隔5ms显示
0022 ; {uchar i,sel=0x01;
0022 .dbline 20
0022 61E0 ldi R22,1
0024 .dbline 21
0024 ; for(i=0;i<4;i++)
0024 4427 clr R20
0026 17C0 rjmp L14
0028 L11:
0028 .dbline 22
0028 .dbline 22
0028 262E mov R2,R22
002A 2094 com R2
002C 28BA out 0x18,R2
002E .dbline 23
002E 80E0 ldi R24,<_Table
0030 90E0 ldi R25,>_Table
0032 EA2D mov R30,R10
0034 FB2D mov R31,R11
0036 E081 ldd R30,z+0
0038 FF27 clr R31
003A E80F add R30,R24
003C F91F adc R31,R25
003E 2080 ldd R2,z+0
0040 2BBA out 0x1b,R2
0042 .dbline 24
0042 8A2D mov R24,R10
0044 9B2D mov R25,R11
0046 0196 adiw R24,1
0048 A82E mov R10,R24
004A B92E mov R11,R25
004C .dbline 25
004C 04E1 ldi R16,20
004E 10E0 ldi R17,0
0050 D7DF rcall _DelayMs
0052 .dbline 26
0052 660F lsl R22
0054 .dbline 27
0054 L12:
0054 .dbline 21
0054 4395 inc R20
0056 L14:
0056 .dbline 21
0056 4430 cpi R20,4
0058 38F3 brlo L11
005A .dbline -2
005A .dbline 28
005A ; {PORTB=~sel;
005A ; PORTA=Table[*p];
005A ; p++;
005A ; DelayMs(20);
005A ; sel=sel<<1;
005A ; }
005A ; }
005A L10:
005A 00D0 rcall pop_gset3
005C .dbline 0 ; func end
005C 0895 ret
005E .dbsym r i 20 c
005E .dbsym r sel 22 c
005E .dbsym r p 10 pc
005E .dbend
005E .dbfunc e NOPNOP _NOPNOP fV
005E ; i -> R16
.even
005E _NOPNOP::
005E .dbline -1
005E .dbline 32
005E .dbline 32
005E 02C0 rjmp L19
0060 L16:
0060 .dbline 32
0060 0000 nop
0062 L17:
0062 .dbline 32
0062 0A95 dec R16
0064 L19:
0064 .dbline 32
0064 ;
0064 ;
0064 ; void NOPNOP(uchar i)
0064 ; {for(;i!=0;i--) NOP();}
0064 0023 tst R16
0066 E1F7 brne L16
0068 .dbline -2
0068 .dbline 32
0068 L15:
0068 .dbline 0 ; func end
0068 0895 ret
006A .dbsym r i 16 c
006A .dbend
006A .dbfunc e SetSCL _SetSCL fV
006A ; i -> R16
.even
006A _SetSCL::
006A .dbline -1
006A .dbline 36
006A ;
006A ; //sbit SCL=PC^0; //定义SD2303IIC时钟线
006A ; void SetSCL(uchar i)
006A ; {if(i==1) PORTC=PORTC|0x01;
006A .dbline 36
006A 0130 cpi R16,1
006C 11F4 brne L21
006E .dbline 36
006E A89A sbi 0x15,0
0070 03C0 rjmp L22
0072 L21:
0072 .dbline 37
0072 85B3 in R24,0x15
0074 8E7F andi R24,254
0076 85BB out 0x15,R24
0078 L22:
0078 .dbline -2
0078 .dbline 37
0078 ; else PORTC=PORTC&0xfe;}
0078 L20:
0078 .dbline 0 ; func end
0078 0895 ret
007A .dbsym r i 16 c
007A .dbend
007A .dbfunc e SetSDA _SetSDA fV
007A ; i -> R16
.even
007A _SetSDA::
007A .dbline -1
007A .dbline 41
007A ;
007A ; //sbit SDA=PC^1; //定义SD2303IIC数据线
007A ; void SetSDA(uchar i)
007A ; {if(i==1) PORTC=PORTC|0x02;
007A .dbline 41
007A 0130 cpi R16,1
007C 11F4 brne L24
007E .dbline 41
007E A99A sbi 0x15,1
0080 03C0 rjmp L25
0082 L24:
0082 .dbline 42
0082 85B3 in R24,0x15
0084 8D7F andi R24,253
0086 85BB out 0x15,R24
0088 L25:
0088 .dbline -2
0088 .dbline 42
0088 ; else PORTC=PORTC&0xfd;}
0088 L23:
0088 .dbline 0 ; func end
0088 0895 ret
008A .dbsym r i 16 c
008A .dbend
008A .dbfunc e Start _Start fV
.even
008A _Start::
008A .dbline -1
008A .dbline 48
008A ;
008A ; //sbit INTRB=PD^6; //定义SD2303中断线A
008A ; //sbit INTRA=P1^7; //定义SD2303中断线B
008A ;
008A ; void Start() //IIC总线开始
008A ; {SetSDA(1);//SDA=1; //条件:SCL高电平时SDA的下降沿
008A .dbline 48
008A 01E0 ldi R16,1
008C F6DF rcall _SetSDA
008E .dbline 49
008E ; SetSCL(1);//SCL=1;
008E 01E0 ldi R16,1
0090 ECDF rcall _SetSCL
0092 .dbline 50
0092 ; NOPNOP(50);//while(SCL==0){;} //等待时钟信号变成高电平以确保总线开始
0092 02E3 ldi R16,50
0094 E4DF rcall _NOPNOP
0096 .dbline 53
0096 ; //_nop_();
0096 ; //_nop_();
0096 ; SetSDA(0);//SDA=0;
0096 0027 clr R16
0098 F0DF rcall _SetSDA
009A .dbline 54
009A ; NOPNOP(50);
009A 02E3 ldi R16,50
009C E0DF rcall _NOPNOP
009E .dbline 59
009E ; //_nop_();
009E ; //_nop_();
009E ; //_nop_();
009E ; //_nop_();
009E ; SetSCL(0);// SCL=0; //拉低时钟信号线
009E 0027 clr R16
00A0 .dbline -2
00A0 .dbline 60
00A0 ; }
00A0 L26:
00A0 .dbline 0 ; func end
00A0 E4CF rjmp _SetSCL
00A2 .dbend
00A2 .dbfunc e Stop _Stop fV
.even
00A2 _Stop::
00A2 .dbline -1
00A2 .dbline 63
00A2 ;
00A2 ; void Stop() //IIC总线结束
00A2 ; {SetSDA(0);//SDA=0; //条件:SCL为高电平时SDA的上升沿
00A2 .dbline 63
00A2 0027 clr R16
00A4 EADF rcall _SetSDA
00A6 .dbline 64
00A6 ; SetSCL(1);//SCL=1;
00A6 01E0 ldi R16,1
00A8 E0DF rcall _SetSCL
00AA .dbline 65
00AA ; NOPNOP(50);//while(SCL==0){;} //等待时钟信号变成低电平以确保总线结束
00AA 02E3 ldi R16,50
00AC D8DF rcall _NOPNOP
00AE .dbline 68
00AE ; // _nop_();
00AE ; // _nop_();
00AE ; SetSDA(1);//SDA=1;
00AE 01E0 ldi R16,1
00B0 E4DF rcall _SetSDA
00B2 .dbline 69
00B2 ; NOPNOP(50);
00B2 02E3 ldi R16,50
00B4 D4DF rcall _NOPNOP
00B6 .dbline 74
00B6 ; //_nop_();
00B6 ; //_nop_();
00B6 ; //_nop_();
00B6 ; //_nop_();
00B6 ; SetSCL(0);//SCL=0;
00B6 0027 clr R16
00B8 .dbline -2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -