⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tantou-mega.lst

📁 is about the 51 and the LCD
💻 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 + -