📄 project.lst
字号:
(0006) // Revision : V0.0
(0007) //***************************************************************
(0008)
(0009) #include "iom16v.h"
(0010) #include "DataType.h"
(0011) #include "app.h"
(0012)
(0013) //***************************************************************
(0014) // Function : Hardware_Init
(0015) // Input : none
(0016) // Output : none
(0017) // Description : ATmega16 Hardware Initialization
(0018) //***************************************************************
(0019) void Hardware_Init(void)
(0020) {
(0021) Gpio_Init();
_Hardware_Init:
024B D003 RCALL _Gpio_Init
(0022) Timer0_Init();
024C D00D RCALL _Timer0_Init
(0023) Timer1_Init();
024D D019 RCALL _Timer1_Init
(0024) Interrupt_Init();
(0025) }
024E C02A RJMP _Interrupt_Init
(0026)
(0027) //***************************************************************
(0028) // Function : Gpio_Init
(0029) // Input : none
(0030) // Output : none
(0031) // Description : ATmega16 GPIO Initialization
(0032) //***************************************************************
(0033) void Gpio_Init(void)
(0034) {
(0035) DDRA = 0xFF;
_Gpio_Init:
024F EF8F LDI R24,0xFF
0250 BB8A OUT 0x1A,R24
(0036) PORTA = 0x00;
0251 2422 CLR R2
0252 BA2B OUT 0x1B,R2
(0037) DDRB = 0xFF;
0253 BB87 OUT 0x17,R24
(0038) PORTB = 0x00;
0254 BA28 OUT 0x18,R2
(0039) DDRC = 0xFF;
0255 BB84 OUT 0x14,R24
(0040) PORTC = 0x00;
0256 BA25 OUT 0x15,R2
(0041) DDRD = 0xFF;
0257 BB81 OUT 0x11,R24
(0042) PORTD = 0x00;
0258 BA22 OUT 0x12,R2
(0043) //while(1) {;}
(0044) }
0259 9508 RET
(0045)
(0046) //***************************************************************
(0047) // Function : Timer0_Init
(0048) // Input : none
(0049) // Output : none
(0050) // Description : ATmega16 Timer0 Initialization,10ms Interval
(0051) //***************************************************************
(0052) void Timer0_Init(void)
(0053) {
(0054) TCCR0 = 0x0D; //1024 division,8M/1024,CTC Mode
_Timer0_Init:
025A E08D LDI R24,0xD
025B BF83 OUT 0x33,R24
(0055) TCNT0 = 0x00; //Clear Counter
025C 2422 CLR R2
025D BE22 OUT 0x32,R2
(0056) OCR0 = 78; //78 * 1024/8M = 10ms
025E E48E LDI R24,0x4E
025F BF8C OUT 0x3C,R24
(0057) TIMSK |= 0x02; //Enable OCIE0
0260 B789 IN R24,0x39
0261 6082 ORI R24,2
0262 BF89 OUT 0x39,R24
(0058) TIFR |= 0x02; //Clear OCIF0
0263 B788 IN R24,0x38
0264 6082 ORI R24,2
0265 BF88 OUT 0x38,R24
(0059) }
0266 9508 RET
(0060)
(0061) //***************************************************************
(0062) // Function : Timer1_Init
(0063) // Input : none
(0064) // Output : none
(0065) // Description : ATmega16 Timer1 Initialization,1s Interval
(0066) //***************************************************************
(0067) void Timer1_Init(void)
(0068) {
(0069) TCCR1A = 0x00; //WGM1[3:0]=0100,OCR1A
_Timer1_Init:
0267 2422 CLR R2
0268 BC2F OUT 0x2F,R2
(0070) TCCR1B = 0x0D; //1024 division,8M/1024,CTC Mode
0269 E08D LDI R24,0xD
026A BD8E OUT 0x2E,R24
(0071) TCNT1 = 0x00; //Clear Counter
026B 2433 CLR R3
026C BC3D OUT 0x2D,R3
026D BC2C OUT 0x2C,R2
(0072) OCR1A = 7813; //7813 * 1024/8M = 1s
026E E885 LDI R24,0x85
026F E19E LDI R25,0x1E
0270 BD9B OUT 0x2B,R25
0271 BD8A OUT 0x2A,R24
(0073) TIMSK |= 0x10; //Enable OCIE1A
0272 B789 IN R24,0x39
0273 6180 ORI R24,0x10
0274 BF89 OUT 0x39,R24
(0074) TIFR |= 0x10; //Clear OCIF1A
0275 B788 IN R24,0x38
0276 6180 ORI R24,0x10
0277 BF88 OUT 0x38,R24
(0075) }
0278 9508 RET
(0076)
(0077) //***************************************************************
(0078) // Function : Interrupt_Init
(0079) // Input : none
(0080) // Output : none
(0081) // Description : ATmega16 Interrupt Initialization
(0082) //***************************************************************
(0083) void Interrupt_Init(void)
(0084) {
(0085) SREG |= 0x80; //Enable Global Interrupt
_Interrupt_Init:
0279 9478 BSET 7
(0086) }
027A 9508 RET
_LED_ON_OFF:
Action --> R22
Index --> R20
027B 940E02E8 CALL push_gset2
027D 2F62 MOV R22,R18
027E 2F40 MOV R20,R16
(0087)
(0088) //***************************************************************
(0089) // Function : Interrupt_Init
(0090) // Input : none
(0091) // Output : none
(0092) // Description : ATmega16 Interrupt Initialization
(0093) //***************************************************************
(0094) void LED_ON_OFF(INT8U Index,INT8U Action)
(0095) {
(0096) if(Action == cLED_ON)
027F 3061 CPI R22,1
0280 F441 BNE 0x0289
(0097) {
(0098) PORTC |= (1 << Index);
0281 E001 LDI R16,1
0282 2F14 MOV R17,R20
0283 940E031A CALL lsl8
0285 B225 IN R2,0x15
0286 2A20 OR R2,R16
0287 BA25 OUT 0x15,R2
(0099) }
0288 C009 RJMP 0x0292
(0100) else
(0101) {
(0102) PORTC &= ~(1 << Index);
0289 E001 LDI R16,1
028A 2F14 MOV R17,R20
028B 940E031A CALL lsl8
028D 2E20 MOV R2,R16
028E 9420 COM R2
028F B235 IN R3,0x15
0290 2032 AND R3,R2
0291 BA35 OUT 0x15,R3
(0103) }
(0104) }
0292 940E02CE CALL pop_gset2
0294 9508 RET
_INT2BCD:
pdata --> R20
Data --> R22
0295 940E02E8 CALL push_gset2
0297 01A9 MOVW R20,R18
0298 2F60 MOV R22,R16
(0105)
(0106) //***************************************************************
(0107) // Function : Interrupt_Init
(0108) // Input : Data - Integer Type Data
(0109) // pdata - Pointer to BCD Data Array
(0110) // Output : none
(0111) // Description : Convert Integer Data to BCD Type Data
(0112) //***************************************************************
(0113) void INT2BCD(INT8U Data,INT8U *pdata)
(0114) {
(0115) *pdata++ = Data % 10;
0299 E01A LDI R17,0xA
029A 2F06 MOV R16,R22
029B 940E02B6 CALL mod8u
029D 01FA MOVW R30,R20
029E 9301 ST R16,Z+
029F 01AF MOVW R20,R30
(0116) *pdata = Data / 10;
02A0 E01A LDI R17,0xA
02A1 2F06 MOV R16,R22
02A2 940E02B8 CALL div8u
02A4 01FA MOVW R30,R20
02A5 8300 STD Z+0,R16
(0117) }
02A6 940E02CE CALL pop_gset2
02A8 9508 RET
(0118)
(0119) INT8U DataConvert(INT8U Data)
(0120) {
(0121) if(Data <= 9)
_DataConvert:
Data --> R16
02A9 E089 LDI R24,0x9
02AA 1780 CP R24,R16
02AB F040 BCS 0x02B4
(0122) {
(0123) return(SegTable[Data]);
02AC E584 LDI R24,0x54
02AD E090 LDI R25,0
02AE 2FE0 MOV R30,R16
02AF 27FF CLR R31
02B0 0FE8 ADD R30,R24
02B1 1FF9 ADC R31,R25
02B2 9104 LPM R16,0(Z)
02B3 C001 RJMP 0x02B5
(0124) }
(0125) return(0);
FILE: <library>
02B4 2700 CLR R16
02B5 9508 RET
mod8u:
02B6 9468 BSET 6
02B7 C001 RJMP xdiv8u
div8u:
02B8 94E8 BCLR 6
xdiv8u:
02B9 932A ST R18,-Y
02BA 92FA ST R15,-Y
02BB 92EA ST R14,-Y
02BC 24FF CLR R15
02BD 24EE CLR R14
02BE E120 LDI R18,0x10
02BF 0F00 LSL R16
02C0 1CFF ROL R15
02C1 1CEE ROL R14
02C2 16E1 CP R14,R17
02C3 F010 BCS 0x02C6
02C4 1AE1 SUB R14,R17
02C5 9503 INC R16
02C6 952A DEC R18
02C7 F7B9 BNE 0x02BF
02C8 F40E BRTC 0x02CA
02C9 2D0E MOV R16,R14
02CA 90E9 LD R14,Y+
02CB 90F9 LD R15,Y+
02CC 9129 LD R18,Y+
02CD 9508 RET
pop_gset2:
02CE E0E2 LDI R30,2
02CF 940C02D5 JMP pop
push_gset1:
02D1 935A ST R21,-Y
02D2 934A ST R20,-Y
02D3 9508 RET
pop_gset1:
02D4 E0E1 LDI R30,1
pop:
02D5 9149 LD R20,Y+
02D6 9159 LD R21,Y+
02D7 FDE0 SBRC R30,0
02D8 9508 RET
02D9 9169 LD R22,Y+
02DA 9179 LD R23,Y+
02DB FDE1 SBRC R30,1
02DC 9508 RET
02DD 90A9 LD R10,Y+
02DE 90B9 LD R11,Y+
02DF FDE2 SBRC R30,2
02E0 9508 RET
02E1 90C9 LD R12,Y+
02E2 90D9 LD R13,Y+
02E3 FDE3 SBRC R30,3
02E4 9508 RET
02E5 90E9 LD R14,Y+
02E6 90F9 LD R15,Y+
02E7 9508 RET
push_gset2:
02E8 937A ST R23,-Y
02E9 936A ST R22,-Y
02EA 940C02D1 JMP push_gset1
push_lset:
02EC 93FA ST R31,-Y
02ED 93EA ST R30,-Y
02EE 93BA ST R27,-Y
02EF 93AA ST R26,-Y
02F0 939A ST R25,-Y
02F1 938A ST R24,-Y
02F2 933A ST R19,-Y
02F3 932A ST R18,-Y
02F4 931A ST R17,-Y
02F5 930A ST R16,-Y
02F6 929A ST R9,-Y
02F7 928A ST R8,-Y
02F8 927A ST R7,-Y
02F9 926A ST R6,-Y
02FA 925A ST R5,-Y
02FB 924A ST R4,-Y
02FC 923A ST R3,-Y
02FD 922A ST R2,-Y
02FE 921A ST R1,-Y
02FF 920A ST R0,-Y
0300 B60F IN R0,0x3F
0301 920A ST R0,-Y
0302 9508 RET
pop_lset:
0303 9009 LD R0,Y+
0304 BE0F OUT 0x3F,R0
0305 9009 LD R0,Y+
0306 9019 LD R1,Y+
0307 9029 LD R2,Y+
0308 9039 LD R3,Y+
0309 9049 LD R4,Y+
030A 9059 LD R5,Y+
030B 9069 LD R6,Y+
030C 9079 LD R7,Y+
030D 9089 LD R8,Y+
030E 9099 LD R9,Y+
030F 9109 LD R16,Y+
0310 9119 LD R17,Y+
0311 9129 LD R18,Y+
0312 9139 LD R19,Y+
0313 9189 LD R24,Y+
0314 9199 LD R25,Y+
0315 91A9 LD R26,Y+
0316 91B9 LD R27,Y+
0317 91E9 LD R30,Y+
0318 91F9 LD R31,Y+
0319 9508 RET
lsl8:
031A 2311 TST R17
031B F019 BEQ 0x031F
031C 0F00 LSL R16
031D 951A DEC R17
031E CFFB RJMP lsl8
031F 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -