📄 rtc.lis
字号:
00EE 6623 tst R22
00F0 11F4 brne L21
00F2 .dbline 57
00F2 9498 cbi 0x12,4
00F4 01C0 xjmp L22
00F6 L21:
00F6 .dbline 59
00F6 949A sbi 0x12,4
00F8 L22:
00F8 .dbline 61
00F8 9598 cbi 0x12,5
00FA .dbline 62
00FA 969A sbi 0x12,6
00FC .dbline 63
00FC 48BB out 0x18,R20
00FE .dbline 64
00FE 01E0 ldi R16,1
0100 10E0 ldi R17,0
0102 96DF xcall _Delayms
0104 .dbline 65
0104 9698 cbi 0x12,6
0106 .dbline -2
0106 .dbline 66
0106 L20:
0106 0E940000 xcall pop_gset2
010A .dbline 0 ; func end
010A 0895 ret
010C .dbsym r dByte 20 c
010C .dbsym r DatCmd 22 c
010C .dbend
010C .dbfunc e LCD1602_sendstr _LCD1602_sendstr fV
010C ; ptString -> R20,R21
.even
010C _LCD1602_sendstr::
010C 0E940000 xcall push_gset1
0110 A801 movw R20,R16
0112 .dbline -1
0112 .dbline 74
0112 05C0 xjmp L25
0114 L24:
0114 .dbline 76
0114 .dbline 77
0114 FA01 movw R30,R20
0116 2191 ld R18,Z+
0118 AF01 movw R20,R30
011A 01E0 ldi R16,1
011C E4DF xcall _LCD1602_sendbyte
011E .dbline 78
011E L25:
011E .dbline 75
011E FA01 movw R30,R20
0120 2080 ldd R2,z+0
0122 2220 tst R2
0124 B9F7 brne L24
0126 .dbline -2
0126 .dbline 79
0126 L23:
0126 0E940000 xcall pop_gset1
012A .dbline 0 ; func end
012A 0895 ret
012C .dbsym r ptString 20 pc
012C .dbend
012C .dbfunc e LCD1602_clear _LCD1602_clear fV
.even
012C _LCD1602_clear::
012C .dbline -1
012C .dbline 87
012C ; data--要写入的地址
012C ; 返回值 : 无
012C ; /********************************************/
012C .dbline 88
012C ; void DS1302_writeD(uchar addr,uchar data)
012C 21E0 ldi R18,1
012E 0027 clr R16
0130 DADF xcall _LCD1602_sendbyte
0132 .dbline 89
0132 ; {
0132 02E0 ldi R16,2
0134 10E0 ldi R17,0
0136 .dbline -2
0136 .dbline 90
0136 ; PORTC&=~BIT(RTC_CS); //拉低片选端
0136 L27:
0136 .dbline 0 ; func end
0136 7CCF xjmp _Delayms
0138 .dbend
0138 .dbfunc e LCD1602_readBF _LCD1602_readBF fc
0138 ; busy -> R20
.even
0138 _LCD1602_readBF::
0138 0E940000 xcall push_gset1
013C .dbline -1
013C .dbline 98
013C ; PORTB&=~BIT(RTC_CLK); //拉低时钟端
013C ; Delayus(10);
013C ; PORTC|=BIT(RTC_CS); //拉高片选端
013C ; Delayus(10); //调整片选脉冲
013C ; DS1302_writeB(addr); //写入操作命令(地址)
013C ; Delayus(10);
013C ; PORTB&=~BIT(RTC_CLK); //拉低时钟端
013C ; Delayus(10);
013C .dbline 100
013C ; DS1302_writeB(data); //写入数据
013C ; PORTB&=~BIT(RTC_CLK); //拉低时钟端
013C 0027 clr R16
013E BBDF xcall _LCD1602_readbyte
0140 402F mov R20,R16
0142 .dbline 101
0142 ; Delayus(10); //调整片选脉冲
0142 07FF sbrs R16,7
0144 02C0 rjmp L29
0146 .dbline 102
0146 ; PORTC&=~BIT(RTC_CS); //拉低片选端
0146 41E0 ldi R20,1
0148 01C0 xjmp L30
014A L29:
014A .dbline 104
014A ; }
014A ; /*******************************************
014A 4427 clr R20
014C L30:
014C .dbline 105
014C ; 函数名称: DS1302_readD
014C 042F mov R16,R20
014E .dbline -2
014E L28:
014E 0E940000 xcall pop_gset1
0152 .dbline 0 ; func end
0152 0895 ret
0154 .dbsym r busy 20 c
0154 .dbend
0154 .dbfunc e LCD1602_gotoXY _LCD1602_gotoXY fV
0154 ; Col -> R20
0154 ; Row -> R22
.even
0154 _LCD1602_gotoXY::
0154 0E940000 xcall push_gset2
0158 422F mov R20,R18
015A 602F mov R22,R16
015C .dbline -1
015C .dbline 115
015C ; 功 能: 从DS1302的某个地址读出一个字节数据
015C ; 参 数: addr--地址值(寄存器或RAM)
015C ; 返回值 : data--读出的数据
015C ; /********************************************/
015C ; uchar DS1302_readD(uchar addr)
015C ; {
015C ; uchar data;
015C ; PORTC&=~BIT(RTC_CS); //拉低片选端
015C ; PORTB&=~BIT(RTC_CLK); //拉低时钟端
015C ; Delayus(10);
015C .dbline 116
015C ; PORTC|=BIT(RTC_CS); //拉高片选端
015C 7727 clr R23
015E 6230 cpi R22,2
0160 E0E0 ldi R30,0
0162 7E07 cpc R23,R30
0164 09F0 breq L35
0166 05C0 xjmp L32
0168 X0:
0168 .dbline 117
0168 ; Delayus(10); //调整片选脉冲
0168 L35:
0168 .dbline 119
0168 ; DS1302_writeB(addr); //写入操作命令(地址)
0168 ; Delayus(10);
0168 242F mov R18,R20
016A 2054 subi R18,64 ; addi 192
016C 0027 clr R16
016E BBDF xcall _LCD1602_sendbyte
0170 .dbline 119
0170 04C0 xjmp L33
0172 L32:
0172 .dbline 121
0172 242F mov R18,R20
0174 2058 subi R18,128 ; addi 128
0176 0027 clr R16
0178 B6DF xcall _LCD1602_sendbyte
017A .dbline 121
017A L33:
017A .dbline -2
017A .dbline 123
017A ; data=DS1302_readB(); //读出数据
017A ; Delayus(10);
017A ; PORTB&=~BIT(RTC_CLK); //拉低时钟端
017A ; PORTC&=~BIT(RTC_CS); //拉低片选端
017A L31:
017A 0E940000 xcall pop_gset2
017E .dbline 0 ; func end
017E 0895 ret
0180 .dbsym r Col 20 c
0180 .dbsym r Row 22 c
0180 .dbend
0180 .dbfunc e LCD1602_initial _LCD1602_initial fV
.even
0180 _LCD1602_initial::
0180 .dbline -1
0180 .dbline 131
0180 ; return data; //返回读出的数据
0180 ; }
0180 ; /*******************************************
0180 ; 函数名称: DS1302_setT
0180 ; 功 能: 设置DS1302的时间
0180 ; 参 数: ptTimeD--设置时间数组指针
0180 ; 返回值 : 无
0180 ; /********************************************/
0180 .dbline 132
0180 ; void DS1302_setT(uchar ptTimeD[])
0180 04E6 ldi R16,100
0182 10E0 ldi R17,0
0184 55DF xcall _Delayms
0186 .dbline 133
0186 ; {
0186 90DF xcall _LCD1602_portini
0188 .dbline 135
0188 ; uchar i;
0188 ; uchar addr = 0x80; //写入地址从秒寄存器开始
0188 28E3 ldi R18,56
018A 0027 clr R16
018C ACDF xcall _LCD1602_sendbyte
018E L37:
018E .dbline 136
018E L38:
018E .dbline 136
018E ; DS1302_writeD(C_WP|WR,UPROTECT); //控制命令,WP位为0,允许写操作
018E D4DF xcall _LCD1602_readBF
0190 0023 tst R16
0192 E9F7 brne L37
0194 .dbline 137
0194 ; Delayms(5);
0194 2CE0 ldi R18,12
0196 0027 clr R16
0198 A6DF xcall _LCD1602_sendbyte
019A L40:
019A .dbline 138
019A L41:
019A .dbline 138
019A ; for(i=0;i<7;i++)
019A CEDF xcall _LCD1602_readBF
019C 0023 tst R16
019E E9F7 brne L40
01A0 .dbline 139
01A0 ; {
01A0 C5DF xcall _LCD1602_clear
01A2 L43:
01A2 .dbline 140
01A2 L44:
01A2 .dbline 140
01A2 ; DS1302_writeD(addr|WR,ptTimeD[i]); // 秒 分 时 日 月 星期 年
01A2 CADF xcall _LCD1602_readBF
01A4 0023 tst R16
01A6 E9F7 brne L43
01A8 .dbline 141
01A8 ; addr+=2;
01A8 26E0 ldi R18,6
01AA 0027 clr R16
01AC .dbline -2
01AC .dbline 142
01AC ; Delayms(1);
01AC L36:
01AC .dbline 0 ; func end
01AC 9CCF xjmp _LCD1602_sendbyte
01AE .dbend
01AE .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\17_RTC/MKEY.C
01AE .dbfunc e Mkey_press _Mkey_press fc
01AE ; pressed -> R16
.even
01AE _Mkey_press::
01AE .dbline -1
01AE .dbline 20
01AE .dbline 22
01AE 8FEF ldi R24,255
01B0 81BB out 0x11,R24
01B2 .dbline 23
01B2 80EF ldi R24,240
01B4 82BB out 0x12,R24
01B6 .dbline 24
01B6 81BB out 0x11,R24
01B8 .dbline 25
01B8 80B3 in R24,0x10
01BA 803F cpi R24,240
01BC 11F0 breq L47
01BE .dbline 26
01BE 01E0 ldi R16,1
01C0 01C0 xjmp L48
01C2 L47:
01C2 .dbline 28
01C2 0027 clr R16
01C4 L48:
01C4 .dbline 29
01C4 8FEF ldi R24,255
01C6 81BB out 0x11,R24
01C8 .dbline 30
01C8 .dbline -2
01C8 L46:
01C8 .dbline 0 ; func end
01C8 0895 ret
01CA .dbsym r pressed 16 c
01CA .dbend
01CA .dbfunc e Mkey_scan _Mkey_scan fc
01CA ; keycode -> R20
01CA ; i -> R10
.even
01CA _Mkey_scan::
01CA 0E940000 xcall push_gset3
01CE .dbline -1
01CE .dbline 39
01CE .dbline 40
01CE 8FE7 ldi R24,127
01D0 A82E mov R10,R24
01D2 .dbline 40
01D2 4FEF ldi R20,255
01D4 .dbline 41
01D4 0FE0 ldi R16,15
01D6 10E0 ldi R17,0
01D8 2BDF xcall _Delayms
01DA .dbline 42
01DA E9DF xcall _Mkey_press
01DC 0130 cpi R16,1
01DE 09F0 breq X2
01E0 92C0 xjmp L50
01E2 X2:
01E2 .dbline 43
01E2 L52:
01E2 .dbline 45
01E2 .dbline 46
01E2 2A2C mov R2,R10
01E4 2694 lsr R2
01E6 2694 lsr R2
01E8 2694 lsr R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -