📄 time_8515.lis
字号:
0170 .dbline 221
0170 ; DDRA &= ~(1<<DDA4); //数据脚改为输入
0170 D498 cbi 0x1a,4
0172 .dbline 222
0172 ; NOP();
0172 0000 nop
0174 .dbline 223
0174 ; for (i=0;i<8;i++)
0174 4427 clr R20
0176 09C0 rjmp L45
0178 L42:
0178 .dbline 224
0178 .dbline 225
0178 ADDF rcall _OutputByte
017A 80E0 ldi R24,<_buf_read
017C 90E0 ldi R25,>_buf_read
017E E42F mov R30,R20
0180 FF27 clr R31
0182 E80F add R30,R24
0184 F91F adc R31,R25
0186 0083 std z+0,R16
0188 .dbline 226
0188 L43:
0188 .dbline 223
0188 4395 inc R20
018A L45:
018A .dbline 223
018A 4830 cpi R20,8
018C A8F3 brlo L42
018E .dbline 227
018E ; {
018E ; buf_read[i]=OutputByte();
018E ; }
018E ; PORTA &= ~(1<<PA5); //RST=0
018E DD98 cbi 0x1b,5
0190 .dbline -2
0190 L41:
0190 00D0 rcall pop_gset1
0192 .dbline 0 ; func end
0192 0895 ret
0194 .dbsym r i 20 c
0194 .dbend
0194 .dbfunc e write_pc232 _write_pc232 fV
0194 ; i -> R20
.even
0194 _write_pc232::
0194 00D0 rcall push_gset1
0196 402F mov R20,R16
0198 .dbline -1
0198 .dbline 238
0198 ; }
0198 ;
0198 ; /********************************************************
0198 ; 子程序名: write_pc232()
0198 ; 功 能: 串口发送一个字节
0198 ; 输入参数: /
0198 ; 输出参数: /
0198 ; 描 述: 把数据发送出去先发送再检测,发完后,才离开
0198 ; ********************************************************/
0198 ; void write_pc232(uchar i)
0198 ; {
0198 L47:
0198 .dbline 239
0198 L48:
0198 .dbline 239
0198 ; while(!(UCSRA&(1<<UDRE))); //1字节发送完毕?
0198 5D9B sbis 0xb,5
019A FECF rjmp L47
019C .dbline 240
019C ; UDR = i; //发送一个字符数据
019C 4CB9 out 0xc,R20
019E .dbline 241
019E ; DelaymS (10);
019E 0AE0 ldi R16,10
01A0 10E0 ldi R17,0
01A2 2EDF rcall _DelaymS
01A4 .dbline -2
01A4 L46:
01A4 00D0 rcall pop_gset1
01A6 .dbline 0 ; func end
01A6 0895 ret
01A8 .dbsym r i 20 c
01A8 .dbend
01A8 .dbfunc e mcu_Init _mcu_Init fV
.even
01A8 _mcu_Init::
01A8 .dbline -1
01A8 .dbline 251
01A8 ; }
01A8 ; /************************************************
01A8 ; 函 数 名: mcu_Init()
01A8 ; 功 能: 单片机初始化函数
01A8 ; 输入参数: /
01A8 ; 输出参数: /
01A8 ; 描 述: 相关口方向的设置等
01A8 ; ***********************************************/
01A8 ; void mcu_Init(void)
01A8 ; {
01A8 .dbline 252
01A8 ; DDRC = 0xff; //PC口为推挽1输出,段码
01A8 8FEF ldi R24,255
01AA 84BB out 0x14,R24
01AC .dbline 253
01AC ; DDRD = 0xff; //PD口为推挽1输出,位码,PD7为485DE脚。
01AC 81BB out 0x11,R24
01AE .dbline 254
01AE ; DDRA = 0xff; //PA口接DS1302
01AE 8ABB out 0x1a,R24
01B0 .dbline -2
01B0 L50:
01B0 .dbline 0 ; func end
01B0 0895 ret
01B2 .dbend
01B2 .dbfunc e usart_Init _usart_Init fV
.even
01B2 _usart_Init::
01B2 .dbline -1
01B2 .dbline 264
01B2 ; }
01B2 ; /********************************************************
01B2 ; 子程序名: usart_Init()
01B2 ; 功 能: 串口初始化
01B2 ; 输入参数: /
01B2 ; 输出参数: /
01B2 ; 描 述: /
01B2 ; ********************************************************/
01B2 ; void usart_Init (void)
01B2 ; {
01B2 .dbline 265
01B2 ; UBRRL=51; //波特率寄存器,UART:9600bps,8.000MHz
01B2 83E3 ldi R24,51
01B4 89B9 out 0x9,R24
01B6 .dbline 266
01B6 ; UCSRB = (1<<RXEN)|(1<<TXEN); //UART控制寄存器,RXD&TXD使能
01B6 88E1 ldi R24,24
01B8 8AB9 out 0xa,R24
01BA .dbline -2
01BA L51:
01BA .dbline 0 ; func end
01BA 0895 ret
01BC .dbend
01BC .dbfunc e spk _spk fV
01BC ; i -> R20
.even
01BC _spk::
01BC 00D0 rcall push_gset1
01BE 402F mov R20,R16
01C0 .dbline -1
01C0 .dbline 276
01C0 ; }
01C0 ; /************************************************
01C0 ; 函 数 名: spk()
01C0 ; 功 能: 蜂鸣器鸣叫一声函数
01C0 ; 输入参数:
01C0 ; 输出参数:
01C0 ; 描 述: /
01C0 ; ***********************************************/
01C0 ; void spk (uchar i)
01C0 ; {
01C0 .dbline 277
01C0 ; DDRA |= (1<<2); //DDRA2为输出。
01C0 D29A sbi 0x1a,2
01C2 .dbline 278
01C2 ; PORTA &= ~(1<<PA2); //蜂鸣器响
01C2 DA98 cbi 0x1b,2
01C4 .dbline 279
01C4 ; DelaymS (i); //延迟
01C4 042F mov R16,R20
01C6 1127 clr R17
01C8 1BDF rcall _DelaymS
01CA .dbline 280
01CA ; PORTA |= (1<<PA2); //蜂鸣器关闭
01CA DA9A sbi 0x1b,2
01CC .dbline -2
01CC L52:
01CC 00D0 rcall pop_gset1
01CE .dbline 0 ; func end
01CE 0895 ret
01D0 .dbsym r i 20 c
01D0 .dbend
01D0 .dbfunc e data_conversion _data_conversion fV
.even
01D0 _data_conversion::
01D0 .dbline -1
01D0 .dbline 291
01D0 ; }
01D0 ; /********************************************************
01D0 ; 子程序名: data_conversion()
01D0 ; 输入参数: 数据转换程序
01D0 ; 输出参数: /
01D0 ; 描 述: /1302读出的数据是BCD码形式,必须进行数制转换。
01D0 ; 数据格式: 秒 分 时 日 月 星期 年 写保护字节
01D0 ; 显示格式: 秒秒 分分 时时 日日 月月 年年 辅助
01D0 ; ********************************************************/
01D0 ; void data_conversion (void)
01D0 ; {
01D0 .dbline 292
01D0 ; buf_time[29] = (buf_read[0] & 0x0f) + '0'; //秒的低位
01D0 80910000 lds R24,_buf_read
01D4 8F70 andi R24,15
01D6 805D subi R24,208 ; addi 48
01D8 80931D00 sts _buf_time+29,R24
01DC .dbline 293
01DC ; buf_time[28] = (buf_read[0] >> 4 ) + '0'; //秒的高位
01DC 80910000 lds R24,_buf_read
01E0 8295 swap R24
01E2 8F70 andi R24,#0x0F
01E4 805D subi R24,208 ; addi 48
01E6 80931C00 sts _buf_time+28,R24
01EA .dbline 295
01EA ;
01EA ; buf_time[26] = (buf_read[1] & 0x0f) + '0'; //分的低位
01EA 80910100 lds R24,_buf_read+1
01EE 8F70 andi R24,15
01F0 805D subi R24,208 ; addi 48
01F2 80931A00 sts _buf_time+26,R24
01F6 .dbline 296
01F6 ; buf_time[25] = (buf_read[1] >> 4 ) + '0'; //分的高位
01F6 80910100 lds R24,_buf_read+1
01FA 8295 swap R24
01FC 8F70 andi R24,#0x0F
01FE 805D subi R24,208 ; addi 48
0200 80931900 sts _buf_time+25,R24
0204 .dbline 298
0204 ;
0204 ; buf_time[23] = (buf_read[2] & 0x0f) + '0'; //时的低位
0204 80910200 lds R24,_buf_read+2
0208 8F70 andi R24,15
020A 805D subi R24,208 ; addi 48
020C 80931700 sts _buf_time+23,R24
0210 .dbline 299
0210 ; buf_time[22] = (buf_read[2] >> 4 ) + '0'; //时的高位
0210 80910200 lds R24,_buf_read+2
0214 8295 swap R24
0216 8F70 andi R24,#0x0F
0218 805D subi R24,208 ; addi 48
021A 80931600 sts _buf_time+22,R24
021E .dbline 301
021E ;
021E ; buf_time[14] = (buf_read[3] & 0x0f) + '0'; //日的低位
021E 80910300 lds R24,_buf_read+3
0222 8F70 andi R24,15
0224 805D subi R24,208 ; addi 48
0226 80930E00 sts _buf_time+14,R24
022A .dbline 302
022A ; buf_time[13] = (buf_read[3] >> 4 ) + '0'; //日的高位
022A 80910300 lds R24,_buf_read+3
022E 8295 swap R24
0230 8F70 andi R24,#0x0F
0232 805D subi R24,208 ; addi 48
0234 80930D00 sts _buf_time+13,R24
0238 .dbline 304
0238 ;
0238 ; buf_time[11] = (buf_read[4] & 0x0f) + '0'; //月的高位
0238 80910400 lds R24,_buf_read+4
023C 8F70 andi R24,15
023E 805D subi R24,208 ; addi 48
0240 80930B00 sts _buf_time+11,R24
0244 .dbline 305
0244 ; buf_time[10] = (buf_read[4] >> 4 ) + '0'; //月的高位
0244 80910400 lds R24,_buf_read+4
0248 8295 swap R24
024A 8F70 andi R24,#0x0F
024C 805D subi R24,208 ; addi 48
024E 80930A00 sts _buf_time+10,R24
0252 .dbline 307
0252 ;
0252 ; buf_time[8] = (buf_read[6] & 0x0f) + '0'; //年的高位
0252 80910600 lds R24,_buf_read+6
0256 8F70 andi R24,15
0258 805D subi R24,208 ; addi 48
025A 80930800 sts _buf_time+8,R24
025E .dbline 308
025E ; buf_time[7] = (buf_read[6] >> 4 ) + '0'; //年的高位
025E 80910600 lds R24,_buf_read+6
0262 8295 swap R24
0264 8F70 andi R24,#0x0F
0266 805D subi R24,208 ; addi 48
0268 80930700 sts _buf_time+7,R24
026C .dbline -2
026C L53:
026C .dbline 0 ; func end
026C 0895 ret
026E .dbend
.area lit(rom, con, rel)
0000 L77:
0000 2020BDF1CCECB5C4C8D5C6DACAC7A3BA .byte 32,32,189,241,204,236,181,196,200,213,198,218,202,199,163,186
0010 L78:
0010 2020B5B1C7B0B5C4CAB1BCE4CAC7A3BA .byte 32,32,181,177,199,176,181,196,202,177,188,228,202,199,163,186
.area text(rom, con, rel)
026E .dbfile E:\iccavr代码\实验19_其他芯片使用_8515\time_8515.c
026E .dbfunc e out_data_pc232 _out_data_pc232 fV
026E ; time2 -> y+16
026E ; time1 -> y+0
026E ; i -> R20
.even
026E _out_data_pc232::
026E 00D0 rcall push_gset1
0270 A097 sbiw R28,32
0272 .dbline -1
0272 .dbline 318
0272 ; }
0272 ; /********************************************************
0272 ; 子程序名: out_data_pc232()
0272 ; 功 能: 串口发送时间数据到PC,
0272 ; 输入参数: /
0272 ; 输出参数: /
0272 ; 描 述: 包括"当前的温度是:xxx.xx摄氏度",此程序借助LCD的显示缓冲区
0272 ; ********************************************************/
0272 ; void out_data_pc232(void)
0272 ; {
0272 .dbline 320
0272 ; uchar i;
0272 ; uchar time1[16]=" 今天的日期是:";
0272 80E0 ldi R24,<L77
0274 90E0 ldi R25,>L77
0276 FE01 movw R30,R28
0278 00E1 ldi R16,16
027A 10E0 ldi R17,0
027C FA93 st -y,R31
027E EA93 st -y,R30
0280 9A93 st -y,R25
0282 8A93 st -y,R24
0284 00D0 rcall asgncblk
0286 .dbline 321
0286 ; uchar time2[16]=" 当前的时间是:";
0286 80E0 ldi R24,<L78
0288 90E0 ldi R25,>L78
028A FE01 movw R30,R28
028C 7096 adiw R30,16
028E 00E1 ldi R16,16
0290 10E0 ldi R17,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -