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

📄 测脉宽.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
字号:
__text_start:
__start:
    0036 E5CF      LDI	R28,0x5F
    0037 E0D4      LDI	R29,4
    0038 BFCD      OUT	0x3D,R28
    0039 BFDE      OUT	0x3E,R29
    003A 51C0      SUBI	R28,0x10
    003B 40D0      SBCI	R29,0
    003C EA0A      LDI	R16,0xAA
    003D 8308      STD	Y+0,R16
    003E 2400      CLR	R0
    003F E6E7      LDI	R30,0x67
    0040 E0F0      LDI	R31,0
    0041 E010      LDI	R17,0
    0042 36EB      CPI	R30,0x6B
    0043 07F1      CPC	R31,R17
    0044 F011      BEQ	0x0047
    0045 9201      ST	R0,Z+
    0046 CFFB      RJMP	0x0042
    0047 8300      STD	Z+0,R16
    0048 E6E4      LDI	R30,0x64
    0049 E0F0      LDI	R31,0
    004A E6A0      LDI	R26,0x60
    004B E0B0      LDI	R27,0
    004C E010      LDI	R17,0
    004D 36EB      CPI	R30,0x6B
    004E 07F1      CPC	R31,R17
    004F F021      BEQ	0x0054
    0050 95C8      LPM
    0051 9631      ADIW	R30,1
    0052 920D      ST	R0,X+
    0053 CFF9      RJMP	0x004D
    0054 940E00BF  CALL	_main
_exit:
    0056 CFFF      RJMP	_exit
FILE: F:\李鹏飞\sl-avrad-m16\测脉宽\pulse_time.c
(0001) /******************************************/
(0002) /*           广州天河双龙电子公司         */
(0003) /*           http://www.sl.com.cn         */
(0004) /*                 测脉宽程序             */
(0005) /*   用跳线将PD6依次与PA0~PA7相连         */
(0006) /*           作者:lpf@sl.com.cn           */
(0007) /*             2003年8月28日              */
(0008) /*  目标MCU:MEGA16   晶振:外部(EXT) 8MHZ  */
(0009) /******************************************/
(0010) 
(0011) 
(0012) #include<iom16v.h>
(0013) #pragma interrupt_handler Icp_timer1:6
(0014) //ICP中断入口地址
(0015) #pragma interrupt_handler Timer0:10
(0016) //定时器T0中断入口地址
(0017) #pragma data:code
(0018) //设置数据区为程序存储器
(0019) //七段码译码字形表
(0020) const unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
(0021) 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0022) #pragma data:data
(0023) //设置数据区回到数据存储器
(0024) unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};//显示缓冲区
(0025) unsigned int oldcount;
(0026) unsigned int newcount;
(0027) unsigned char i=0;
(0028) //1MS延时程序
(0029) void delay_1ms()
(0030)   {
(0031)   unsigned int i;
(0032)   for(i=1;i<1142;i++);
_delay_1ms:
  i                    --> R16
    0057 E001      LDI	R16,1
    0058 E010      LDI	R17,0
    0059 C002      RJMP	0x005C
    005A 5F0F      SUBI	R16,0xFF
    005B 4F1F      SBCI	R17,0xFF
    005C 3706      CPI	R16,0x76
    005D E0E4      LDI	R30,4
    005E 071E      CPC	R17,R30
    005F F3D0      BCS	0x005A
(0033)   }
    0060 9508      RET
_display:
  i                    --> R20
    0061 940E0125  CALL	push_gset1
(0034) //六路动态扫描显示  
(0035) void display()
(0036)   {
(0037)   unsigned char i;
(0038)   for(i=0;i<6;i++)
    0063 2744      CLR	R20
    0064 C018      RJMP	0x007D
(0039)       {
(0040)       PORTB=ledbuff[i];
    0065 E680      LDI	R24,0x60
    0066 E090      LDI	R25,0
    0067 2FE4      MOV	R30,R20
    0068 27FF      CLR	R31
    0069 0FE8      ADD	R30,R24
    006A 1FF9      ADC	R31,R25
    006B 8020      LDD	R2,Z+0
    006C BA28      OUT	0x18,R2
(0041)       PORTD=~(1<<i);
    006D E001      LDI	R16,1
    006E 2F14      MOV	R17,R20
    006F 940E0144  CALL	lsl8
    0071 2E20      MOV	R2,R16
    0072 9420      COM	R2
    0073 BA22      OUT	0x12,R2
(0042)       delay_1ms();
    0074 DFE2      RCALL	_delay_1ms
(0043)       PORTD|=(1<<i);
    0075 E001      LDI	R16,1
    0076 2F14      MOV	R17,R20
    0077 940E0144  CALL	lsl8
    0079 B222      IN	R2,0x12
    007A 2A20      OR	R2,R16
    007B BA22      OUT	0x12,R2
    007C 9543      INC	R20
    007D 3046      CPI	R20,6
    007E F330      BCS	0x0065
(0044)       }
(0045)   }
    007F 940E0128  CALL	pop_gset1
    0081 9508      RET
_hextobcd:
  temp                 --> R20
  i                    --> R22
  count                --> R10
    0082 940E0140  CALL	push_gset3
    0084 0158      MOVW	R10,R16
(0046) //将COUNT十六进制数据转换为LED七段码
(0047) void hextobcd(unsigned int count)
(0048)   {
(0049)   unsigned char i,temp;
(0050)   for(i=0;i<6;i++)
    0085 2766      CLR	R22
    0086 C01B      RJMP	0x00A2
(0051)       {
(0052)       temp=count%10;
    0087 E02A      LDI	R18,0xA
    0088 E030      LDI	R19,0
    0089 0185      MOVW	R16,R10
    008A 940E0106  CALL	mod16u
    008C 2F40      MOV	R20,R16
(0053)       ledbuff[i]=table[temp];
    008D E584      LDI	R24,0x54
    008E E090      LDI	R25,0
    008F 2FE4      MOV	R30,R20
    0090 27FF      CLR	R31
    0091 0FE8      ADD	R30,R24
    0092 1FF9      ADC	R31,R25
    0093 91E4      LPM	R30,0(Z)
    0094 E680      LDI	R24,0x60
    0095 E090      LDI	R25,0
    0096 2FA6      MOV	R26,R22
    0097 27BB      CLR	R27
    0098 0FA8      ADD	R26,R24
    0099 1FB9      ADC	R27,R25
    009A 93EC      ST	R30,0(X)
(0054)       count=count/10;
    009B E02A      LDI	R18,0xA
    009C E030      LDI	R19,0
    009D 0185      MOVW	R16,R10
    009E 940E0108  CALL	div16u
    00A0 0158      MOVW	R10,R16
    00A1 9563      INC	R22
    00A2 3066      CPI	R22,6
    00A3 F318      BCS	0x0087
(0055)       }
(0056)   }
    00A4 940E0122  CALL	pop_gset3
    00A6 9508      RET
(0057) //MCU初始化
(0058) void mcu_init()
(0059)   {
(0060)   DDRA=0XFF;
_mcu_init:
    00A7 EF8F      LDI	R24,0xFF
    00A8 BB8A      OUT	0x1A,R24
(0061)   PORTA=0XFF;
    00A9 BB8B      OUT	0x1B,R24
(0062)   DDRD=0X3F;
    00AA E38F      LDI	R24,0x3F
    00AB BB81      OUT	0x11,R24
(0063)   DDRB=0XFF;
    00AC EF8F      LDI	R24,0xFF
    00AD BB87      OUT	0x17,R24
(0064)   PORTD=0XFF;
    00AE BB82      OUT	0x12,R24
(0065)   PORTB=0XFF;//端口初始化
    00AF BB88      OUT	0x18,R24
(0066)   TIMSK=0X21;//使能ICP捕捉中断;使能T/C0溢出中断
    00B0 E281      LDI	R24,0x21
    00B1 BF89      OUT	0x39,R24
(0067)   TCCR0=0X02;
    00B2 E082      LDI	R24,2
    00B3 BF83      OUT	0x33,R24
(0068)   TCCR1A=0X00;
    00B4 2422      CLR	R2
    00B5 BC2F      OUT	0x2F,R2
(0069)   TCCR1B=0XC2;//8分频;捕捉最小单位1us
    00B6 EC82      LDI	R24,0xC2
    00B7 BD8E      OUT	0x2E,R24
(0070)   TCNT0=0;
    00B8 BE22      OUT	0x32,R2
(0071)   ICR1=0;
    00B9 2433      CLR	R3
    00BA BC37      OUT	0x27,R3
    00BB BC26      OUT	0x26,R2
(0072)   TCNT1=0;
    00BC BC3D      OUT	0x2D,R3
    00BD BC2C      OUT	0x2C,R2
(0073)   }
    00BE 9508      RET
(0074) //主程序:测量ICP引脚上信号的周期
(0075) void main()
(0076)   {
(0077)   mcu_init();
_main:
    00BF DFE7      RCALL	_mcu_init
(0078)   SREG|=0X80;
    00C0 9478      BSET	7
(0079)   for(;;)
(0080)       {
(0081)          if((newcount&0xfff8)!=(oldcount&0xfff8))
    00C1 91800069  LDS	R24,_oldcount
    00C3 9190006A  LDS	R25,_oldcount+1
    00C5 7F88      ANDI	R24,0xF8
    00C6 91E00067  LDS	R30,_newcount
    00C8 91F00068  LDS	R31,_newcount+1
    00CA 7FE8      ANDI	R30,0xF8
    00CB 17E8      CP	R30,R24
    00CC 07F9      CPC	R31,R25
    00CD F041      BEQ	0x00D6
(0082)                 {
(0083)                 oldcount=newcount;
    00CE 90200067  LDS	R2,_newcount
    00D0 90300068  LDS	R3,_newcount+1
    00D2 9230006A  STS	_oldcount+1,R3
    00D4 92200069  STS	_oldcount,R2
(0084)                 }
(0085)          hextobcd(oldcount);
    00D6 91000069  LDS	R16,_oldcount
    00D8 9110006A  LDS	R17,_oldcount+1
    00DA DFA7      RCALL	_hextobcd
(0086)          display();
    00DB DF85      RCALL	_display
    00DC CFE4      RJMP	0x00C1
    00DD 9508      RET
_Icp_timer1:
    00DE 922A      ST	R2,-Y
    00DF 923A      ST	R3,-Y
    00E0 938A      ST	R24,-Y
    00E1 B62F      IN	R2,0x3F
    00E2 922A      ST	R2,-Y
(0087)       }
(0088)   }
(0089) //捕捉中断处理程序
(0090) void Icp_timer1()
(0091)   {
(0092)   newcount=ICR1;
    00E3 B426      IN	R2,0x26
    00E4 B437      IN	R3,0x27
    00E5 92300068  STS	_newcount+1,R3
    00E7 92200067  STS	_newcount,R2
(0093)   ICR1=0;
    00E9 2422      CLR	R2
    00EA 2433      CLR	R3
    00EB BC37      OUT	0x27,R3
    00EC BC26      OUT	0x26,R2
(0094)   TCNT1=0;
    00ED BC3D      OUT	0x2D,R3
    00EE BC2C      OUT	0x2C,R2
(0095)   TCCR1B=0XC2;
    00EF EC82      LDI	R24,0xC2
    00F0 BD8E      OUT	0x2E,R24
(0096)   }
    00F1 9029      LD	R2,Y+
    00F2 BE2F      OUT	0x3F,R2
    00F3 9189      LD	R24,Y+
    00F4 9039      LD	R3,Y+
    00F5 9029      LD	R2,Y+
    00F6 9518      RETI
_Timer0:
    00F7 938A      ST	R24,-Y
    00F8 939A      ST	R25,-Y
    00F9 B78F      IN	R24,0x3F
    00FA 938A      ST	R24,-Y
(0097) //方波产生中断程序
(0098) void Timer0()
(0099)   {
(0100)   i++;
    00FB 91800066  LDS	R24,__idata_start+2
    00FD 5F8F      SUBI	R24,0xFF
    00FE 93800066  STS	__idata_start+2,R24
(0101)   PORTA=i;//在PA口产生频率不同的方波
    0100 BB8B      OUT	0x1B,R24
(0102)  
(0103)   }
FILE: <library>
    0101 9189      LD	R24,Y+
    0102 BF8F      OUT	0x3F,R24
    0103 9199      LD	R25,Y+
    0104 9189      LD	R24,Y+
    0105 9518      RETI
mod16u:
    0106 9468      BSET	6
    0107 C001      RJMP	xdiv16u
div16u:
    0108 94E8      BCLR	6
xdiv16u:
    0109 92EA      ST	R14,-Y
    010A 92FA      ST	R15,-Y
    010B 938A      ST	R24,-Y
    010C 24EE      CLR	R14
    010D 24FF      CLR	R15
    010E E180      LDI	R24,0x10
    010F 0F00      LSL	R16
    0110 1F11      ROL	R17
    0111 1CEE      ROL	R14
    0112 1CFF      ROL	R15
    0113 16E2      CP	R14,R18
    0114 06F3      CPC	R15,R19
    0115 F018      BCS	0x0119
    0116 1AE2      SUB	R14,R18
    0117 0AF3      SBC	R15,R19
    0118 9503      INC	R16
    0119 958A      DEC	R24
    011A F7A1      BNE	0x010F
    011B F416      BRTC	0x011E
    011C 2D0E      MOV	R16,R14
    011D 2D1F      MOV	R17,R15
    011E 9189      LD	R24,Y+
    011F 90F9      LD	R15,Y+
    0120 90E9      LD	R14,Y+
    0121 9508      RET
pop_gset3:
    0122 E0E4      LDI	R30,4
    0123 940C0129  JMP	pop
push_gset1:
    0125 935A      ST	R21,-Y
    0126 934A      ST	R20,-Y
    0127 9508      RET
pop_gset1:
    0128 E0E1      LDI	R30,1
pop:
    0129 9149      LD	R20,Y+
    012A 9159      LD	R21,Y+
    012B FDE0      SBRC	R30,0
    012C 9508      RET
    012D 9169      LD	R22,Y+
    012E 9179      LD	R23,Y+
    012F FDE1      SBRC	R30,1
    0130 9508      RET
    0131 90A9      LD	R10,Y+
    0132 90B9      LD	R11,Y+
    0133 FDE2      SBRC	R30,2
    0134 9508      RET
    0135 90C9      LD	R12,Y+
    0136 90D9      LD	R13,Y+
    0137 FDE3      SBRC	R30,3
    0138 9508      RET
    0139 90E9      LD	R14,Y+
    013A 90F9      LD	R15,Y+
    013B 9508      RET
push_gset2:
    013C 937A      ST	R23,-Y
    013D 936A      ST	R22,-Y
    013E 940C0125  JMP	push_gset1
push_gset3:
    0140 92BA      ST	R11,-Y
    0141 92AA      ST	R10,-Y
    0142 940C013C  JMP	push_gset2
lsl8:
    0144 2311      TST	R17
    0145 F019      BEQ	0x0149
    0146 0F00      LSL	R16
    0147 951A      DEC	R17
    0148 CFFB      RJMP	lsl8
    0149 9508      RET

⌨️ 快捷键说明

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