📄 ds1203.lst
字号:
0132 9508 RET
_DS1302_WriteTime:
time --> R20
ddr --> R22
0133 D6C7 RCALL push_gset2
(0171) }
(0172) /*cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
(0173) 定义DS1302矫正时间程序
(0174) ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
(0175) void DS1302_WriteTime(void)
(0176) {char *ddr,*time;
(0177) ddr=WriteAddress;
0134 E660 LDI R22,0x60
0135 E070 LDI R23,0
(0178) time=WriteTime;
0136 E647 LDI R20,0x67
0137 E050 LDI R21,0
0138 C009 RJMP 0x0142
(0179) while(*ddr)
(0180) {
(0181) DS1302_WriteT(*ddr,*time);
0139 01FA MOVW R30,R20
013A 8120 LDD R18,Z+0
013B 01FB MOVW R30,R22
013C 8100 LDD R16,Z+0
013D DF4F RCALL _DS1302_WriteT
(0182) ddr++;
013E 5F6F SUBI R22,0xFF
013F 4F7F SBCI R23,0xFF
(0183) time++;
0140 5F4F SUBI R20,0xFF
0141 4F5F SBCI R21,0xFF
0142 01FB MOVW R30,R22
0143 8020 LDD R2,Z+0
0144 2022 TST R2
0145 F799 BNE 0x0139
0146 D6AA RCALL pop_gset2
0147 9508 RET
FILE: E:\biyesheji\SUCCES~1\SENDSE~1\SETPFI~2\程序\DELAY.C
(0001)
(0002) #define XTAL 1 //晶振频率,单位MHz 定义为全局变量
(0003)
(0004) void delay_1us(void) //1us延时函数
(0005) {
(0006) asm("nop");
_delay_1us:
0148 0000 NOP
0149 9508 RET
_delay_nus:
i --> R20
n --> R22
014A D6B0 RCALL push_gset2
014B 01B8 MOVW R22,R16
(0007) }
(0008)
(0009) void delay_nus(unsigned int n) //N us延时函数
(0010) {
(0011) unsigned int i=0;
014C 2744 CLR R20
014D 2755 CLR R21
(0012) for (i=0;i<n;i++)
014E C003 RJMP 0x0152
(0013) delay_1us();
014F DFF8 RCALL _delay_1us
0150 5F4F SUBI R20,0xFF
0151 4F5F SBCI R21,0xFF
0152 1746 CP R20,R22
0153 0757 CPC R21,R23
0154 F3D0 BCS 0x014F
0155 D69B RCALL pop_gset2
0156 9508 RET
(0014) }
(0015)
(0016) void delay_1ms(void) //1ms延时函数
(0017) {
(0018) unsigned int i;
(0019) for (i=0;i<(unsigned int)(XTAL*143-2);i++);
_delay_1ms:
i --> R16
0157 2700 CLR R16
0158 2711 CLR R17
0159 C002 RJMP 0x015C
015A 5F0F SUBI R16,0xFF
015B 4F1F SBCI R17,0xFF
015C 380D CPI R16,0x8D
015D E0E0 LDI R30,0
015E 071E CPC R17,R30
015F F3D0 BCS 0x015A
0160 9508 RET
_delay_nms:
i --> R20
n --> R22
0161 D699 RCALL push_gset2
0162 01B8 MOVW R22,R16
(0020) }
(0021)
(0022) void delay_nms(unsigned int n) //N ms延时函数
(0023) {
(0024) unsigned int i=0;
0163 2744 CLR R20
0164 2755 CLR R21
(0025) for (i=0;i<n;i++)
0165 C003 RJMP 0x0169
(0026) {
(0027) delay_1ms();
0166 DFF0 RCALL _delay_1ms
0167 5F4F SUBI R20,0xFF
0168 4F5F SBCI R21,0xFF
0169 1746 CP R20,R22
016A 0757 CPC R21,R23
016B F3D0 BCS 0x0166
016C D684 RCALL pop_gset2
016D 9508 RET
FILE: E:\biyesheji\SUCCES~1\SENDSE~1\SETPFI~2\程序\DS1302.c
(0001) //ICC-AVR 修改日期: 2007-05-01 15:38:44
(0002) //PC3:功能按键
(0003) //PC4:移位按键
(0004) //PC5:加一按键
(0005) //PB0:减一按键
(0006) // CenWenJiao
(0007) // Target : M8
(0008) // Crystal: 1.0000Mhz
(0009) //2007.05.01 21:08:CC 完成时间调整程序
(0010) #include <iom8v.h>
(0011) #include <macros.h>
(0012) #include "ds1302.h"
(0013) #include "DELAY.C"
(0014) #include "LCD.h" //eureka
(0015)
(0016) /*cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
(0017) 单片机初始化程序
(0018) ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
(0019) void port_init(void) //设置portb和portc端口
(0020) {
(0021) PORTB = 0x01;//PB0 作为减一按键
_port_init:
016E E081 LDI R24,1
016F BB88 OUT 0x18,R24
(0022) DDRB = 0x00;
0170 2422 CLR R2
0171 BA27 OUT 0x17,R2
(0023) PORTC = 0x38; //m103 output only//PC3; PC4; PC5; 功能,移位,加一
0172 E388 LDI R24,0x38
0173 BB85 OUT 0x15,R24
(0024) DDRC = 0xC7;
0174 EC87 LDI R24,0xC7
0175 BB84 OUT 0x14,R24
(0025) PORTD = 0x00;
0176 BA22 OUT 0x12,R2
(0026) DDRD = 0xFF;
0177 EF8F LDI R24,0xFF
0178 BB81 OUT 0x11,R24
0179 9508 RET
(0027) }
(0028) /*ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
(0029) 1302初始化驱动
(0030) cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
(0031) void init_devices(void)
(0032) {
(0033) //CLI(); //disable all interrupts
(0034) port_init();
_init_devices:
017A DFF3 RCALL _port_init
(0035) DS1302_set();
017B DEE5 RCALL _DS1302_set
(0036) //timer1_init();
(0037) MCUCR = 0x00;
017C 2422 CLR R2
017D BE25 OUT 0x35,R2
(0038) GICR = 0x00;
017E BE2B OUT 0x3B,R2
(0039) TIMSK = 0x04;
017F E084 LDI R24,4
0180 BF89 OUT 0x39,R24
0181 9508 RET
(0040) //SEI(); //re-enable interrupts
(0041) }
(0042) /*ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
(0043) LCD1602初始化驱动
(0044) cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
(0045) void init_devicesl(void)
(0046) {
(0047) //CLI(); //disable all interrupts
(0048) LCD_init();
_init_devicesl:
0182 D5EB RCALL _LCD_init
(0049) // DS1302_set();
(0050) MCUCR = 0x00;
0183 2422 CLR R2
0184 BE25 OUT 0x35,R2
(0051) GICR = 0x00;
0185 BE2B OUT 0x3B,R2
(0052) TIMSK = 0x00; //timer interrupt sources
0186 BE29 OUT 0x39,R2
0187 9508 RET
_SendDataForDisplay:
0188 9722 SBIW R28,2
(0053) // SEI(); //re-enable interrupts
(0054) }
(0055) /*ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
(0056) 基本的显示程序
(0057) cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
(0058) void SendDataForDisplay(void)
(0059) {
(0060) //DS1302_ReadTime();
(0061) //DataFenli();
(0062)
(0063) LCD_write_string(0,0,"time:");
0189 EB85 LDI R24,0xB5
018A E090 LDI R25,0
018B 8399 STD Y+1,R25
018C 8388 STD Y+0,R24
018D 2722 CLR R18
018E 2700 CLR R16
018F D643 RCALL _LCD_write_string
(0064) LCD_write_char(6,0,hourth+48); //时
0190 918000C8 LDS R24,hourth
0192 5D80 SUBI R24,0xD0
0193 8388 STD Y+0,R24
0194 2722 CLR R18
0195 E006 LDI R16,6
0196 D650 RCALL _LCD_write_char
(0065) LCD_write_char(7,0,hourtl+48);
0197 918000C9 LDS R24,hourtl
0199 5D80 SUBI R24,0xD0
019A 8388 STD Y+0,R24
019B 2722 CLR R18
019C E007 LDI R16,7
019D D649 RCALL _LCD_write_char
(0066) LCD_write_char(8,0,45);
019E E28D LDI R24,0x2D
019F 8388 STD Y+0,R24
01A0 2722 CLR R18
01A1 E008 LDI R16,0x8
01A2 D644 RCALL _LCD_write_char
(0067) LCD_write_char(9,0,minuteth+48); //分
01A3 918000CA LDS R24,minuteth
01A5 5D80 SUBI R24,0xD0
01A6 8388 STD Y+0,R24
01A7 2722 CLR R18
01A8 E009 LDI R16,0x9
01A9 D63D RCALL _LCD_write_char
(0068) LCD_write_char(10,0,minutetl+48);
01AA 918000CB LDS R24,minutetl
01AC 5D80 SUBI R24,0xD0
01AD 8388 STD Y+0,R24
01AE 2722 CLR R18
01AF E00A LDI R16,0xA
01B0 D636 RCALL _LCD_write_char
(0069) LCD_write_char(11,0,45);
01B1 E28D LDI R24,0x2D
01B2 8388 STD Y+0,R24
01B3 2722 CLR R18
01B4 E00B LDI R16,0xB
01B5 D631 RCALL _LCD_write_char
(0070) LCD_write_char(12,0,secondth+48);
01B6 918000CC LDS R24,secondth
01B8 5D80 SUBI R24,0xD0
01B9 8388 STD Y+0,R24
01BA 2722 CLR R18
01BB E00C LDI R16,0xC
01BC D62A RCALL _LCD_write_char
(0071) LCD_write_char(13,0,secondtl+48); //秒
01BD 918000CD LDS R24,secondtl
01BF 5D80 SUBI R24,0xD0
01C0 8388 STD Y+0,R24
01C1 2722 CLR R18
01C2 E00D LDI R16,0xD
01C3 D623 RCALL _LCD_write_char
(0072)
(0073) LCD_write_string(0,1,"data:");
01C4 EA8F LDI R24,0xAF
01C5 E090 LDI R25,0
01C6 8399 STD Y+1,R25
01C7 8388 STD Y+0,R24
01C8 E021 LDI R18,1
01C9 2700 CLR R16
01CA D608 RCALL _LCD_write_string
(0074) LCD_write_char(6,1,yearth+48);
01CB 918000C2 LDS R24,yearth
01CD 5D80 SUBI R24,0xD0
01CE 8388 STD Y+0,R24
01CF E021 LDI R18,1
01D0 E006 LDI R16,6
01D1 D615 RCALL _LCD_write_char
(0075) LCD_write_char(7,1,yeartl+48); //年
01D2 918000C3 LDS R24,yeartl
01D4 5D80 SUBI R24,0xD0
01D5 8388 STD Y+0,R24
01D6 E021 LDI R18,1
01D7 E007 LDI R16,7
01D8 D60E RCALL _LCD_write_char
(0076) LCD_write_char(8,1,45);
01D9 E28D LDI R24,0x2D
01DA 8388 STD Y+0,R24
01DB E021 LDI R18,1
01DC E008 LDI R16,0x8
01DD D609 RCALL _LCD_write_char
(0077) LCD_write_char(9,1,monthth+48); //月
01DE 918000C4 LDS R24,monthth
01E0 5D80 SUBI R24,0xD0
01E1 8388 STD Y+0,R24
01E2 E021 LDI R18,1
01E3 E009 LDI R16,0x9
01E4 D602 RCALL _LCD_write_char
(0078) LCD_write_char(10,1,monthtl+48);
01E5 918000C5 LDS R24,monthtl
01E7 5D80 SUBI R24,0xD0
01E8 8388 STD Y+0,R24
01E9 E021 LDI R18,1
01EA E00A LDI R16,0xA
01EB D5FB RCALL _LCD_write_char
(0079) LCD_write_char(11,1,45);
01EC E28D LDI R24,0x2D
01ED 8388 STD Y+0,R24
01EE E021 LDI R18,1
01EF E00B LDI R16,0xB
01F0 D5F6 RCALL _LCD_write_char
(0080) LCD_write_char(12,1,dateth+48); //日
01F1 918000C6 LDS R24,dateth
01F3 5D80 SUBI R24,0xD0
01F4 8388 STD Y+0,R24
01F5 E021 LDI R18,1
01F6 E00C LDI R16,0xC
01F7 D5EF RCALL _LCD_write_char
(0081) LCD_write_char(13,1,datetl+48);
01F8 918000C7 LDS R24,datetl
01FA 5D80 SUBI R24,0xD0
01FB 8388 STD Y+0,R24
01FC E021 LDI R18,1
01FD E00D LDI R16,0xD
01FE D5E8 RCALL _LCD_write_char
(0082)
(0083) delay_nus(200);
01FF EC08 LDI R16,0xC8
0200 E010 LDI R17,0
0201 DF48 RCALL _delay_nus
0202 9622 ADIW R28,2
0203 9508 RET
_black:
n --> R22
m --> R20
0204 D5F6 RCALL push_gset2
0205 01B9 MOVW R22,R18
0206 01A8 MOVW R20,R16
0207 9721 SBIW R28,1
(0084)
(0085) }
(0086) /*ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
(0087) 显示中调用的闪烁调用程序
(0088) cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
(0089) void black(int m,int n)//闪烁
(0090) {
(0091) LCD_write_char(m,n,95);//95为闪烁时"下滑线"的代码
0208 E58F LDI R24,0x5F
0209 8388 STD Y+0,R24
020A 2F26 MOV R18,R22
020B 2F04 MOV R16,R20
020C D5DA RCALL _LCD_write_char
(0092) delay_nus(1000);
020D EE08 LDI R16,0xE8
020E E013 LDI R17,3
020F DF3A RCALL _delay_nus
0210 9621 ADIW R28,1
0211 D5DF RCALL pop_gset2
0212 9508 RET
(0093) }
(0094) /*cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
(0095) /*设置分钟,秒,加法子程序*/
(0096) /*cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
(0097) void PlusForSET(int i)
(0098) {
(0099) if(WriteTime[i]==0x09) //writetime[i] 是定义存储写地址的数组
_PlusForSET:
i --> R16
0213 E687 LDI R24,0x67
0214 E090 LDI R25,0
0215 01F8 MOVW R30,R16
0216 0FE8 ADD R30,R24
0217 1FF9 ADC R31,R25
0218 8180 LDD R24,Z+0
0219 3089 CPI R24,0x9
021A F439 BNE 0x0222
(0100) { WriteTime[i]=0x0f;
021B E687 LDI R24,0x67
021C E090 LDI R25,0
021D 01F8 MOVW R30,R16
021E 0FE8 ADD R30,R24
021F 1FF9 ADC R31,R25
0220 E08F LDI R24,0xF
0221 8380 STD Z+0,R24
(0101) }
(0102) if(WriteTime[i]==0x19)
0222 E687 LDI R24,0x67
0223 E090 LDI R25,0
0224 01F8 MOVW R30,R16
0225 0FE8 ADD R30,R24
0226 1FF9 ADC R31,R25
0227 8180 LDD R24,Z+0
0228 3189 CPI R24,0x19
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -