pwm.lst

来自「avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用」· LST 代码 · 共 182 行

LST
182
字号
__text_start:
__start:
    002A E5CF      LDI	R28,0x5F
    002B E0D4      LDI	R29,4
    002C BFCD      OUT	0x3D,R28
    002D BFDE      OUT	0x3E,R29
    002E 51C0      SUBI	R28,0x10
    002F 40D0      SBCI	R29,0
    0030 EA0A      LDI	R16,0xAA
    0031 8308      STD	Y+0,R16
    0032 2400      CLR	R0
    0033 E6E0      LDI	R30,0x60
    0034 E0F0      LDI	R31,0
    0035 E010      LDI	R17,0
    0036 36E0      CPI	R30,0x60
    0037 07F1      CPC	R31,R17
    0038 F011      BEQ	0x003B
    0039 9201      ST	R0,Z+
    003A CFFB      RJMP	0x0036
    003B 8300      STD	Z+0,R16
    003C E5E4      LDI	R30,0x54
    003D E0F0      LDI	R31,0
    003E E6A0      LDI	R26,0x60
    003F E0B0      LDI	R27,0
    0040 E010      LDI	R17,0
    0041 35E4      CPI	R30,0x54
    0042 07F1      CPC	R31,R17
    0043 F021      BEQ	0x0048
    0044 95C8      LPM
    0045 9631      ADIW	R30,1
    0046 920D      ST	R0,X+
    0047 CFF9      RJMP	0x0041
    0048 940E005A  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
_delay_ms:
  a                    --> R20
  b                    --> R22
  i                    --> R16
    004B 940E0082  CALL	push_gset2
FILE: E:\ICCAVR\project\AVRMEG~2\icc\031-PWM\main.c
(0001) /*
(0002) 实验三十一:
(0003) 
(0004) 	PWM实险。
(0005) 	1、利用PWM占空比调节功能,进行PB3口LED发光二极管亮度调节效果。
(0006) 	2、内部1 M晶振,程序采用单任务方式,软件延时。
(0007) 	3、进行此实验请插上PB3、JP7(LED_EN)短路块。
(0008) 	4、通过此实验,可以对PWM有个初步认识,知道它的工作原理。
(0009) 
(0010) 	AVR  mega16学习板
(0011) 	www.iccavr.com
(0012) 	19:13 2007-7-23
(0013) */
(0014) #include "iom16v.h"
(0015) 
(0016) /*延时函数*/
(0017) void delay_ms(unsigned char i) {
(0018) 
(0019) 	unsigned char a, b;
(0020) 	for (a = 1; a < i; a++) {
    004D E041      LDI	R20,1
    004E C006      RJMP	0x0055
(0021) 		for (b = 1; b; b++) {
    004F E061      LDI	R22,1
    0050 C001      RJMP	0x0052
    0051 9563      INC	R22
    0052 2366      TST	R22
    0053 F7E9      BNE	0x0051
    0054 9543      INC	R20
    0055 1740      CP	R20,R16
    0056 F3C0      BCS	0x004F
    0057 940E0079  CALL	pop_gset2
    0059 9508      RET
(0022) 			;
(0023) 			}
(0024) 		}
(0025) }
(0026) 
(0027) void main(void) {
(0028) 
(0029) 	unsigned char i;
(0030) 
(0031) 	DDRA = 0x00;						/*方向输入*/
_main:
  i                    --> R20
    005A 2422      CLR	R2
    005B BA2A      OUT	0x1A,R2
(0032) 	PORTA = 0xFF;						/*打开上拉*/
    005C EF8F      LDI	R24,0xFF
    005D BB8B      OUT	0x1B,R24
(0033) 	DDRB = 0xFF;						/*方向输出*/
    005E BB87      OUT	0x17,R24
(0034) 	PORTB = 0xFF;						/*高电平*/
    005F BB88      OUT	0x18,R24
(0035) 	DDRC = 0x00;
    0060 BA24      OUT	0x14,R2
(0036) 	PORTC = 0xFF;
    0061 BB85      OUT	0x15,R24
(0037) 	DDRD = 0x00;
    0062 BA21      OUT	0x11,R2
(0038) 	PORTD = 0xFF;
    0063 BB82      OUT	0x12,R24
(0039) 	
(0040) 	TCCR0 = 0x61;						/*相位修正PWM模式*/
    0064 E681      LDI	R24,0x61
    0065 BF83      OUT	0x33,R24
    0066 C010      RJMP	0x0077
(0041)  
(0042) 	while (1) {
(0043) 		i = 255;
    0067 EF4F      LDI	R20,0xFF
    0068 C004      RJMP	0x006D
(0044) 		while (i) {						/*占空比减小*/
(0045) 			OCR0 = i;
    0069 BF4C      OUT	0x3C,R20
(0046) 			delay_ms(10);
    006A E00A      LDI	R16,0xA
    006B DFDF      RCALL	_delay_ms
(0047) 			i --;
    006C 954A      DEC	R20
    006D 2344      TST	R20
    006E F7D1      BNE	0x0069
(0048) 			}
(0049) 		i = 1;
    006F E041      LDI	R20,1
    0070 C004      RJMP	0x0075
(0050) 		while (i) {						/*占空比增加*/
(0051) 			OCR0 = i;
    0071 BF4C      OUT	0x3C,R20
(0052) 			delay_ms(10);
    0072 E00A      LDI	R16,0xA
    0073 DFD7      RCALL	_delay_ms
(0053) 			i ++;
FILE: <library>
    0074 9543      INC	R20
    0075 2344      TST	R20
    0076 F7D1      BNE	0x0071
    0077 CFEF      RJMP	0x0067
    0078 9508      RET
pop_gset2:
    0079 E0E2      LDI	R30,2
    007A 940C0088  JMP	pop
push_gset5:
    007C 92FA      ST	R15,-Y
    007D 92EA      ST	R14,-Y
push_gset4:
    007E 92DA      ST	R13,-Y
    007F 92CA      ST	R12,-Y
push_gset3:
    0080 92BA      ST	R11,-Y
    0081 92AA      ST	R10,-Y
push_gset2:
    0082 937A      ST	R23,-Y
    0083 936A      ST	R22,-Y
push_gset1:
    0084 935A      ST	R21,-Y
    0085 934A      ST	R20,-Y
    0086 9508      RET
pop_gset1:
    0087 E0E1      LDI	R30,1
pop:
    0088 9149      LD	R20,Y+
    0089 9159      LD	R21,Y+
    008A FDE0      SBRC	R30,0
    008B 9508      RET
    008C 9169      LD	R22,Y+
    008D 9179      LD	R23,Y+
    008E FDE1      SBRC	R30,1
    008F 9508      RET
    0090 90A9      LD	R10,Y+
    0091 90B9      LD	R11,Y+
    0092 FDE2      SBRC	R30,2
    0093 9508      RET
    0094 90C9      LD	R12,Y+
    0095 90D9      LD	R13,Y+
    0096 FDE3      SBRC	R30,3
    0097 9508      RET
    0098 90E9      LD	R14,Y+
    0099 90F9      LD	R15,Y+
    009A 9508      RET

⌨️ 快捷键说明

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