📄 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 .blkb 2
.area idata
000A 3876 .byte 56,'v
.area data(ram, con, rel)
000C .dbfile E:\张军\AVR\光盘内容\实例源文件\第十章程序\RTC.C
000C .dbsym e Table _Table A[12:12]c
000C _Data::
000C .blkb 2
.area idata
000C 0000 .byte 0,0
.area data(ram, con, rel)
000E .dbfile E:\张军\AVR\光盘内容\实例源文件\第十章程序\RTC.C
000E .blkb 2
.area idata
000E 0000 .byte 0,0
.area data(ram, con, rel)
0010 .dbfile E:\张军\AVR\光盘内容\实例源文件\第十章程序\RTC.C
0010 .dbsym e Data _Data A[4:4]c
.area text(rom, con, rel)
0000 .dbfile E:\张军\AVR\光盘内容\实例源文件\第十章程序\RTC.C
0000 .dbfunc e DelayMs _DelayMs fV
0000 ; j -> R20
0000 ; i -> R16
.even
0000 _DelayMs::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 18
0002 ; //***************************FileName:RTC.C************************//
0002 ; //***************************ICCAVR V6.30编译**********************//
0002 ;
0002 ; #include <io8535v.h> //寄存器定义文件
0002 ; #include <macros.h> //使用到宏
0002 ; #define uchar unsigned char //数据类型定义
0002 ; #define uint unsigned char //数据类型定义
0002 ; #define SD2303 0x64 //SD2303器件IIC识别码
0002 ;
0002 ;
0002 ; uchar Table[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x38,0x76};
0002 ; //显示数据表 0 1 2 3 4 5 6 7 8 9 L H
0002 ; uchar Data[4]={0,0,0,0}; //DS1722
0002 ; uchar Enter_Flag; //确定
0002 ; uchar F_Flag; //数据应答标志
0002 ;
0002 ; void DelayMs(uint i) //延时函数1
0002 ; {uchar j;
0002 .dbline 19
0002 ; for(;i!=0;i--)
0002 06C0 rjmp L5
0004 L2:
0004 .dbline 20
0004 .dbline 20
0004 40ED ldi R20,208
0006 01C0 rjmp L9
0008 L6:
0008 .dbline 20
0008 .dbline 20
0008 .dbline 20
0008 L7:
0008 .dbline 20
0008 4A95 dec R20
000A L9:
000A .dbline 20
000A 4423 tst R20
000C E9F7 brne L6
000E .dbline 20
000E L3:
000E .dbline 19
000E 0A95 dec R16
0010 L5:
0010 .dbline 19
0010 0023 tst R16
0012 C1F7 brne L2
0014 .dbline -2
0014 .dbline 21
0014 ; {for(j=2000;j!=0;j--) {;}}
0014 ; }
0014 L1:
0014 00D0 rcall pop_gset1
0016 .dbline 0 ; func end
0016 0895 ret
0018 .dbsym r j 20 c
0018 .dbsym r i 16 c
0018 .dbend
0018 .dbfunc e Display _Display fV
0018 ; sel -> R20
0018 ; i -> R22
0018 ; p -> R10,R11
.even
0018 _Display::
0018 00D0 rcall push_gset3
001A A02E mov R10,R16
001C B12E mov R11,R17
001E .dbline -1
001E .dbline 24
001E ;
001E ; void Display(uchar *p) //显示函数
001E ; {uchar i,sel=0x00;
001E .dbline 24
001E 4427 clr R20
0020 .dbline 25
0020 ; for(i=0;i<16;i++)
0020 6627 clr R22
0022 11C0 rjmp L14
0024 L11:
0024 .dbline 26
0024 .dbline 26
0024 45BB out 0x15,R20
0026 .dbline 27
0026 E62F mov R30,R22
0028 FF27 clr R31
002A EA0D add R30,R10
002C FB1D adc R31,R11
002E E081 ldd R30,z+0
0030 FF27 clr R31
0032 80E0 ldi R24,<_Table
0034 90E0 ldi R25,>_Table
0036 E80F add R30,R24
0038 F91F adc R31,R25
003A 2080 ldd R2,z+0
003C 2BBA out 0x1b,R2
003E .dbline 28
003E 0AE0 ldi R16,10
0040 DFDF rcall _DelayMs
0042 .dbline 29
0042 440F lsl R20
0044 .dbline 30
0044 L12:
0044 .dbline 25
0044 6395 inc R22
0046 L14:
0046 .dbline 25
0046 6031 cpi R22,16
0048 68F3 brlo L11
004A .dbline -2
004A .dbline 31
004A ; {PORTC=sel;
004A ; PORTA=Table[p[i]];
004A ; DelayMs(10);
004A ; sel=sel<<1;
004A ; }
004A ; }
004A L10:
004A 00D0 rcall pop_gset3
004C .dbline 0 ; func end
004C 0895 ret
004E .dbsym r sel 20 c
004E .dbsym r i 22 c
004E .dbsym r p 10 pc
004E .dbend
004E .dbfunc e NOPNOP _NOPNOP fV
004E ; i -> R16
.even
004E _NOPNOP::
004E .dbline -1
004E .dbline 35
004E .dbline 35
004E 02C0 rjmp L19
0050 L16:
0050 .dbline 35
0050 0000 nop
0052 L17:
0052 .dbline 35
0052 0A95 dec R16
0054 L19:
0054 .dbline 35
0054 ;
0054 ;
0054 ; void NOPNOP(uchar i) //延时函数2
0054 ; {for(;i!=0;i--) NOP();}
0054 0023 tst R16
0056 E1F7 brne L16
0058 .dbline -2
0058 .dbline 35
0058 L15:
0058 .dbline 0 ; func end
0058 0895 ret
005A .dbsym r i 16 c
005A .dbend
005A .dbfunc e SetSCL _SetSCL fV
005A ; i -> R16
.even
005A _SetSCL::
005A .dbline -1
005A .dbline 38
005A ;
005A ; void SetSCL(uchar i) //IIC时钟线SCL设置
005A ; {if(i==1) PORTB=PORTB|0x01;
005A .dbline 38
005A 0130 cpi R16,1
005C 11F4 brne L21
005E .dbline 38
005E C09A sbi 0x18,0
0060 03C0 rjmp L22
0062 L21:
0062 .dbline 39
0062 88B3 in R24,0x18
0064 8E7F andi R24,254
0066 88BB out 0x18,R24
0068 L22:
0068 .dbline -2
0068 .dbline 39
0068 ; else PORTB=PORTB&0xFE;}
0068 L20:
0068 .dbline 0 ; func end
0068 0895 ret
006A .dbsym r i 16 c
006A .dbend
006A .dbfunc e SetSDA _SetSDA fV
006A ; i -> R16
.even
006A _SetSDA::
006A .dbline -1
006A .dbline 42
006A ;
006A ; void SetSDA(uchar i) //IIC数据线SDA设置
006A ; {if(i==1) PORTB=PORTB|0x02;
006A .dbline 42
006A 0130 cpi R16,1
006C 11F4 brne L24
006E .dbline 42
006E C19A sbi 0x18,1
0070 03C0 rjmp L25
0072 L24:
0072 .dbline 43
0072 88B3 in R24,0x18
0074 8D7F andi R24,253
0076 88BB out 0x18,R24
0078 L25:
0078 .dbline -2
0078 .dbline 43
0078 ; else PORTB=PORTB&0xFD;}
0078 L23:
0078 .dbline 0 ; func end
0078 0895 ret
007A .dbsym r i 16 c
007A .dbend
007A .dbfunc e Start _Start fV
.even
007A _Start::
007A .dbline -1
007A .dbline 51
007A ;
007A ; //SCL=PB^0; SD2303时钟线
007A ; //SDA=PB^1; SD2303数据线
007A ; //INTRB=PB^3; SD2303中断线A
007A ; //INTRA=PB^2; SD2303中断线B
007A ;
007A ; void Start() //IIC总线开始信号
007A ; {SetSDA(1);
007A .dbline 51
007A 01E0 ldi R16,1
007C F6DF rcall _SetSDA
007E .dbline 52
007E ; SetSCL(1);
007E 01E0 ldi R16,1
0080 ECDF rcall _SetSCL
0082 .dbline 53
0082 ; NOPNOP(50);
0082 02E3 ldi R16,50
0084 E4DF rcall _NOPNOP
0086 .dbline 54
0086 ; SetSDA(0);
0086 0027 clr R16
0088 F0DF rcall _SetSDA
008A .dbline 55
008A ; NOPNOP(50);
008A 02E3 ldi R16,50
008C E0DF rcall _NOPNOP
008E .dbline 56
008E ; SetSCL(0);
008E 0027 clr R16
0090 .dbline -2
0090 .dbline 57
0090 ; }
0090 L26:
0090 .dbline 0 ; func end
0090 E4CF rjmp _SetSCL
0092 .dbend
0092 .dbfunc e Stop _Stop fV
.even
0092 _Stop::
0092 .dbline -1
0092 .dbline 60
0092 ;
0092 ; void Stop() //IIC总线停止信号
0092 ; {SetSDA(0);
0092 .dbline 60
0092 0027 clr R16
0094 EADF rcall _SetSDA
0096 .dbline 61
0096 ; SetSCL(1);
0096 01E0 ldi R16,1
0098 E0DF rcall _SetSCL
009A .dbline 62
009A ; NOPNOP(50);
009A 02E3 ldi R16,50
009C D8DF rcall _NOPNOP
009E .dbline 63
009E ; SetSDA(1);
009E 01E0 ldi R16,1
00A0 E4DF rcall _SetSDA
00A2 .dbline 64
00A2 ; NOPNOP(50);
00A2 02E3 ldi R16,50
00A4 D4DF rcall _NOPNOP
00A6 .dbline 65
00A6 ; SetSCL(0);
00A6 0027 clr R16
00A8 .dbline -2
00A8 .dbline 66
00A8 ; }
00A8 L27:
00A8 .dbline 0 ; func end
00A8 D8CF rjmp _SetSCL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -