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

📄 project.lst

📁 AVR单片机C语言程序设计实例精粹
💻 LST
📖 第 1 页 / 共 3 页
字号:
(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 + -