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

📄 低频频率计.lst

📁 AVR之ATMega16
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_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 E6E0      LDI	R30,0x60
    0040 E0F0      LDI	R31,0
    0041 E010      LDI	R17,0
    0042 36E4      CPI	R30,0x64
    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 E6EC      LDI	R30,0x6C
    0049 E0F0      LDI	R31,0
    004A E6A0      LDI	R26,0x60
    004B E0B0      LDI	R27,0
    004C E010      LDI	R17,0
    004D 36EC      CPI	R30,0x6C
    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 940E00E9  CALL	_main
_exit:
    0056 CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\低频频率计\delay.h
(0001) #define xtal  8                      //8MS
(0002) /************************************************************
(0003) *   函数名称:void DelayUS(unsigned int time)
(0004) *   功    能:软件延时1.1Us 
(0005) *   入口参数:time 延时时间
(0006) *   出口参数:无
(0007) ************************************************************/
(0008) void DelayUS(unsigned int time)
(0009) {   
_DelayUS:
  time                 --> R16
    0057 C002      RJMP	0x005A
(0010)      while(time>1)
(0011) 	    time--; 
    0058 5001      SUBI	R16,1
    0059 4010      SBCI	R17,0
    005A E081      LDI	R24,1
    005B E090      LDI	R25,0
    005C 1780      CP	R24,R16
    005D 0791      CPC	R25,R17
    005E F3C8      BCS	0x0058
    005F 9508      RET
_DelayMS:
  i                    --> R20
  time                 --> R16
    0060 940E0271  CALL	push_gset1
(0012) }
(0013) /************************************************************
(0014) *   函数名称:void DelayMS(unsigned int time)
(0015) *   功    能:软件延时  1/1000s
(0016) *   入口参数:time 延时时间 MS  
(0017) *   出口参数:无
(0018) ************************************************************/
(0019) void DelayMS (unsigned int time)
(0020) {
    0062 C009      RJMP	0x006C
(0021)     unsigned int i;
(0022)     while(time--)	
(0023) 	{
(0024) 	  for(i=1;i<(unsigned int)(xtal*143-2);i++)
    0063 E041      LDI	R20,1
    0064 E050      LDI	R21,0
    0065 C002      RJMP	0x0068
    0066 5F4F      SUBI	R20,0xFF
    0067 4F5F      SBCI	R21,0xFF
    0068 3746      CPI	R20,0x76
    0069 E0E4      LDI	R30,4
    006A 075E      CPC	R21,R30
    006B F3D0      BCS	0x0066
    006C 0118      MOVW	R2,R16
    006D 5001      SUBI	R16,1
    006E 4010      SBCI	R17,0
    006F 2022      TST	R2
    0070 F791      BNE	0x0063
    0071 2033      TST	R3
    0072 F781      BNE	0x0063
    0073 940E0274  CALL	pop_gset1
    0075 9508      RET
FILE: C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\低频频率计\低频频率计.c
(0001) //包含所需头文件
(0002) #include <ioM16v.h>
(0003) #include <macros.h>
(0004) #include "delay.h"
(0005) 
(0006) 
(0007) 
(0008) /*------宏定义------*/
(0009) #define uchar	unsigned char
(0010) #define uint	unsigned int
(0011) uint m,value;
(0012) const uchar led_date[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
(0013) const uchar led_seg[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
(0014) 
(0015) //端口初始化
(0016) void port_init(void)
(0017) {
(0018)  PORTA = 0xFF;
_port_init:
    0076 EF8F      LDI	R24,0xFF
    0077 BB8B      OUT	0x1B,R24
(0019)  DDRA  = 0xFF;
    0078 BB8A      OUT	0x1A,R24
(0020)  PORTB = 0xFF;
    0079 BB88      OUT	0x18,R24
(0021)  DDRB  = 0xFF;
    007A BB87      OUT	0x17,R24
(0022)  PORTC = 0x00;
    007B 2422      CLR	R2
    007C BA25      OUT	0x15,R2
(0023)  DDRC  = 0x00;
    007D BA24      OUT	0x14,R2
(0024)  PORTD = 0x40;
    007E E480      LDI	R24,0x40
    007F BB82      OUT	0x12,R24
(0025)  DDRD  = 0x00;
    0080 BA21      OUT	0x11,R2
    0081 9508      RET
(0026) }
(0027) 
(0028) 
(0029) //定时T1初始化
(0030) void timer1_init(void)
(0031) {
(0032)  TCCR1B = 0x00;//停止定时器
_timer1_init:
    0082 2422      CLR	R2
    0083 BC2E      OUT	0x2E,R2
(0033)  TIMSK |= 0x20;//中断允许
    0084 B789      IN	R24,0x39
    0085 6280      ORI	R24,0x20
    0086 BF89      OUT	0x39,R24
(0034)  TCNT1H = 0x00;
    0087 BC2D      OUT	0x2D,R2
(0035)  TCNT1L = 0x00;//初始值
    0088 BC2C      OUT	0x2C,R2
(0036)  OCR1AH = 0x00;
    0089 BC2B      OUT	0x2B,R2
(0037)  OCR1AL = 0x00;//匹配A值
    008A BC2A      OUT	0x2A,R2
(0038)  OCR1BH = 0x00;
    008B BC29      OUT	0x29,R2
(0039)  OCR1BL = 0x00;//匹配B值
    008C BC28      OUT	0x28,R2
(0040)  ICR1H  = 0xFF;
    008D EF8F      LDI	R24,0xFF
    008E BD87      OUT	0x27,R24
(0041)  ICR1L  = 0xFF;//输入捕捉匹配值
    008F BD86      OUT	0x26,R24
(0042)  TCCR1A = 0x00;
    0090 BC2F      OUT	0x2F,R2
(0043)  TCCR1B = 0x42;//启动定时器
    0091 E482      LDI	R24,0x42
    0092 BD8E      OUT	0x2E,R24
    0093 9508      RET
_timer1_capt_isr:
    0094 922A      ST	R2,-Y
    0095 923A      ST	R3,-Y
    0096 924A      ST	R4,-Y
    0097 925A      ST	R5,-Y
    0098 930A      ST	R16,-Y
    0099 931A      ST	R17,-Y
    009A 932A      ST	R18,-Y
    009B 933A      ST	R19,-Y
    009C 938A      ST	R24,-Y
    009D 93EA      ST	R30,-Y
    009E B62F      IN	R2,0x3F
    009F 922A      ST	R2,-Y
    00A0 940E026F  CALL	push_gset2
(0044) }
(0045) 
(0046) 
(0047) //定时器T1输入捕捉中断服务程序
(0048) #pragma interrupt_handler timer1_capt_isr:6
(0049) void timer1_capt_isr(void)
(0050) {
(0051)  //timer 1 input capture event, read (int)value in ICR1 using;
(0052)   TCNT1=0;
    00A2 2422      CLR	R2
    00A3 2433      CLR	R3
    00A4 BC3D      OUT	0x2D,R3
    00A5 BC2C      OUT	0x2C,R2
(0053)   value=ICR1L;            //Read low byte first (important)
    00A6 B426      IN	R2,0x26
    00A7 2433      CLR	R3
    00A8 92300061  STS	value+1,R3
    00AA 92200060  STS	value,R2
(0054)   value|=(int)ICR1H << 8; //Read high byte and shift into top byte
    00AC B427      IN	R2,0x27
    00AD 2433      CLR	R3
    00AE 2C32      MOV	R3,R2
    00AF 2422      CLR	R2
    00B0 90400060  LDS	R4,value
    00B2 90500061  LDS	R5,value+1
    00B4 2842      OR	R4,R2
    00B5 2853      OR	R5,R3
    00B6 92500061  STS	value+1,R5
    00B8 92400060  STS	value,R4
(0055)   m=1000000/value;
    00BA 0112      MOVW	R2,R4
    00BB 2444      CLR	R4
    00BC 2455      CLR	R5
    00BD E440      LDI	R20,0x40
    00BE E452      LDI	R21,0x42
    00BF E06F      LDI	R22,0xF
    00C0 E070      LDI	R23,0
    00C1 925A      ST	R5,-Y
    00C2 924A      ST	R4,-Y
    00C3 923A      ST	R3,-Y
    00C4 922A      ST	R2,-Y
    00C5 018A      MOVW	R16,R20
    00C6 019B      MOVW	R18,R22
    00C7 940E01FB  CALL	div32s
    00C9 93100063  STS	m+1,R17
    00CB 93000062  STS	m,R16
(0056)   TIFR|=BIT(ICF1);//软件写1清中断标志
    00CD B788      IN	R24,0x38
    00CE 6280      ORI	R24,0x20
    00CF BF88      OUT	0x38,R24
    00D0 940E0266  CALL	pop_gset2
    00D2 9029      LD	R2,Y+
    00D3 BE2F      OUT	0x3F,R2
    00D4 91E9      LD	R30,Y+
    00D5 9189      LD	R24,Y+
    00D6 9139      LD	R19,Y+
    00D7 9129      LD	R18,Y+
    00D8 9119      LD	R17,Y+
    00D9 9109      LD	R16,Y+
    00DA 9059      LD	R5,Y+
    00DB 9049      LD	R4,Y+
    00DC 9039      LD	R3,Y+
    00DD 9029      LD	R2,Y+
    00DE 9518      RETI
(0057) }
(0058) 
(0059) 
(0060) void init_devices(void)
(0061) {
(0062)  CLI(); //禁止所有中断
_init_devices:
    00DF 94F8      BCLR	7
(0063)  MCUCR  = 0x00;
    00E0 2422      CLR	R2
    00E1 BE25      OUT	0x35,R2
(0064)  MCUCSR = 0x80;//禁止JTAG
    00E2 E880      LDI	R24,0x80
    00E3 BF84      OUT	0x34,R24
(0065)  GICR   = 0x00;
    00E4 BE2B      OUT	0x3B,R2
(0066)  port_init();
    00E5 DF90      RCALL	_port_init
(0067)  timer1_init();
    00E6 DF9B      RCALL	_timer1_init
(0068)  SEI();//开全局中断
    00E7 9478      BSET	7
    00E8 9508      RET
(0069) }
(0070) //主函数
(0071) void main(void)
(0072) {
(0073)  init_devices();
_main:
    00E9 DFF5      RCALL	_init_devices
    00EA C0EC      RJMP	0x01D7
(0074)  //在这继续添加你的代码
(0075)  while(1)
(0076)  {
(0077)   PORTB=led_date[m%10];
    00EB E02A      LDI	R18,0xA
    00EC E030      LDI	R19,0
    00ED 91000062  LDS	R16,m
    00EF 91100063  LDS	R17,m+1
    00F1 940E01D9  CALL	mod16u
    00F3 01F8      MOVW	R30,R16
    00F4 E584      LDI	R24,0x54
    00F5 E090      LDI	R25,0
    00F6 0FE8      ADD	R30,R24
    00F7 1FF9      ADC	R31,R25
    00F8 91E4      LPM	R30,0(Z)
    00F9 BBE8      OUT	0x18,R30
(0078)   PORTA=0xfe;
    00FA EF8E      LDI	R24,0xFE
    00FB BB8B      OUT	0x1B,R24
(0079)   DelayUS(100);
    00FC E604      LDI	R16,0x64
    00FD E010      LDI	R17,0
    00FE DF58      RCALL	_DelayUS
(0080)   PORTB=led_date[m/10%10];
    00FF E02A      LDI	R18,0xA
    0100 E030      LDI	R19,0
    0101 91000062  LDS	R16,m
    0103 91100063  LDS	R17,m+1
    0105 940E01DB  CALL	div16u
    0107 E02A      LDI	R18,0xA
    0108 E030      LDI	R19,0
    0109 940E01D9  CALL	mod16u
    010B 01F8      MOVW	R30,R16
    010C E584      LDI	R24,0x54
    010D E090      LDI	R25,0
    010E 0FE8      ADD	R30,R24
    010F 1FF9      ADC	R31,R25
    0110 91E4      LPM	R30,0(Z)
    0111 BBE8      OUT	0x18,R30
(0081)   PORTA=0xfd;
    0112 EF8D      LDI	R24,0xFD
    0113 BB8B      OUT	0x1B,R24
(0082)   DelayUS(100); 
    0114 E604      LDI	R16,0x64
    0115 E010      LDI	R17,0
    0116 DF40      RCALL	_DelayUS
(0083)   PORTB=led_date[m/100%10];
    0117 E624      LDI	R18,0x64
    0118 E030      LDI	R19,0
    0119 91000062  LDS	R16,m
    011B 91100063  LDS	R17,m+1
    011D 940E01DB  CALL	div16u
    011F E02A      LDI	R18,0xA
    0120 E030      LDI	R19,0
    0121 940E01D9  CALL	mod16u
    0123 01F8      MOVW	R30,R16
    0124 E584      LDI	R24,0x54
    0125 E090      LDI	R25,0
    0126 0FE8      ADD	R30,R24
    0127 1FF9      ADC	R31,R25
    0128 91E4      LPM	R30,0(Z)
    0129 BBE8      OUT	0x18,R30
(0084)   PORTA=0xfb;
    012A EF8B      LDI	R24,0xFB
    012B BB8B      OUT	0x1B,R24
(0085)   DelayUS(100); 
    012C E604      LDI	R16,0x64
    012D E010      LDI	R17,0
    012E DF28      RCALL	_DelayUS
(0086)   PORTB=led_date[m/1000%10];
    012F EE28      LDI	R18,0xE8
    0130 E033      LDI	R19,3
    0131 91000062  LDS	R16,m
    0133 91100063  LDS	R17,m+1
    0135 940E01DB  CALL	div16u
    0137 E02A      LDI	R18,0xA

⌨️ 快捷键说明

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