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

📄 cycle.lst

📁 AVR单片机例程
💻 LST
字号:
__start:
__text_start:
    0018 E5CF      LDI	R28,0x5F
    0019 E0D2      LDI	R29,2
    001A BFCD      OUT	P3D,R28
    001B BFDE      OUT	P3E,R29
    001C 51C0      SUBI	R28,0x10
    001D 40D0      SBCI	R29,0
    001E EA0A      LDI	R16,0xAA
    001F 8308      STD	R16,0+Y
    0020 2400      CLR	R0
    0021 E6E6      LDI	R30,0x66
    0022 E0F0      LDI	R31,0
    0023 E010      LDI	R17,0
    0024 36EA      CPI	R30,0x6A
    0025 07F1      CPC	R31,R17
    0026 F011      BEQ	0x0029
    0027 9201      ST	R0,Z+
    0028 CFFB      RJMP	0x0024
    0029 8300      STD	R16,0+Z
    002A E2EA      LDI	R30,0x2A
    002B E0F0      LDI	R31,0
    002C E6A0      LDI	R26,0x60
    002D E0B0      LDI	R27,0
    002E E010      LDI	R17,0
    002F 33E0      CPI	R30,0x30
    0030 07F1      CPC	R31,R17
    0031 F021      BEQ	0x0036
    0032 95C8      LPM
    0033 9631      ADIW	R30,1
    0034 920D      ST	R0,X+
    0035 CFF9      RJMP	0x002F
    0036 D066      RCALL	_main
_exit:
    0037 CFFF      RJMP	_exit
FILE: D:\ICC-AVR\examples.sl\CYCLE\cycle.c
(0000) /**********************************************
(0001)              http://www.sl.com.cn
(0002)       双龙电子公司----周期测量演示程序(ICCAVR)
(0003) 	             作者:詹卫前
(0004) 		  1、学习定时器T1捕捉(捕获)中断的使用		  
(0005) **********************************************/
(0006) #include <io8515.h>
(0007) #pragma interrupt_handler Icp_timer1:4   //   设置ICP中断
(0008)           /*   七段译码字形表     */        
(0009) const unsigned char tabel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0010)           /*     显示缓冲区       */
(0011) unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
(0012) unsigned int oldcount;
(0013) unsigned int newcount;
(0014) /******************************
(0015)          1ms延时程序
(0016) ******************************/ 
(0017) void delay_1ms(void)
(0018) { 
(0019)  unsigned int i;
(0020)  for(i=1;i<1142;i++)
_delay_1ms:
  i                    --> R16
    0038 E001      LDI	R16,1
    0039 E010      LDI	R17,0
    003A C002      RJMP	0x003D
(0021)     ;
    003B 5F0F      SUBI	R16,0xFF
    003C 4F1F      SBCI	R17,0xFF
    003D 3706      CPI	R16,0x76
    003E E0E4      LDI	R30,4
    003F 071E      CPC	R17,R30
    0040 F3D0      BCS	0x003B
(0022) }
    0041 9508      RET
_display:
  i                    --> R20
    0042 D0B5      RCALL	push_gset1
(0023) /******************************
(0024)       六路动态扫描显示电路
(0025) ******************************/ 
(0026) void display(void)
(0027) {
(0028)  unsigned char i;
(0029)  for (i=0;i<6;i++)
    0043 2744      CLR	R20
    0044 C016      RJMP	0x005B
(0030)   {
(0031)    PORTB=ledbuff[i];//将显示缓冲区数据送PORTB口
    0045 E680      LDI	R24,0x60
    0046 E090      LDI	R25,0
    0047 2FE4      MOV	R30,R20
    0048 27FF      CLR	R31
    0049 0FE8      ADD	R30,R24
    004A 1FF9      ADC	R31,R25
    004B 8020      LDD	R2,0+Z
    004C BA28      OUT	P18,R2
(0032)    PORTD=~(1<<i);   //开始显示
    004D E001      LDI	R16,1
    004E 2F14      MOV	R17,R20
    004F D0C7      RCALL	lsl8
    0050 2E20      MOV	R2,R16
    0051 9420      COM	R2
    0052 BA22      OUT	P12,R2
(0033)    delay_1ms();     //每一位显示保持一定时间
    0053 DFE4      RCALL	_delay_1ms
(0034)    PORTD|=(1<<i);   //关闭显示
    0054 E001      LDI	R16,1
    0055 2F14      MOV	R17,R20
    0056 D0C0      RCALL	lsl8
    0057 B222      IN	R2,P12
    0058 2A20      OR	R2,R16
    0059 BA22      OUT	P12,R2
(0035)   }
    005A 9543      INC	R20
    005B 3046      CPI	R20,6
    005C F340      BCS	0x0045
(0036) }
    005D D09D      RCALL	pop_gset1
    005E 9508      RET
_hextobcd:
  temp                 --> R20
  i                    --> R22
  count                --> R10
    005F D0B2      RCALL	push_gset3
    0060 2EA0      MOV	R10,R16
    0061 2EB1      MOV	R11,R17
(0037) /************************************
(0038)   将count十六进制数据转换为LED七段码
(0039) ************************************/
(0040) void hextobcd(unsigned int count)
(0041) {
(0042)   unsigned char i,temp;
(0043)   for (i=0;i<6;i++)
    0062 2766      CLR	R22
    0063 C01F      RJMP	0x0083
(0044)   {temp=count%10;
    0064 E02A      LDI	R18,0xA
    0065 E030      LDI	R19,0
    0066 2D0A      MOV	R16,R10
    0067 2D1B      MOV	R17,R11
    0068 D070      RCALL	mod16u
    0069 2F40      MOV	R20,R16
    006A 2F51      MOV	R21,R17
(0045)    ledbuff[i]=tabel[temp];
    006B E18A      LDI	R24,0x1A
    006C E090      LDI	R25,0
    006D 2E24      MOV	R2,R20
    006E 2433      CLR	R3
    006F 0E28      ADD	R2,R24
    0070 1E39      ADC	R3,R25
    0071 2DE2      MOV	R30,R2
    0072 2DF3      MOV	R31,R3
    0073 95C8      LPM
    0074 E680      LDI	R24,0x60
    0075 E090      LDI	R25,0
    0076 2FE6      MOV	R30,R22
    0077 27FF      CLR	R31
    0078 0FE8      ADD	R30,R24
    0079 1FF9      ADC	R31,R25
    007A 8200      STD	R0,0+Z
(0046)    count=count/10;
    007B E02A      LDI	R18,0xA
    007C E030      LDI	R19,0
    007D 2D0A      MOV	R16,R10
    007E 2D1B      MOV	R17,R11
    007F D05B      RCALL	div16u
    0080 2EA0      MOV	R10,R16
    0081 2EB1      MOV	R11,R17
(0047)   }
    0082 9563      INC	R22
    0083 3066      CPI	R22,6
    0084 F2F8      BCS	0x0064
(0048) }
    0085 D08F      RCALL	pop_gset3
    0086 9508      RET
(0049) /******************************
(0050)           MCU初始化
(0051) ******************************/ 
(0052) void mcu_init(void)
(0053)  {
(0054)   DDRD=0x3f;
_mcu_init:
    0087 E38F      LDI	R24,0x3F
    0088 BB81      OUT	P11,R24
(0055)   DDRB=0xff;
    0089 EF8F      LDI	R24,0xFF
    008A BB87      OUT	P17,R24
(0056)   PORTD=0xff;
    008B BB82      OUT	P12,R24
(0057)   PORTB=0xff;//端口初始化
    008C BB88      OUT	P18,R24
(0058)   TIMSK =0x08;//使能T1捕捉中断
    008D E088      LDI	R24,0x8
    008E BF89      OUT	P39,R24
(0059)   TCCR1A=0x00;
    008F 2422      CLR	R2
    0090 BC2F      OUT	P2F,R2
(0060)   TCCR1B=0xC2;//CK/8,捕捉周期的单位为1us
    0091 EC82      LDI	R24,0xC2
    0092 BD8E      OUT	P2E,R24
(0061)   ICR1=0;            
    0093 2433      CLR	R3
    0094 92300045  STS	R3,0x45
    0096 92200044  STS	R2,0x44
(0062)   TCNT1=0;          
    0098 9230004D  STS	R3,0x4D
    009A 9220004C  STS	R2,0x4C
(0063)  }
    009C 9508      RET
(0064) /************************************************
(0065)         主程序:测量ICP引脚上信号的周期
(0066) ************************************************/ 
(0067) void main()
(0068) {
(0069)  mcu_init();  
_main:
    009D DFE9      RCALL	_mcu_init
(0070)  SREG|=0x80;     //使能全局中断
    009E 9478      BSET	7
(0071)  for(;;)
(0072)     { 
(0073)      if ((newcount&0xfff8)!=(oldcount&0xfff8))
    009F 91900069  LDS	R25,_oldcount+1
    00A1 91800068  LDS	R24,_oldcount
    00A3 7F88      ANDI	R24,0xF8
    00A4 91F00067  LDS	R31,_newcount+1
    00A6 91E00066  LDS	R30,_newcount
    00A8 7FE8      ANDI	R30,0xF8
    00A9 17E8      CP	R30,R24
    00AA 07F9      CPC	R31,R25
    00AB F041      BEQ	0x00B4
(0074)   	    {
(0075) 		 oldcount=newcount;
    00AC 90300067  LDS	R3,_newcount+1
    00AE 90200066  LDS	R2,_newcount
    00B0 92300069  STS	R3,_oldcount+1
    00B2 92200068  STS	R2,_oldcount
(0076) 		}
(0077) 	 hextobcd(oldcount);	
    00B4 91100069  LDS	R17,_oldcount+1
    00B6 91000068  LDS	R16,_oldcount
    00B8 DFA6      RCALL	_hextobcd
(0078) 	 display();  //显示测量值 
    00B9 DF88      RCALL	_display
(0079)     }
    00BA CFE4      RJMP	0x009F
    00BB 9508      RET
_Icp_timer1:
    00BC 922A      ST	R2,-Y
    00BD 923A      ST	R3,-Y
    00BE 938A      ST	R24,-Y
    00BF B62F      IN	R2,P3F
    00C0 922A      ST	R2,-Y
(0080) }
(0081) /**************************************
(0082)              捕捉中断处理程序
(0083) **************************************/
(0084) void Icp_timer1(void)       
(0085) {
(0086)  newcount=ICR1;
    00C1 B424      IN	R2,P24
    00C2 B435      IN	R3,P25
    00C3 92300067  STS	R3,_newcount+1
    00C5 92200066  STS	R2,_newcount
(0087)  ICR1=0;
    00C7 2422      CLR	R2
    00C8 2433      CLR	R3
    00C9 92300045  STS	R3,0x45
    00CB 92200044  STS	R2,0x44
(0088)  TCNT1=0; 
    00CD 9230004D  STS	R3,0x4D
    00CF 9220004C  STS	R2,0x4C
(0089)  TCCR1B=0xC2;
    00D1 EC82      LDI	R24,0xC2
    00D2 BD8E      OUT	P2E,R24
(0090) }
FILE: <library>
    00D3 9029      LD	R2,Y+
    00D4 BE2F      OUT	P3F,R2
    00D5 9189      LD	R24,Y+
    00D6 9039      LD	R3,Y+
    00D7 9029      LD	R2,Y+
    00D8 9518      RETI
mod16u:
    00D9 9468      BSET	6
    00DA C001      RJMP	0x00DC
div16u:
    00DB 94E8      BCLR	6
    00DC 92EA      ST	R14,-Y
    00DD 92FA      ST	R15,-Y
    00DE 938A      ST	R24,-Y
    00DF 24EE      CLR	R14
    00E0 18FF      SUB	R15,R15
    00E1 E181      LDI	R24,0x11
    00E2 1F00      ROL	R16
    00E3 1F11      ROL	R17
    00E4 958A      DEC	R24
    00E5 F439      BNE	0x00ED
    00E6 F416      BRTC	0x00E9
    00E7 2D0E      MOV	R16,R14
    00E8 2D1F      MOV	R17,R15
    00E9 9189      LD	R24,Y+
    00EA 90F9      LD	R15,Y+
    00EB 90E9      LD	R14,Y+
    00EC 9508      RET
    00ED 1CEE      ROL	R14
    00EE 1CFF      ROL	R15
    00EF 1AE2      SUB	R14,R18
    00F0 0AF3      SBC	R15,R19
    00F1 F420      BCC	0x00F6
    00F2 0EE2      ADD	R14,R18
    00F3 1EF3      ADC	R15,R19
    00F4 9488      BCLR	0
    00F5 CFEC      RJMP	0x00E2
    00F6 9408      BSET	0
    00F7 CFEA      RJMP	0x00E2
push_gset1:
    00F8 935A      ST	R21,-Y
    00F9 934A      ST	R20,-Y
    00FA 9508      RET
pop_gset1:
    00FB E0E1      LDI	R30,1
pop:
    00FC 9149      LD	R20,Y+
    00FD 9159      LD	R21,Y+
    00FE FDE0      SBRC	R30,0
    00FF 9508      RET
    0100 9169      LD	R22,Y+
    0101 9179      LD	R23,Y+
    0102 FDE1      SBRC	R30,1
    0103 9508      RET
    0104 90A9      LD	R10,Y+
    0105 90B9      LD	R11,Y+
    0106 FDE2      SBRC	R30,2
    0107 9508      RET
    0108 90C9      LD	R12,Y+
    0109 90D9      LD	R13,Y+
    010A FDE3      SBRC	R30,3
    010B 9508      RET
    010C 90E9      LD	R14,Y+
    010D 90F9      LD	R15,Y+
    010E 9508      RET
push_gset2:
    010F 937A      ST	R23,-Y
    0110 936A      ST	R22,-Y
    0111 CFE6      RJMP	push_gset1
push_gset3:
    0112 92BA      ST	R11,-Y
    0113 92AA      ST	R10,-Y
    0114 CFFA      RJMP	push_gset2
pop_gset3:
    0115 E0E4      LDI	R30,4
    0116 CFE5      RJMP	pop
lsl8:
    0117 2311      TST	R17
    0118 F019      BEQ	0x011C
    0119 0F00      LSL	R16
    011A 951A      DEC	R17
    011B CFFB      RJMP	lsl8
    011C 9508      RET

⌨️ 快捷键说明

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