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

📄 软件延时.lst

📁 一个关于AVR单片机的例程
💻 LST
字号:
__start:
__text_start:
    002A E5CF      LDI	R28,0x5F
    002B E0D4      LDI	R29,4
    002C BFCD      OUT	0x3D,R28
    002D BFDE      OUT	0x3E,R29
    002E 51C0      SUBI	R28,0x10
    002F 40D0      SBCI	R29,0
    0030 EA0A      LDI	R16,0xAA
    0031 8308      STD	Y+0,R16
    0032 2400      CLR	R0
    0033 E6E0      LDI	R30,0x60
    0034 E0F0      LDI	R31,0
    0035 E010      LDI	R17,0
    0036 36E0      CPI	R30,0x60
    0037 07F1      CPC	R31,R17
    0038 F011      BEQ	0x003B
    0039 9201      ST	R0,Z+
    003A CFFB      RJMP	0x0036
    003B 8300      STD	Z+0,R16
    003C E5E4      LDI	R30,0x54
    003D E0F0      LDI	R31,0
    003E E6A0      LDI	R26,0x60
    003F E0B0      LDI	R27,0
    0040 E010      LDI	R17,0
    0041 35E4      CPI	R30,0x54
    0042 07F1      CPC	R31,R17
    0043 F021      BEQ	0x0048
    0044 95C8      LPM
    0045 9631      ADIW	R30,1
    0046 920D      ST	R0,X+
    0047 CFF9      RJMP	0x0041
    0048 940E005E  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: D:\桌面\实验教程\软件延时\main.c
(0001) //ICC-AVR application builder : 2006-1-31 下午 01:03:41
(0002) // Target : M16
(0003) // Crystal: 7.3728Mhz
(0004) 
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) #include "delay.h" //调用头文件
(0008) void port_init(void)
(0009) {
(0010) PORTA = 0x03;
_port_init:
    004B E083      LDI	R24,3
    004C BB8B      OUT	0x1B,R24
(0011) DDRA = 0x03;
    004D BB8A      OUT	0x1A,R24
(0012) PORTB = 0x00;
    004E 2422      CLR	R2
    004F BA28      OUT	0x18,R2
(0013) DDRB = 0x00;
    0050 BA27      OUT	0x17,R2
(0014) PORTC = 0x00; //m103 output only
    0051 BA25      OUT	0x15,R2
(0015) DDRC = 0x00;
    0052 BA24      OUT	0x14,R2
(0016) PORTD = 0x00;
    0053 BA22      OUT	0x12,R2
(0017) DDRD = 0x00;
    0054 BA21      OUT	0x11,R2
    0055 9508      RET
(0018) }
(0019) 
(0020) //call this routine to initialize all peripherals
(0021) void init_devices(void)
(0022) {
(0023) //stop errant interrupts until set up
(0024) CLI(); //disable all interrupts
_init_devices:
    0056 94F8      BCLR	7
(0025) port_init();
    0057 DFF3      RCALL	_port_init
(0026) MCUCR = 0x00;
    0058 2422      CLR	R2
    0059 BE25      OUT	0x35,R2
(0027) GICR = 0x00;
    005A BE2B      OUT	0x3B,R2
(0028) TIMSK = 0x00; //timer interrupt sources
    005B BE29      OUT	0x39,R2
(0029) SEI(); //re-enable interrupts
    005C 9478      BSET	7
    005D 9508      RET
(0030) //all peripherals are now initialized
(0031) }
(0032) 
(0033) void main(void)
(0034) {
(0035) 
(0036) init_devices();       //初始化
_main:
    005E DFF7      RCALL	_init_devices
    005F C008      RJMP	0x0068
(0037) 
(0038) while(1)
(0039) {
(0040) PORTB = 0x02;     //1脚为高,0脚为低,0脚灯亮
    0060 E082      LDI	R24,2
    0061 BB88      OUT	0x18,R24
(0041) delay_1s();     //延时1S
    0062 940E0075  CALL	_delay_1s
(0042) PORTB = 0x01;       //0脚为高,1脚为低,1脚灯亮
    0064 E081      LDI	R24,1
    0065 BB88      OUT	0x18,R24
(0043) delay_1s();     //延时1S
    0066 940E0075  CALL	_delay_1s
    0068 CFF7      RJMP	0x0060
    0069 9508      RET
FILE: D:\桌面\实验教程\软件延时\delay.c
(0001) /****************************
(0002) ** file_name delay.c       **
(0003) ** describe  软件延时函数  **
(0004) ** auther    古欣          **
(0005) ** Time      2007-1-31     **
(0006) *****************************/
(0007) #include "delay.h"
(0008) /***********************
(0009) ** 8M晶振下 1us
(0010) ** 也可以宏定义 8个asm("nop");
(0011) ** #define delay_1us asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
(0012) ***********************/
(0013) void delay_1us(void)
(0014) {
(0015)  asm("nop");
_delay_1us:
    006A 0000      NOP
    006B 9508      RET
(0016) }
(0017) 
(0018) /***********************
(0019) **8M时为 1000.25us
(0020) **4M时为 999.5us
(0021) **xtal 为晶振频率,单位为Mhz
(0022) ************************/
(0023) void delay_1ms(void)
(0024) {
(0025)  unsigned int i;
(0026)  for(i=(xtal*143-2);i>0;i--)
_delay_1ms:
  i                    --> R16
    006C E706      LDI	R16,0x76
    006D E014      LDI	R17,4
    006E C002      RJMP	0x0071
    006F 5001      SUBI	R16,1
    0070 4010      SBCI	R17,0
    0071 3000      CPI	R16,0
    0072 0701      CPC	R16,R17
    0073 F7D9      BNE	0x006F
    0074 9508      RET
_delay_1s:
  i                    --> R20
    0075 940E00F6  CALL	push_gset1
(0027)   ;
(0028) }
(0029) 
(0030) /***********************
(0031) ** 1S延时,误差可能稍大
(0032) ** 250ms*4=1000ms
(0033) ************************/
(0034) void delay_1s(void)
(0035) {
(0036)  unsigned int i;
(0037)    for(i=250;i>0;i--)   //250ms*4=1000ms
    0077 EF4A      LDI	R20,0xFA
    0078 E050      LDI	R21,0
    0079 C003      RJMP	0x007D
(0038)    delay_1ms();
    007A DFF1      RCALL	_delay_1ms
    007B 5041      SUBI	R20,1
    007C 4050      SBCI	R21,0
    007D 3040      CPI	R20,0
    007E 0745      CPC	R20,R21
    007F F7D1      BNE	0x007A
(0039)    for(i=250;i>0;i--)
    0080 EF4A      LDI	R20,0xFA
    0081 E050      LDI	R21,0
    0082 C003      RJMP	0x0086
(0040)    delay_1ms();
    0083 DFE8      RCALL	_delay_1ms
    0084 5041      SUBI	R20,1
    0085 4050      SBCI	R21,0
    0086 3040      CPI	R20,0
    0087 0745      CPC	R20,R21
    0088 F7D1      BNE	0x0083
(0041)    for(i=250;i>0;i--)
    0089 EF4A      LDI	R20,0xFA
    008A E050      LDI	R21,0
    008B C003      RJMP	0x008F
(0042)    delay_1ms();
    008C DFDF      RCALL	_delay_1ms
    008D 5041      SUBI	R20,1
    008E 4050      SBCI	R21,0
    008F 3040      CPI	R20,0
    0090 0745      CPC	R20,R21
    0091 F7D1      BNE	0x008C
(0043)    for(i=250;i>0;i--)
    0092 EF4A      LDI	R20,0xFA
    0093 E050      LDI	R21,0
    0094 C003      RJMP	0x0098
(0044)    delay_1ms();
    0095 DFD6      RCALL	_delay_1ms
    0096 5041      SUBI	R20,1
    0097 4050      SBCI	R21,0
    0098 3040      CPI	R20,0
    0099 0745      CPC	R20,R21
    009A F7D1      BNE	0x0095
    009B 940E00F9  CALL	pop_gset1
    009D 9508      RET
_delay_us:
  i                    --> R20
  n                    --> R22
    009E 940E00F4  CALL	push_gset2
    00A0 01B8      MOVW	R22,R16
(0045) }
(0046) 
(0047) /***********************
(0048) **微秒级延时
(0049) ************************/
(0050) void delay_us(unsigned int n)
(0051) {
(0052)  unsigned int i;
(0053)  for(i=n;i>0;i--)
    00A1 01AB      MOVW	R20,R22
    00A2 C003      RJMP	0x00A6
(0054)  delay_1us();
    00A3 DFC6      RCALL	_delay_1us
    00A4 5041      SUBI	R20,1
    00A5 4050      SBCI	R21,0
    00A6 3040      CPI	R20,0
    00A7 0745      CPC	R20,R21
    00A8 F7D1      BNE	0x00A3
    00A9 940E00EB  CALL	pop_gset2
    00AB 9508      RET
_delay_ms:
  i                    --> R20
  n                    --> R22
    00AC 940E00F4  CALL	push_gset2
    00AE 01B8      MOVW	R22,R16
(0055) }
(0056) 
(0057) /***********************
(0058) **毫秒级延时
(0059) ************************/
(0060) void delay_ms(unsigned int n)
(0061) {
(0062)  unsigned int i;
(0063)  for(i=n;i>0;i--)
    00AF 01AB      MOVW	R20,R22
    00B0 C003      RJMP	0x00B4
(0064)  delay_1ms();
    00B1 DFBA      RCALL	_delay_1ms
    00B2 5041      SUBI	R20,1
    00B3 4050      SBCI	R21,0
    00B4 3040      CPI	R20,0
    00B5 0745      CPC	R20,R21
    00B6 F7D1      BNE	0x00B1
    00B7 940E00EB  CALL	pop_gset2
    00B9 9508      RET
_delay_s:
  j                    --> R20
  i                    --> R22
  n                    --> R22
    00BA 940E00F4  CALL	push_gset2
    00BC 01B8      MOVW	R22,R16
(0065) }
(0066) 
(0067) /***********************
(0068) **秒级延时,太浪费资源,不建议使用
(0069) ************************/
(0070) void delay_s(unsigned int n)
(0071) {
(0072)  unsigned int i,j;
(0073)  for(j=n;j>0;j--)
    00BD 01AB      MOVW	R20,R22
    00BE C026      RJMP	0x00E5
(0074)   {
(0075)    for(i=250;i>0;i--)   //250ms*4=1000ms
    00BF EF6A      LDI	R22,0xFA
    00C0 E070      LDI	R23,0
    00C1 C003      RJMP	0x00C5
(0076)    delay_1ms();
    00C2 DFA9      RCALL	_delay_1ms
    00C3 5061      SUBI	R22,1
    00C4 4070      SBCI	R23,0
    00C5 3060      CPI	R22,0
    00C6 0767      CPC	R22,R23
    00C7 F7D1      BNE	0x00C2
(0077)    for(i=250;i>0;i--)
    00C8 EF6A      LDI	R22,0xFA
    00C9 E070      LDI	R23,0
    00CA C003      RJMP	0x00CE
(0078)    delay_1ms();
    00CB DFA0      RCALL	_delay_1ms
    00CC 5061      SUBI	R22,1
    00CD 4070      SBCI	R23,0
    00CE 3060      CPI	R22,0
    00CF 0767      CPC	R22,R23
    00D0 F7D1      BNE	0x00CB
(0079)    for(i=250;i>0;i--)
    00D1 EF6A      LDI	R22,0xFA
    00D2 E070      LDI	R23,0
    00D3 C003      RJMP	0x00D7
(0080)    delay_1ms();
    00D4 DF97      RCALL	_delay_1ms
    00D5 5061      SUBI	R22,1
    00D6 4070      SBCI	R23,0
    00D7 3060      CPI	R22,0
    00D8 0767      CPC	R22,R23
    00D9 F7D1      BNE	0x00D4
(0081)    for(i=250;i>0;i--)
    00DA EF6A      LDI	R22,0xFA
    00DB E070      LDI	R23,0
    00DC C003      RJMP	0x00E0
(0082)    delay_1ms();
FILE: <library>
    00DD DF8E      RCALL	_delay_1ms
    00DE 5061      SUBI	R22,1
    00DF 4070      SBCI	R23,0
    00E0 3060      CPI	R22,0
    00E1 0767      CPC	R22,R23
    00E2 F7D1      BNE	0x00DD
    00E3 5041      SUBI	R20,1
    00E4 4050      SBCI	R21,0
    00E5 3040      CPI	R20,0
    00E6 0745      CPC	R20,R21
    00E7 F6B9      BNE	0x00BF
    00E8 940E00EB  CALL	pop_gset2
    00EA 9508      RET
pop_gset2:
    00EB E0E2      LDI	R30,2
    00EC 940C00FA  JMP	pop
push_gset5:
    00EE 92FA      ST	R15,-Y
    00EF 92EA      ST	R14,-Y
push_gset4:
    00F0 92DA      ST	R13,-Y
    00F1 92CA      ST	R12,-Y
push_gset3:
    00F2 92BA      ST	R11,-Y
    00F3 92AA      ST	R10,-Y
push_gset2:
    00F4 937A      ST	R23,-Y
    00F5 936A      ST	R22,-Y
push_gset1:
    00F6 935A      ST	R21,-Y
    00F7 934A      ST	R20,-Y
    00F8 9508      RET
pop_gset1:
    00F9 E0E1      LDI	R30,1
pop:
    00FA 9149      LD	R20,Y+
    00FB 9159      LD	R21,Y+
    00FC FDE0      SBRC	R30,0
    00FD 9508      RET
    00FE 9169      LD	R22,Y+
    00FF 9179      LD	R23,Y+
    0100 FDE1      SBRC	R30,1
    0101 9508      RET
    0102 90A9      LD	R10,Y+
    0103 90B9      LD	R11,Y+
    0104 FDE2      SBRC	R30,2
    0105 9508      RET
    0106 90C9      LD	R12,Y+
    0107 90D9      LD	R13,Y+
    0108 FDE3      SBRC	R30,3
    0109 9508      RET
    010A 90E9      LD	R14,Y+
    010B 90F9      LD	R15,Y+
    010C 9508      RET

⌨️ 快捷键说明

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