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

📄 pwm.lst

📁 使用Attiny24的T0、T1两个定时器产生2路的PWM波,一路8位,一路10位
💻 LST
字号:
__start:
__text_start:
      72 EFCF      LDI	R28,0xFF
      73 E2D1      LDI	R29,0x21
      74 BFCD      OUT	0x3D,R28
      75 BFDE      OUT	0x3E,R29
      76 51CE      SUBI	R28,0x1E
      77 40D0      SBCI	R29,0
      78 EA0A      LDI	R16,0xAA
      79 8308      STD	Y+0,R16
      7A 2400      CLR	R0
      7B E0E0      LDI	R30,0
      7C E0F2      LDI	R31,2
      7D E012      LDI	R17,2
      7E 30E4      CPI	R30,4
      7F 07F1      CPC	R31,R17
      80 F011      BEQ	0x0083
      81 9201      ST	R0,Z+
      82 CFFB      RJMP	0x007E
      83 8300      STD	Z+0,R16
      84 EEE4      LDI	R30,0xE4
      85 E0F0      LDI	R31,0
      86 E0A0      LDI	R26,0
      87 E0B2      LDI	R27,2
      88 E010      LDI	R17,0
      89 E000      LDI	R16,0
      8A BF0B      OUT	0x3B,R16
      8B 3EE4      CPI	R30,0xE4
      8C 07F1      CPC	R31,R17
      8D F021      BEQ	0x0092
      8E 95C8      LPM
      8F 9631      ADIW	R30,1
      90 920D      ST	R0,X+
      91 CFF9      RJMP	0x008B
      92 940E 0095 CALL	_main
_exit:
      94 CFFF      RJMP	_exit
FILE: F:\Programme\PWM\main.c
(0001) /*--------------------------------------------------------
(0002)    Atiny24-PWM:  此版本使用T0、T1共两路PWM,但目前两者还不能独立
(0003)    PWM mode:  
(0004)      TCCR0A:  COM0A1-COM0A0-COM0B1-COM0B0 - - WGM01-WGM00 
(0005) 	 TCCR0B:  FOC0A-FOC0B - - WGM02-CS02-CS01-CS00
(0006) 	 TCCR1A:  COM1A1-COM1A0-COM1B1-COM1B0 - - WGM11-WGM10
(0007)      TCCR1B:  ICNC1-ICES1 - WGM13-WGM12-CS12-CS11-CS10                          
(0008) ---------------------------------------------------------*/
(0009) #include "iot24v.h"
(0010) #include "macros.h"
(0011) #include "selffile.h"
(0012) 
(0013) unsigned int OCR0_temp,OCR1_temp;
(0014) /*----------------------------------------
(0015)   主程序
(0016) ----------------------------------------*/
(0017) void  main(void)
(0018) {
(0019)     NOP();
_main:
      95 0000      NOP
(0020)     CLI();
      96 94F8      BCLR	7
(0021) 	WTCHDOG_init();
      97 D071      RCALL	_WTCHDOG_init
(0022) 	OCR0_temp=0;
      98 2422      CLR	R2
      99 2433      CLR	R3
      9A 9230 0203 STS	OCR0_temp+1,R3
      9C 9220 0202 STS	OCR0_temp,R2
(0023) 	OCR1_temp=0;
      9E 9230 0201 STS	OCR1_temp+1,R3
      A0 9220 0200 STS	OCR1_temp,R2
(0024) 	
(0025)     MCU_init();
      A2 D05C      RCALL	_MCU_init
(0026) 	WDR();
      A3 95A8      WDR
(0027) 	SEI();
      A4 9478      BSET	7
      A5 C040      RJMP	0x00E6
(0028) 	while(1)
(0029) 	{
(0030) 	   Delay_nms(500);
      A6 EF04      LDI	R16,0xF4
      A7 E011      LDI	R17,1
      A8 940E 0119 CALL	_Delay_nms
(0031) 	   OCR0_temp+=1;
      AA 9180 0202 LDS	R24,OCR0_temp
      AC 9190 0203 LDS	R25,OCR0_temp+1
      AE 9601      ADIW	R24,1
      AF 9390 0203 STS	OCR0_temp+1,R25
      B1 9380 0202 STS	OCR0_temp,R24
(0032) 	   OCR1_temp+=0x10;
      B3 9180 0200 LDS	R24,OCR1_temp
      B5 9190 0201 LDS	R25,OCR1_temp+1
      B7 9640      ADIW	R24,0x10
      B8 9390 0201 STS	OCR1_temp+1,R25
      BA 9380 0200 STS	OCR1_temp,R24
(0033) 	   if(OCR0_temp>0xff)
      BC EF8F      LDI	R24,0xFF
      BD E090      LDI	R25,0
      BE 9020 0202 LDS	R2,OCR0_temp
      C0 9030 0203 LDS	R3,OCR0_temp+1
      C2 1582      CP	R24,R2
      C3 0593      CPC	R25,R3
      C4 F430      BCC	0x00CB
(0034) 	      OCR0_temp=0;
      C5 2422      CLR	R2
      C6 2433      CLR	R3
      C7 9230 0203 STS	OCR0_temp+1,R3
      C9 9220 0202 STS	OCR0_temp,R2
(0035) 	   if(OCR1_temp>0x3ff)
      CB EF8F      LDI	R24,0xFF
      CC E093      LDI	R25,3
      CD 9020 0200 LDS	R2,OCR1_temp
      CF 9030 0201 LDS	R3,OCR1_temp+1
      D1 1582      CP	R24,R2
      D2 0593      CPC	R25,R3
      D3 F430      BCC	0x00DA
(0036) 	      OCR1_temp=0;
      D4 2422      CLR	R2
      D5 2433      CLR	R3
      D6 9230 0201 STS	OCR1_temp+1,R3
      D8 9220 0200 STS	OCR1_temp,R2
(0037) 	
(0038) 	   OCR0A=OCR0_temp;
      DA 9020 0202 LDS	R2,OCR0_temp
      DC 9030 0203 LDS	R3,OCR0_temp+1
      DE BE26      OUT	0x36,R2
(0039) 	   OCR1A=OCR1_temp;
      DF 9020 0200 LDS	R2,OCR1_temp
      E1 9030 0201 LDS	R3,OCR1_temp+1
      E3 BC3B      OUT	0x2B,R3
      E4 BC2A      OUT	0x2A,R2
(0040) 	   WDR();
      E5 95A8      WDR
      E6 CFBF      RJMP	0x00A6
      E7 9508      RET
(0041) 	}
(0042) }
(0043) 
(0044) /*----------------------------------------
(0045)   系统初始化
(0046) ----------------------------------------*/
(0047) void  timer1_init(void)
(0048) {
(0049) 	TCNT1H=0x00;
_timer1_init:
      E8 2422      CLR	R2
      E9 BC2D      OUT	0x2D,R2
(0050) 	TCNT1L=0x00;
      EA BC2C      OUT	0x2C,R2
(0051) 	OCR1AH=0x00;             //
      EB BC2B      OUT	0x2B,R2
(0052) 	OCR1AL=0xff;
      EC EF8F      LDI	R24,0xFF
      ED BD8A      OUT	0x2A,R24
(0053) 	TIMSK1=0x00;
      EE B82C      OUT	0x0C,R2
(0054) 	TCCR1A=(1<<COM1A1)|(1<<WGM10)|(1<<WGM11);    //
      EF E883      LDI	R24,0x83
      F0 BD8F      OUT	0x2F,R24
(0055) 	TCCR1B=(1<<CS10);
      F1 E081      LDI	R24,1
      F2 BD8E      OUT	0x2E,R24
      F3 9508      RET
(0056) }
(0057) 
(0058) void  timer0_init(void)
(0059) {
(0060)     TCCR0B=0x00;
_timer0_init:
      F4 2422      CLR	R2
      F5 BE23      OUT	0x33,R2
(0061) 	TCNT0=0x00;      //0xb0
      F6 BE22      OUT	0x32,R2
(0062) 	OCR0A=0x80;
      F7 E880      LDI	R24,0x80
      F8 BF86      OUT	0x36,R24
(0063) 	TIMSK0=0x00;
      F9 BE29      OUT	0x39,R2
(0064) 	TCCR0A=(1<<COM0A1)|(1<<WGM00); 
      FA E881      LDI	R24,0x81
      FB BF80      OUT	0x30,R24
(0065) 	TCCR0B=(1<<CS00);
      FC E081      LDI	R24,1
      FD BF83      OUT	0x33,R24
      FE 9508      RET
(0066) }
(0067) 
(0068) void  MCU_init(void)
(0069) {
(0070)     DDRA=(1<<PA6)|(1<<PA5);
_MCU_init:
      FF E680      LDI	R24,0x60
     100 BB8A      OUT	0x1A,R24
(0071) 	DDRB=(1<<PB2);
     101 E084      LDI	R24,4
     102 BB87      OUT	0x17,R24
(0072) 	MCUCR = 0x00;
     103 2422      CLR	R2
     104 BE25      OUT	0x35,R2
(0073)     GIMSK = 0x00;
     105 BE2B      OUT	0x3B,R2
(0074)     timer0_init();
     106 DFED      RCALL	_timer0_init
(0075) 	timer1_init();
     107 DFE0      RCALL	_timer1_init
     108 9508      RET
(0076) }
(0077) 
(0078) /*----------------------------------------
(0079)   看门狗设置
(0080) ----------------------------------------*/
(0081) void  WTCHDOG_init(void)     //WTCHDOG: use the least frequency,about 2S
(0082) {
(0083)     WDR();
_WTCHDOG_init:
     109 95A8      WDR
(0084) 	WDTCSR=0x9f;
     10A E98F      LDI	R24,0x9F
     10B BD81      OUT	0x21,R24
(0085) 	WDTCSR=0x0f;
     10C E08F      LDI	R24,0xF
     10D BD81      OUT	0x21,R24
     10E 9508      RET
FILE: F:\Programme\PWM\delay.c
(0001) #include "iot24v.h"
(0002) #include "macros.h"
(0003) #include "selffile.h"
(0004) 
(0005) void  Delay_1ms(void)
(0006) {
(0007)     unsigned int  i;
(0008) 	for(i=1;i<1142;i++)
_Delay_1ms:
  i                    --> R16
     10F E001      LDI	R16,1
     110 E010      LDI	R17,0
     111 C002      RJMP	0x0114
     112 5F0F      SUBI	R16,0xFF
     113 4F1F      SBCI	R17,0xFF
     114 3706      CPI	R16,0x76
     115 E0E4      LDI	R30,4
     116 071E      CPC	R17,R30
     117 F3D0      BCS	0x0112
     118 9508      RET
_Delay_nms:
  i                    --> R20
  n                    --> R10
     119 940E 0128 CALL	push_xgset300C
     11B 0158      MOVW	R10,R16
(0009) 	;
(0010) }
(0011) 
(0012) void  Delay_nms(unsigned int  n)
(0013) {
(0014)     unsigned int i;
(0015) 	WDR();
     11C 95A8      WDR
(0016) 	for(i=0;i<n;i++)
     11D 2744      CLR	R20
     11E 2755      CLR	R21
     11F C003      RJMP	0x0123
(0017) 	   Delay_1ms();
FILE: <library>
     120 DFEE      RCALL	_Delay_1ms
     121 5F4F      SUBI	R20,0xFF
     122 4F5F      SBCI	R21,0xFF
     123 154A      CP	R20,R10
     124 055B      CPC	R21,R11
     125 F3D0      BCS	0x0120
     126 940C 012D JMP	pop_xgset300C
push_xgset300C:
     128 935A      ST	R21,-Y
     129 934A      ST	R20,-Y
     12A 92BA      ST	R11,-Y
     12B 92AA      ST	R10,-Y
     12C 9508      RET
pop_xgset300C:
     12D 90A9      LD	R10,Y+
     12E 90B9      LD	R11,Y+
     12F 9149      LD	R20,Y+
     130 9159      LD	R21,Y+
     131 9508      RET

⌨️ 快捷键说明

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