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

📄 ac12-2.lst

📁 AVR学习资料
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    0031 E5CF      LDI	R28,0x5F
    0032 E0D4      LDI	R29,4
    0033 BFCD      OUT	0x3D,R28
    0034 BFDE      OUT	0x3E,R29
    0035 51C0      SUBI	R28,0x10
    0036 40D0      SBCI	R29,0
    0037 EA0A      LDI	R16,0xAA
    0038 8308      STD	Y+0,R16
    0039 2400      CLR	R0
    003A E6E0      LDI	R30,0x60
    003B E0F0      LDI	R31,0
    003C E010      LDI	R17,0
    003D 36E8      CPI	R30,0x68
    003E 07F1      CPC	R31,R17
    003F F011      BEQ	0x0042
    0040 9201      ST	R0,Z+
    0041 CFFB      RJMP	0x003D
    0042 8300      STD	Z+0,R16
    0043 E6E2      LDI	R30,0x62
    0044 E0F0      LDI	R31,0
    0045 E6A0      LDI	R26,0x60
    0046 E0B0      LDI	R27,0
    0047 E010      LDI	R17,0
    0048 36E2      CPI	R30,0x62
    0049 07F1      CPC	R31,R17
    004A F021      BEQ	0x004F
    004B 95C8      LPM
    004C 9631      ADIW	R30,1
    004D 920D      ST	R0,X+
    004E CFF9      RJMP	0x0048
    004F 940E006F  CALL	_main
_exit:
    0051 CFFF      RJMP	_exit
FILE: d:\MYDOCU~1\ac12-2\ac12-2.c
(0001) #include <iom16v.h>		
(0002) #include<eeprom.h>
(0003) #define uchar unsigned char	
(0004) #define uint  unsigned int	
(0005) uchar const SEG7[10]={0x3f,0x06,0x5b, 
(0006) 0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
(0007) uchar const ACT[4]={0xfe,0xfd,0xfb,0xf7};
(0008) uint key_cnt,cnt;
(0009) uint Wide,Disval;
(0010) #define SINT0 (PIND&0x04)
(0011) #define SINT1 (PIND&0x08)
(0012) 
(0013) void port_init(void)		
(0014) {							
(0015)  PORTA = 0xFF;			
_port_init:
    0052 EF8F      LDI	R24,0xFF
    0053 BB8B      OUT	0x1B,R24
(0016)  DDRA  = 0xFF;			
    0054 BB8A      OUT	0x1A,R24
(0017)  PORTB = 0xFF;			
    0055 BB88      OUT	0x18,R24
(0018)  DDRB  = 0xFF;			
    0056 BB87      OUT	0x17,R24
(0019)  PORTC = 0xFF; 			
    0057 BB85      OUT	0x15,R24
(0020)  DDRC  = 0xFF;			
    0058 BB84      OUT	0x14,R24
(0021)  PORTD = 0xFF;		
    0059 BB82      OUT	0x12,R24
(0022)  DDRD  = 0x20;			
    005A E280      LDI	R24,0x20
    005B BB81      OUT	0x11,R24
    005C 9508      RET
(0023) }				
(0024) //***************************
(0025) void timer0_init(void)
(0026) {							
(0027) TCNT0 = 0x83; 		
_timer0_init:
    005D E883      LDI	R24,0x83
    005E BF82      OUT	0x32,R24
(0028) TCCR0 = 0x03; 			
    005F E083      LDI	R24,3
    0060 BF83      OUT	0x33,R24
(0029) TIMSK = 0x01; 		
    0061 E081      LDI	R24,1
    0062 BF89      OUT	0x39,R24
    0063 9508      RET
(0030) }				
(0031) //TIMER1 initialize - prescale:8
(0032) // WGM: 0) Normal, TOP=0xFFFF
(0033) // desired value: 1000Hz
(0034) // actual value: 1000.000Hz (0.0%)
(0035) void timer1_init(void)		
(0036) {
(0037)  TCCR1A = 0x83;			
_timer1_init:
    0064 E883      LDI	R24,0x83
    0065 BD8F      OUT	0x2F,R24
(0038)  TCCR1B = 0x02; 		
    0066 E082      LDI	R24,2
    0067 BD8E      OUT	0x2E,R24
    0068 9508      RET
(0039) }			
(0040) /*********************************************/
(0041) void init_devices(void)	
(0042) {							
(0043)  port_init();		
_init_devices:
    0069 DFE8      RCALL	_port_init
(0044)  timer0_init();			
    006A DFF2      RCALL	_timer0_init
(0045)  timer1_init();			
    006B DFF8      RCALL	_timer1_init
(0046)  SREG=0x80;			
    006C E880      LDI	R24,0x80
    006D BF8F      OUT	0x3F,R24
    006E 9508      RET
_main:
  x                    --> Y+0
    006F 9724      SBIW	R28,4
(0047) }							
(0048) 
(0049) /******************主函数******************/
(0050) void main(void)
(0051) {	long x;					
(0052) init_devices();			
    0070 DFF8      RCALL	_init_devices
    0071 C03F      RJMP	0x00B1
(0053) 	while(1)			
(0054)     {	
(0055) 	x=(long)Wide;		
    0072 90200062  LDS	R2,Wide
    0074 90300063  LDS	R3,Wide+1
    0076 2444      CLR	R4
    0077 2455      CLR	R5
    0078 01FE      MOVW	R30,R28
    0079 8220      STD	Z+0,R2
    007A 8231      STD	Z+1,R3
    007B 8242      STD	Z+2,R4
    007C 8253      STD	Z+3,R5
(0056) 	x=x*5000/1023;
    007D 01FE      MOVW	R30,R28
    007E 8020      LDD	R2,Z+0
    007F 8031      LDD	R3,Z+1
    0080 8042      LDD	R4,Z+2
    0081 8053      LDD	R5,Z+3
    0082 E848      LDI	R20,0x88
    0083 E153      LDI	R21,0x13
    0084 E060      LDI	R22,0
    0085 E070      LDI	R23,0
    0086 925A      ST	R5,-Y
    0087 924A      ST	R4,-Y
    0088 923A      ST	R3,-Y
    0089 922A      ST	R2,-Y
    008A 018A      MOVW	R16,R20
    008B 019B      MOVW	R18,R22
    008C 940E0223  CALL	empy32s
    008E EF4F      LDI	R20,0xFF
    008F E053      LDI	R21,3
    0090 E060      LDI	R22,0
    0091 E070      LDI	R23,0
    0092 937A      ST	R23,-Y
    0093 936A      ST	R22,-Y
    0094 935A      ST	R21,-Y
    0095 934A      ST	R20,-Y
    0096 940E01B8  CALL	div32s
    0098 01FE      MOVW	R30,R28
    0099 8300      STD	Z+0,R16
    009A 8311      STD	Z+1,R17
    009B 8322      STD	Z+2,R18
    009C 8333      STD	Z+3,R19
(0057) 	Disval=(uint)x;
    009D 01FE      MOVW	R30,R28
    009E 8020      LDD	R2,Z+0
    009F 8031      LDD	R3,Z+1
    00A0 92300061  STS	Disval+1,R3
    00A2 92200060  STS	Disval,R2
(0058) 	OCR1AH=(uchar)(Wide>>8);
    00A4 90200062  LDS	R2,Wide
    00A6 90300063  LDS	R3,Wide+1
    00A8 2C23      MOV	R2,R3
    00A9 2433      CLR	R3
    00AA BC2B      OUT	0x2B,R2
(0059) 	OCR1AL=(uchar)(Wide&0x00ff); 
    00AB 91800062  LDS	R24,Wide
    00AD 91900063  LDS	R25,Wide+1
    00AF 7090      ANDI	R25,0
    00B0 BD8A      OUT	0x2A,R24
    00B1 CFC0      RJMP	0x0072
    00B2 9624      ADIW	R28,4
    00B3 9508      RET
_timer0_ovf_isr:
    00B4 922A      ST	R2,-Y
    00B5 923A      ST	R3,-Y
    00B6 930A      ST	R16,-Y
    00B7 931A      ST	R17,-Y
    00B8 932A      ST	R18,-Y
    00B9 933A      ST	R19,-Y
    00BA 938A      ST	R24,-Y
    00BB 939A      ST	R25,-Y
    00BC 93EA      ST	R30,-Y
    00BD 93FA      ST	R31,-Y
    00BE B62F      IN	R2,0x3F
    00BF 922A      ST	R2,-Y
(0060) 	}
(0061) }
(0062) //**************T/C0中断服务子函数*************
(0063) #pragma interrupt_handler timer0_ovf_isr:10
(0064) void timer0_ovf_isr(void)	
(0065) {							
(0066)  TCNT0 = 0x83; 			
    00C0 E883      LDI	R24,0x83
    00C1 BF82      OUT	0x32,R24
(0067)  if(++key_cnt>100)key_cnt=0;
    00C2 91800066  LDS	R24,key_cnt
    00C4 91900067  LDS	R25,key_cnt+1
    00C6 9601      ADIW	R24,1
    00C7 011C      MOVW	R2,R24
    00C8 92300067  STS	key_cnt+1,R3
    00CA 92200066  STS	key_cnt,R2
    00CC E684      LDI	R24,0x64
    00CD E090      LDI	R25,0
    00CE 1582      CP	R24,R2
    00CF 0593      CPC	R25,R3
    00D0 F430      BCC	0x00D7
    00D1 2422      CLR	R2
    00D2 2433      CLR	R3
    00D3 92300067  STS	key_cnt+1,R3
    00D5 92200066  STS	key_cnt,R2
(0068)  if(++cnt>3)cnt=0;	
    00D7 91800064  LDS	R24,cnt
    00D9 91900065  LDS	R25,cnt+1
    00DB 9601      ADIW	R24,1
    00DC 011C      MOVW	R2,R24
    00DD 92300065  STS	cnt+1,R3
    00DF 92200064  STS	cnt,R2
    00E1 E083      LDI	R24,3
    00E2 E090      LDI	R25,0
    00E3 1582      CP	R24,R2
    00E4 0593      CPC	R25,R3
    00E5 F430      BCC	0x00EC
    00E6 2422      CLR	R2
    00E7 2433      CLR	R3
    00E8 92300065  STS	cnt+1,R3
    00EA 92200064  STS	cnt,R2
(0069)  
(0070)  switch(cnt)
    00EC 90200064  LDS	R2,cnt
    00EE 90300065  LDS	R3,cnt+1
    00F0 2022      TST	R2
    00F1 F411      BNE	0x00F4
    00F2 2033      TST	R3
    00F3 F099      BEQ	0x0107
    00F4 91800064  LDS	R24,cnt
    00F6 91900065  LDS	R25,cnt+1
    00F8 3081      CPI	R24,1
    00F9 E0E0      LDI	R30,0
    00FA 079E      CPC	R25,R30
    00FB F0F9      BEQ	0x011B
    00FC 3082      CPI	R24,2
    00FD E0E0      LDI	R30,0
    00FE 079E      CPC	R25,R30
    00FF F409      BNE	0x0101
    0100 C032      RJMP	0x0133
    0101 3083      CPI	R24,3
    0102 E0E0      LDI	R30,0
    0103 079E      CPC	R25,R30
    0104 F409      BNE	0x0106
    0105 C045      RJMP	0x014B
    0106 C058      RJMP	0x015F
(0071)  {
(0072)  case 0:PORTA=SEG7[Disval%10];PORTC=ACT[0];break;
    0107 E02A      LDI	R18,0xA
    0108 E030      LDI	R19,0
    0109 91000060  LDS	R16,Disval
    010B 91100061  LDS	R17,Disval+1
    010D 940E0196  CALL	mod16u
    010F 01F8      MOVW	R30,R16
    0110 E584      LDI	R24,0x54
    0111 E090      LDI	R25,0
    0112 0FE8      ADD	R30,R24
    0113 1FF9      ADC	R31,R25
    0114 91E4      LPM	R30,0(Z)
    0115 BBEB      OUT	0x1B,R30
    0116 E5EE      LDI	R30,0x5E
    0117 E0F0      LDI	R31,0
    0118 91E4      LPM	R30,0(Z)
    0119 BBE5      OUT	0x15,R30
    011A C044      RJMP	0x015F
(0073)  case 1:PORTA=SEG7[(Disval%100)/10];PORTC=ACT[1];break;
    011B E624      LDI	R18,0x64
    011C E030      LDI	R19,0
    011D 91000060  LDS	R16,Disval
    011F 91100061  LDS	R17,Disval+1
    0121 940E0196  CALL	mod16u
    0123 E02A      LDI	R18,0xA
    0124 E030      LDI	R19,0
    0125 940E0198  CALL	div16u
    0127 01F8      MOVW	R30,R16
    0128 E584      LDI	R24,0x54
    0129 E090      LDI	R25,0
    012A 0FE8      ADD	R30,R24
    012B 1FF9      ADC	R31,R25
    012C 91E4      LPM	R30,0(Z)
    012D BBEB      OUT	0x1B,R30
    012E E5EF      LDI	R30,0x5F
    012F E0F0      LDI	R31,0
    0130 91E4      LPM	R30,0(Z)
    0131 BBE5      OUT	0x15,R30
    0132 C02C      RJMP	0x015F
(0074)  case 2:PORTA=SEG7[(Disval%1000)/100];PORTC=ACT[2];break;
    0133 EE28      LDI	R18,0xE8
    0134 E033      LDI	R19,3
    0135 91000060  LDS	R16,Disval
    0137 91100061  LDS	R17,Disval+1
    0139 940E0196  CALL	mod16u
    013B E624      LDI	R18,0x64
    013C E030      LDI	R19,0
    013D 940E0198  CALL	div16u
    013F 01F8      MOVW	R30,R16
    0140 E584      LDI	R24,0x54
    0141 E090      LDI	R25,0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -