📄 mega16.lis
字号:
004A ; }
004A ; }
004A ; //-------------------------------------------------------------------------
004A ; void delay_ms(uint time)
004A ; {
004A .dbline 58
004A ; uint i;
004A ; for(i=0;i<time;i++)
004A 4427 clr R20
004C 5527 clr R21
004E 05C0 xjmp L11
0050 L8:
0050 .dbline 59
0050 .dbline 60
0050 08EE ldi R16,1000
0052 13E0 ldi R17,3
0054 E2DF xcall _delay_us
0056 .dbline 61
0056 L9:
0056 .dbline 58
0056 4F5F subi R20,255 ; offset = 1
0058 5F4F sbci R21,255
005A L11:
005A .dbline 58
005A 4617 cp R20,R22
005C 5707 cpc R21,R23
005E C0F3 brlo L8
0060 .dbline -2
0060 L7:
0060 0E940000 xcall pop_gset2
0064 .dbline 0 ; func end
0064 0895 ret
0066 .dbsym r i 20 i
0066 .dbsym r time 22 i
0066 .dbend
0066 .dbfunc e count_write _count_write fV
0066 ; count -> y+6
0066 ; y -> R22
0066 ; x -> R20
.even
0066 _count_write::
0066 0E940000 xcall push_gset2
006A 622F mov R22,R18
006C 402F mov R20,R16
006E 2297 sbiw R28,2
0070 .dbline -1
0070 .dbline 65
0070 ; {
0070 ; delay_us(1000);
0070 ; }
0070 ; }
0070 ; /******************************************************************************/
0070 ; void count_write(uchar x,uchar y,uchar count)
0070 ; {
0070 .dbline 66
0070 ; lcd_print816(x,y,count_array[count >> 4]);
0070 8E81 ldd R24,y+6
0072 8295 swap R24
0074 8F70 andi R24,#0x0F
0076 92E0 ldi R25,2
0078 989F mul R25,R24
007A F001 movw R30,R0
007C 80E0 ldi R24,<_count_array
007E 90E0 ldi R25,>_count_array
0080 E80F add R30,R24
0082 F91F adc R31,R25
0084 2080 ldd R2,z+0
0086 3180 ldd R3,z+1
0088 3982 std y+1,R3
008A 2882 std y+0,R2
008C 262F mov R18,R22
008E 042F mov R16,R20
0090 0E940000 xcall _lcd_print816
0094 .dbline 67
0094 ; lcd_print816(x,y+8,count_array[count & 0xf]);
0094 8E81 ldd R24,y+6
0096 8F70 andi R24,15
0098 92E0 ldi R25,2
009A 989F mul R25,R24
009C F001 movw R30,R0
009E 80E0 ldi R24,<_count_array
00A0 90E0 ldi R25,>_count_array
00A2 E80F add R30,R24
00A4 F91F adc R31,R25
00A6 2080 ldd R2,z+0
00A8 3180 ldd R3,z+1
00AA 3982 std y+1,R3
00AC 2882 std y+0,R2
00AE 262F mov R18,R22
00B0 285F subi R18,248 ; addi 8
00B2 042F mov R16,R20
00B4 0E940000 xcall _lcd_print816
00B8 .dbline -2
00B8 L12:
00B8 2296 adiw R28,2
00BA 0E940000 xcall pop_gset2
00BE .dbline 0 ; func end
00BE 0895 ret
00C0 .dbsym l count 6 c
00C0 .dbsym r y 22 c
00C0 .dbsym r x 20 c
00C0 .dbend
00C0 .dbfunc e count_reverse _count_reverse fV
00C0 ; count -> y+6
00C0 ; y -> R22
00C0 ; x -> R20
.even
00C0 _count_reverse::
00C0 0E940000 xcall push_gset2
00C4 622F mov R22,R18
00C6 402F mov R20,R16
00C8 2297 sbiw R28,2
00CA .dbline -1
00CA .dbline 71
00CA ; }
00CA ; /******************************************************************************/
00CA ; void count_reverse(uchar x,uchar y,uchar count)
00CA ; {
00CA .dbline 72
00CA ; lcd_reverse816(x,y,count_array[count>>4]);
00CA 8E81 ldd R24,y+6
00CC 8295 swap R24
00CE 8F70 andi R24,#0x0F
00D0 92E0 ldi R25,2
00D2 989F mul R25,R24
00D4 F001 movw R30,R0
00D6 80E0 ldi R24,<_count_array
00D8 90E0 ldi R25,>_count_array
00DA E80F add R30,R24
00DC F91F adc R31,R25
00DE 2080 ldd R2,z+0
00E0 3180 ldd R3,z+1
00E2 3982 std y+1,R3
00E4 2882 std y+0,R2
00E6 262F mov R18,R22
00E8 042F mov R16,R20
00EA 0E940000 xcall _lcd_reverse816
00EE .dbline 73
00EE ; lcd_reverse816(x,y+8,count_array[count & 0xf]);
00EE 8E81 ldd R24,y+6
00F0 8F70 andi R24,15
00F2 92E0 ldi R25,2
00F4 989F mul R25,R24
00F6 F001 movw R30,R0
00F8 80E0 ldi R24,<_count_array
00FA 90E0 ldi R25,>_count_array
00FC E80F add R30,R24
00FE F91F adc R31,R25
0100 2080 ldd R2,z+0
0102 3180 ldd R3,z+1
0104 3982 std y+1,R3
0106 2882 std y+0,R2
0108 262F mov R18,R22
010A 285F subi R18,248 ; addi 8
010C 042F mov R16,R20
010E 0E940000 xcall _lcd_reverse816
0112 .dbline -2
0112 L13:
0112 2296 adiw R28,2
0114 0E940000 xcall pop_gset2
0118 .dbline 0 ; func end
0118 0895 ret
011A .dbsym l count 6 c
011A .dbsym r y 22 c
011A .dbsym r x 20 c
011A .dbend
011A .dbfunc e watchdog_init _watchdog_init fV
.even
011A _watchdog_init::
011A .dbline -1
011A .dbline 79
011A ; }
011A ; /******************************************************************************/
011A ; //Watchdog initialize
011A ; // prescale: 2048K
011A ; void watchdog_init(void)
011A ; {
011A .dbline 80
011A ; WDR(); //this prevents a timout on enabling
011A A895 wdr
011C .dbline 81
011C ; WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
011C 8FE0 ldi R24,15
011E 81BD out 0x21,R24
0120 .dbline -2
0120 L14:
0120 .dbline 0 ; func end
0120 0895 ret
0122 .dbend
0122 .dbfunc e watchdog_off _watchdog_off fV
.even
0122 _watchdog_off::
0122 .dbline -1
0122 .dbline 84
0122 ; }
0122 ; void watchdog_off(void)
0122 ; {
0122 .dbline 85
0122 ; WDR();
0122 A895 wdr
0124 .dbline 86
0124 ; WDTCR |= BIT(WDTOE);
0124 81B5 in R24,0x21
0126 8061 ori R24,16
0128 81BD out 0x21,R24
012A .dbline 87
012A ; WDTCR = 0x00;
012A 2224 clr R2
012C 21BC out 0x21,R2
012E .dbline -2
012E L15:
012E .dbline 0 ; func end
012E 0895 ret
0130 .dbend
0130 .dbfunc e init_devices _init_devices fV
.even
0130 _init_devices::
0130 .dbline -1
0130 .dbline 91
0130 ; }
0130 ; //call this routine to initialize all peripherals
0130 ; void init_devices(void)
0130 ; {
0130 .dbline 93
0130 ; //stop errant interrupts until set up
0130 ; CLI(); //disable all interrupts
0130 F894 cli
0132 .dbline 94
0132 ; port_init();
0132 66DF xcall _port_init
0134 .dbline 95
0134 ; watchdog_init();
0134 F2DF xcall _watchdog_init
0136 .dbline 97
0136 ;
0136 ; MCUCR = 0x00;
0136 2224 clr R2
0138 25BE out 0x35,R2
013A .dbline 98
013A ; GICR = 0xC0;
013A 80EC ldi R24,192
013C 8BBF out 0x3b,R24
013E .dbline 99
013E ; TIMSK = 0x00; //timer interrupt sources
013E 29BE out 0x39,R2
0140 .dbline 100
0140 ; SEI(); //re-enable interrupts
0140 7894 sei
0142 .dbline -2
0142 L16:
0142 .dbline 0 ; func end
0142 0895 ret
0144 .dbend
0144 .dbfunc e time_init _time_init fV
.even
0144 _time_init::
0144 2197 sbiw R28,1
0146 .dbline -1
0146 .dbline 105
0146 .dbline 107
0146 89E0 ldi R24,9
0148 80930100 sts _time_data,R24
014C .dbline 108
014C 2224 clr R2
014E 20920200 sts _time_data+1,R2
0152 .dbline 109
0152 20920300 sts _time_data+2,R2
0156 .dbline 110
0156 20920400 sts _time_data+3,R2
015A .dbline 111
015A 20920500 sts _time_data+4,R2
015E .dbline 112
015E 80E3 ldi R24,48
0160 80930600 sts _time_data+5,R24
0164 .dbline 113
0164 82E1 ldi R24,18
0166 80930700 sts _time_data+6,R24
016A .dbline 114
016A 86E1 ldi R24,22
016C 80930800 sts _time_data+7,R24
0170 .dbline 115
0170 20920900 sts _time_data+8,R2
0174 .dbline 116
0174 83E0 ldi R24,3
0176 80930A00 sts _time_data+9,R24
017A .dbline 118
017A 80930B00 sts _time_data+10,R24
017E .dbline 119
017E 00E0 ldi R16,<_time_data
0180 10E0 ldi R17,>_time_data
0182 0E940000 xcall _PCF8563Write
0186 0230 cpi R16,2
0188 29F4 brne L28
018A .dbline 120
018A 8FEF ldi R24,255
018C 8883 std y+0,R24
018E 2227 clr R18
0190 06E0 ldi R16,6
0192 69DF xcall _count_write
0194 L28:
0194 .dbline -2
0194 L17:
0194 2196 adiw R28,1
0196 .dbline 0 ; func end
0196 0895 ret
0198 .dbend
0198 .dbfunc e time_read _time_read fV
.even
0198 _time_read::
0198 2197 sbiw R28,1
019A .dbline -1
019A .dbline 124
019A ; //all peripherals are now initialized
019A ; }
019A ;
019A ; void time_init(void)
019A ; {
019A ; /* 初始化pcf8563 */
019A ; time_data[0] = 9;
019A ; time_data[1] = 0;
019A ; time_data[2] = 0; //控制/状态寄存器1
019A ; time_data[3] = 0; //控制/状态寄存器2
019A ; time_data[4] = 0; //秒
019A ; time_data[5] = 0x30; //分
019A ; time_data[6] = 0x12; //时
019A ; time_data[7] = 0x16; //日
019A ; time_data[8] = 0x00; //星期
019A ; time_data[9] = 0x03; //月/世
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -