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

📄 tc.lst

📁 avr atmega168v Timer counter的程序
💻 LST
字号:
__text_start:
__start:
      35 EFCF      LDI	R28,0xFF
      36 E0D4      LDI	R29,4
      37 BFCD      OUT	0x3D,R28
      38 BFDE      OUT	0x3E,R29
      39 51C0      SUBI	R28,0x10
      3A 40D0      SBCI	R29,0
      3B EA0A      LDI	R16,0xAA
      3C 8308      STD	Y+0,R16
      3D 2400      CLR	R0
      3E E0E2      LDI	R30,2
      3F E0F1      LDI	R31,1
      40 E011      LDI	R17,1
      41 30E2      CPI	R30,2
      42 07F1      CPC	R31,R17
      43 F011      BEQ	0x0046
      44 9201      ST	R0,Z+
      45 CFFB      RJMP	0x0041
      46 8300      STD	Z+0,R16
      47 E6E8      LDI	R30,0x68
      48 E0F0      LDI	R31,0
      49 E0A0      LDI	R26,0
      4A E0B1      LDI	R27,1
      4B E010      LDI	R17,0
      4C 36EA      CPI	R30,0x6A
      4D 07F1      CPC	R31,R17
      4E F021      BEQ	0x0053
      4F 95C8      LPM
      50 9631      ADIW	R30,1
      51 920D      ST	R0,X+
      52 CFF9      RJMP	0x004C
      53 940E 00A9 CALL	_main
_exit:
      55 CFFF      RJMP	_exit
FILE: G:\燕洪成\gra_des\exper\inc\myfun.h
(0001) #define uchar unsigned char
(0002) //******DelayTime*******//	 
(0003) void Delayus(int time)
(0004) {     
(0005)  do
(0006)       time--;
_Delayus:
  time                 --> R16
      56 5001      SUBI	R16,1
      57 4010      SBCI	R17,0
(0007)  while(time>1);
      58 E081      LDI	R24,1
      59 E090      LDI	R25,0
      5A 1780      CP	R24,R16
      5B 0791      CPC	R25,R17
      5C F3CC      BLT	0x0056
      5D 9508      RET
_Delayms:
  time                 --> R20
      5E 934A      ST	R20,-Y
      5F 935A      ST	R21,-Y
      60 01A8      MOVW	R20,R16
(0008) }	  
(0009) void Delayms(unsigned int time)
(0010) {
      61 C005      RJMP	0x0067
(0011)  while(time!=0)
(0012) 	  {		
(0013) 	   Delayus(1000);
      62 EE08      LDI	R16,0xE8
      63 E013      LDI	R17,3
      64 DFF1      RCALL	_Delayus
(0014) 	   time--;
      65 5041      SUBI	R20,1
      66 4050      SBCI	R21,0
      67 3040      CPI	R20,0
      68 0745      CPC	R20,R21
      69 F7C1      BNE	0x0062
      6A 9159      LD	R21,Y+
      6B 9149      LD	R20,Y+
      6C 9508      RET
FILE: G:\燕洪成\gra_des\exper\tc\tc.c
(0001) // **************************************************************
(0002) // ***         实验:       Timer/Counter                     ***
(0003) // ***                       2007年10月13日                   ***
(0004) // ***         目标MCU:MEGA168v     晶振:内部  8MHZ          ***
(0005) // ***         fuse_config:CLKDIV8 disabled                   ***
(0006) // **************************************************************
(0007) //set_bit:PORTD |=(1<<PORTD3);
(0008) //clr_bit:PORTD &=~(1<<PORTD3);
(0009) #include<iom168v.h>
(0010) #include<macros.h>
(0011) #include<myfun.h>
(0012) 
(0013) void PORT_Init(void)
(0014) {
(0015)  DDRD = 0xFF;
_PORT_Init:
      6D EF8F      LDI	R24,0xFF
      6E B98A      OUT	0x0A,R24
      6F 9508      RET
(0016) }
(0017) //*************************************************//
(0018) //*******************   TC   **********************//
(0019) //*************************************************//
(0020) unsigned int counter=0;
(0021) //prescale:8;WGM: Normal;
(0022) //desired value: 5KHz
(0023) //actual value:  5.009KHz (0.2%)
(0024) void timer0_init(void)
(0025) {
(0026)  TCCR0B = 0x00; //stop
_timer0_init:
      70 2422      CLR	R2
      71 BC25      OUT	0x25,R2
(0027)  TCNT0 = 0x10; //set count
      72 E180      LDI	R24,0x10
      73 BD86      OUT	0x26,R24
(0028)  TCCR0A = 0x00;
      74 BC24      OUT	0x24,R2
(0029)  TIMSK0 = 0x01; //enable timer overflow interrupt
      75 E081      LDI	R24,1
      76 9380 006E STS	0x006E,R24
(0030)  TCCR0B = 0x02; //start timer
      78 E082      LDI	R24,2
      79 BD85      OUT	0x25,R24
      7A 9508      RET
_timer0_ovf_isr:
      7B 922A      ST	R2,-Y
      7C 923A      ST	R3,-Y
      7D 938A      ST	R24,-Y
      7E 939A      ST	R25,-Y
      7F 93EA      ST	R30,-Y
      80 B62F      IN	R2,0x3F
      81 922A      ST	R2,-Y
(0031) }
(0032) #pragma interrupt_handler timer0_ovf_isr:17
(0033) void timer0_ovf_isr(void)
(0034) {
(0035)  TCNT0 = 0x10; //set count
      82 E180      LDI	R24,0x10
      83 BD86      OUT	0x26,R24
(0036)  counter++;
      84 9180 0100 LDS	R24,counter
      86 9190 0101 LDS	R25,counter+1
      88 9601      ADIW	R24,1
      89 9390 0101 STS	counter+1,R25
      8B 9380 0100 STS	counter,R24
(0037)  if(counter == 4000)
      8D 3A80      CPI	R24,0xA0
      8E E0EF      LDI	R30,0xF
      8F 079E      CPC	R25,R30
      90 F409      BNE	0x0092
(0038) 	  PORTD |= (1<<PORTD3);
      91 9A5B      SBI	0x0B,3
(0039)  if(counter == 8000)
      92 9180 0100 LDS	R24,counter
      94 9190 0101 LDS	R25,counter+1
      96 3480      CPI	R24,0x40
      97 E1EF      LDI	R30,0x1F
      98 079E      CPC	R25,R30
      99 F439      BNE	0x00A1
(0040)       {
(0041) 	   counter = 0;
      9A 2422      CLR	R2
      9B 2433      CLR	R3
      9C 9230 0101 STS	counter+1,R3
      9E 9220 0100 STS	counter,R2
(0042) 	   PORTD &= ~(1<<PORTD3);
      A0 985B      CBI	0x0B,3
(0043) 	  }
      A1 9029      LD	R2,Y+
      A2 BE2F      OUT	0x3F,R2
      A3 91E9      LD	R30,Y+
      A4 9199      LD	R25,Y+
      A5 9189      LD	R24,Y+
      A6 9039      LD	R3,Y+
      A7 9029      LD	R2,Y+
      A8 9518      RETI
(0044) }
(0045) //*************************************************//
(0046) //****************** TC_over **********************//
(0047) //*************************************************//
(0048) void main(void)
(0049) {
(0050)  CLI();
_main:
      A9 94F8      BCLR	7
(0051)  PORT_Init();
      AA DFC2      RCALL	_PORT_Init
(0052)  timer0_init();
      AB DFC4      RCALL	_timer0_init
(0053)  SEI();
      AC 9478      BSET	7
(0054) 
(0055)  while(1) ;
FILE: <library>
      AD CFFF      RJMP	0x00AD
      AE 9508      RET

⌨️ 快捷键说明

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