?? tantou-mega.lst
字號:
__start:
__text_start:
03C9 E5CF LDI R28,0x5F
03CA E0D4 LDI R29,4
03CB BFCD OUT 0x3D,R28
03CC BFDE OUT 0x3E,R29
03CD 52C8 SUBI R28,0x28
03CE 40D0 SBCI R29,0
03CF EA0A LDI R16,0xAA
03D0 8308 STD Y+0,R16
03D1 2400 CLR R0
03D2 E8EE LDI R30,0x8E
03D3 E0F0 LDI R31,0
03D4 E010 LDI R17,0
03D5 3AE1 CPI R30,0xA1
03D6 07F1 CPC R31,R17
03D7 F011 BEQ 0x03DA
03D8 9201 ST R0,Z+
03D9 CFFB RJMP 0x03D5
03DA 8300 STD Z+0,R16
03DB E6E4 LDI R30,0x64
03DC E0F7 LDI R31,7
03DD E6A0 LDI R26,0x60
03DE E0B0 LDI R27,0
03DF E017 LDI R17,7
03E0 39E2 CPI R30,0x92
03E1 07F1 CPC R31,R17
03E2 F021 BEQ 0x03E7
03E3 95C8 LPM
03E4 9631 ADIW R30,1
03E5 920D ST R0,X+
03E6 CFF9 RJMP 0x03E0
03E7 940E0725 CALL _main
_exit:
03E9 CFFF RJMP _exit
FILE: D:\mega16\c\mega16.c
(0001) //**************************************************************************/
(0002) // 探頭控制器第二代mega16L
(0003) // mega16L 8M
(0004) //*************************************************************************/
(0005) //創 建 人:胡勇剛
(0006) //創建日期:2005年3月3日
(0007) //版 本 號:001
(0008) //*************************************************************************/
(0009) #define TANTOU_C
(0010) #include "config.h"
(0011)
(0012) #define key_in() ((PINB >> 5) & 0x07)
(0013)
(0014) uchar char_count;
(0015) uchar set_state;
(0016) uchar time_data[16];
(0017) uchar i;
(0018) //-------------------------------------------------------------------------
(0019)
(0020) #pragma interrupt_handler int0_isr:2
(0021) void int0_isr(void);
(0022)
(0023) #pragma interrupt_handler int1_isr:3
(0024) void int1_isr(void);
(0025)
(0026) //-------------------------------------------------------------------------
(0027) void port_int (void); //端口初始化
(0028) void init_devices(void); //單片機初始化
(0029) void delay_us (uint time); //延遲time微秒
(0030) void delay_ms (uint time); //延遲time毫秒
(0031) void count_write(uchar ,uchar ,uchar);
(0032) //-------------------------------------------------------------------------
(0033) void port_init(void)
(0034) {
(0035) PORTA = 0x00;
_port_init:
03EA 2422 CLR R2
03EB BA2B OUT 0x1B,R2
(0036) DDRA = 0x00;
03EC BA2A OUT 0x1A,R2
(0037) PORTB = 0xFF;
03ED EF8F LDI R24,0xFF
03EE BB88 OUT 0x18,R24
(0038) DDRB = 0x1F;
03EF E18F LDI R24,0x1F
03F0 BB87 OUT 0x17,R24
(0039) PORTC = 0x00; //m103 output only
03F1 BA25 OUT 0x15,R2
(0040) DDRC = 0x00;
03F2 BA24 OUT 0x14,R2
(0041) PORTD = 0xff;
03F3 EF8F LDI R24,0xFF
03F4 BB82 OUT 0x12,R24
(0042) DDRD = 0x00;
03F5 BA21 OUT 0x11,R2
03F6 9508 RET
_delay_us:
i --> R20
time --> R16
03F7 940E0B8B CALL push_gset1
(0043) }
(0044) //-------------------------------------------------------------------------
(0045)
(0046) void delay_us(uint time)
(0047) {
(0048) uint i;
(0049) for(i=0;i<time;i++)
03F9 2744 CLR R20
03FA 2755 CLR R21
03FB C00A RJMP 0x0406
(0050) {
(0051) delay_1us();
03FC 0000 NOP
03FD 0000 NOP
03FE 0000 NOP
03FF 0000 NOP
0400 0000 NOP
0401 0000 NOP
0402 0000 NOP
0403 0000 NOP
0404 5F4F SUBI R20,0xFF
0405 4F5F SBCI R21,0xFF
0406 1740 CP R20,R16
0407 0751 CPC R21,R17
0408 F398 BCS 0x03FC
0409 940E0B8E CALL pop_gset1
040B 9508 RET
_delay_ms:
i --> R20
time --> R22
040C 940E0B89 CALL push_gset2
040E 01B8 MOVW R22,R16
(0052) }
(0053) }
(0054) //-------------------------------------------------------------------------
(0055) void delay_ms(uint time)
(0056) {
(0057) uint i;
(0058) for(i=0;i<time;i++)
040F 2744 CLR R20
0410 2755 CLR R21
0411 C005 RJMP 0x0417
(0059) {
(0060) delay_us(1000);
0412 EE08 LDI R16,0xE8
0413 E013 LDI R17,3
0414 DFE2 RCALL _delay_us
0415 5F4F SUBI R20,0xFF
0416 4F5F SBCI R21,0xFF
0417 1746 CP R20,R22
0418 0757 CPC R21,R23
0419 F3C0 BCS 0x0412
041A 940E0B7A CALL pop_gset2
041C 9508 RET
_count_write:
count --> Y+6
y --> R22
x --> R20
041D 940E0B89 CALL push_gset2
041F 2F62 MOV R22,R18
0420 2F40 MOV R20,R16
0421 9722 SBIW R28,2
(0061) }
(0062) }
(0063) /******************************************************************************/
(0064) void count_write(uchar x,uchar y,uchar count)
(0065) {
(0066) lcd_print816(x,y,count_array[count >> 4]);
0422 818E LDD R24,Y+6
0423 9582 SWAP R24
0424 708F ANDI R24,0xF
0425 E092 LDI R25,2
0426 9F98 MUL R25,R24
0427 01F0 MOVW R30,R0
0428 E680 LDI R24,0x60
0429 E090 LDI R25,0
042A 0FE8 ADD R30,R24
042B 1FF9 ADC R31,R25
042C 8020 LDD R2,Z+0
042D 8031 LDD R3,Z+1
042E 8239 STD Y+1,R3
042F 8228 STD Y+0,R2
0430 2F26 MOV R18,R22
0431 2F04 MOV R16,R20
0432 940E08F2 CALL _lcd_print816
(0067) lcd_print816(x,y+8,count_array[count & 0xf]);
0434 818E LDD R24,Y+6
0435 708F ANDI R24,0xF
0436 E092 LDI R25,2
0437 9F98 MUL R25,R24
0438 01F0 MOVW R30,R0
0439 E680 LDI R24,0x60
043A E090 LDI R25,0
043B 0FE8 ADD R30,R24
043C 1FF9 ADC R31,R25
043D 8020 LDD R2,Z+0
043E 8031 LDD R3,Z+1
043F 8239 STD Y+1,R3
0440 8228 STD Y+0,R2
0441 2F26 MOV R18,R22
0442 5F28 SUBI R18,0xF8
0443 2F04 MOV R16,R20
0444 940E08F2 CALL _lcd_print816
0446 9622 ADIW R28,2
0447 940E0B7A CALL pop_gset2
0449 9508 RET
_count_reverse:
count --> Y+6
y --> R22
x --> R20
044A 940E0B89 CALL push_gset2
044C 2F62 MOV R22,R18
044D 2F40 MOV R20,R16
044E 9722 SBIW R28,2
(0068) }
(0069) /******************************************************************************/
(0070) void count_reverse(uchar x,uchar y,uchar count)
(0071) {
(0072) lcd_reverse816(x,y,count_array[count>>4]);
044F 818E LDD R24,Y+6
0450 9582 SWAP R24
0451 708F ANDI R24,0xF
0452 E092 LDI R25,2
0453 9F98 MUL R25,R24
0454 01F0 MOVW R30,R0
0455 E680 LDI R24,0x60
0456 E090 LDI R25,0
0457 0FE8 ADD R30,R24
0458 1FF9 ADC R31,R25
0459 8020 LDD R2,Z+0
045A 8031 LDD R3,Z+1
045B 8239 STD Y+1,R3
045C 8228 STD Y+0,R2
045D 2F26 MOV R18,R22
045E 2F04 MOV R16,R20
045F 940E0914 CALL _lcd_reverse816
(0073) lcd_reverse816(x,y+8,count_array[count & 0xf]);
0461 818E LDD R24,Y+6
0462 708F ANDI R24,0xF
0463 E092 LDI R25,2
0464 9F98 MUL R25,R24
0465 01F0 MOVW R30,R0
0466 E680 LDI R24,0x60
0467 E090 LDI R25,0
0468 0FE8 ADD R30,R24
0469 1FF9 ADC R31,R25
046A 8020 LDD R2,Z+0
046B 8031 LDD R3,Z+1
046C 8239 STD Y+1,R3
046D 8228 STD Y+0,R2
046E 2F26 MOV R18,R22
046F 5F28 SUBI R18,0xF8
0470 2F04 MOV R16,R20
0471 940E0914 CALL _lcd_reverse816
0473 9622 ADIW R28,2
0474 940E0B7A CALL pop_gset2
0476 9508 RET
(0074) }
(0075) /******************************************************************************/
(0076) //Watchdog initialize
(0077) // prescale: 2048K
(0078) void watchdog_init(void)
(0079) {
(0080) WDR(); //this prevents a timout on enabling
_watchdog_init:
0477 95A8 WDR
(0081) WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
0478 E08F LDI R24,0xF
0479 BD81 OUT 0x21,R24
047A 9508 RET
(0082) }
(0083) void watchdog_off(void)
(0084) {
(0085) WDR();
_watchdog_off:
047B 95A8 WDR
(0086) WDTCR |= BIT(WDTOE);
047C B581 IN R24,0x21
047D 6180 ORI R24,0x10
047E BD81 OUT 0x21,R24
(0087) WDTCR = 0x00;
047F 2422 CLR R2
0480 BC21 OUT 0x21,R2
0481 9508 RET
(0088) }
(0089) //call this routine to initialize all peripherals
(0090) void init_devices(void)
(0091) {
(0092) //stop errant interrupts until set up
(0093) CLI(); //disable all interrupts
_init_devices:
0482 94F8 BCLR 7
(0094) port_init();
0483 DF66 RCALL _port_init
(0095) watchdog_init();
0484 DFF2 RCALL _watchdog_init
(0096)
(0097) MCUCR = 0x00;
0485 2422 CLR R2
0486 BE25 OUT 0x35,R2
(0098) GICR = 0xC0;
0487 EC80 LDI R24,0xC0
0488 BF8B OUT 0x3B,R24
(0099) TIMSK = 0x00; //timer interrupt sources
0489 BE29 OUT 0x39,R2
(0100) SEI(); //re-enable interrupts
048A 9478 BSET 7
048B 9508 RET
_time_init:
048C 9721 SBIW R28,1
(0101) //all peripherals are now initialized
(0102) }
(0103)
(0104) void time_init(void)
(0105) {
(0106) /* 初始化pcf8563 */
(0107) time_data[0] = 9;
048D E089 LDI R24,0x9
048E 9380008F STS time_data,R24
(0108) time_data[1] = 0;
0490 2422 CLR R2
0491 92200090 STS time_data+1,R2
(0109) time_data[2] = 0; //控制/狀態寄存器1
0493 92200091 STS time_data+2,R2
(0110) time_data[3] = 0; //控制/狀態寄存器2
0495 92200092 STS time_data+3,R2
(0111) time_data[4] = 0; //秒
0497 92200093 STS 0x93,R2
(0112) time_data[5] = 0x30; //分
0499 E380 LDI R24,0x30
049A 93800094 STS 0x94,R24
(0113) time_data[6] = 0x12; //時
049C E182 LDI R24,0x12
049D 93800095 STS 0x95,R24
(0114) time_data[7] = 0x16; //日
049F E186 LDI R24,0x16
04A0 93800096 STS 0x96,R24
(0115) time_data[8] = 0x00; //星期
04A2 92200097 STS 0x97,R2
(0116) time_data[9] = 0x03; //月/世
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -