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

📄 08pwm.lst

📁 用AVR单片机做的一些程序,包括跑马灯显示,PWM产生,ADC转换等
💻 LST
字号:
__text_start:
__start:
    0046 EFCF      LDI	R28,0xFF
    0047 E1D0      LDI	R29,0x10
    0048 BFCD      OUT	0x3D,R28
    0049 BFDE      OUT	0x3E,R29
    004A 51C0      SUBI	R28,0x10
    004B 40D0      SBCI	R29,0
    004C EA0A      LDI	R16,0xAA
    004D 8308      STD	Y+0,R16
    004E 2400      CLR	R0
    004F E0E0      LDI	R30,0
    0050 E0F1      LDI	R31,1
    0051 E011      LDI	R17,1
    0052 30E0      CPI	R30,0
    0053 07F1      CPC	R31,R17
    0054 F011      BEQ	0x0057
    0055 9201      ST	R0,Z+
    0056 CFFB      RJMP	0x0052
    0057 8300      STD	Z+0,R16
    0058 E8EC      LDI	R30,0x8C
    0059 E0F0      LDI	R31,0
    005A E0A0      LDI	R26,0
    005B E0B1      LDI	R27,1
    005C E010      LDI	R17,0
    005D 38EC      CPI	R30,0x8C
    005E 07F1      CPC	R31,R17
    005F F021      BEQ	0x0064
    0060 95C8      LPM
    0061 9631      ADIW	R30,1
    0062 920D      ST	R0,X+
    0063 CFF9      RJMP	0x005D
    0064 940E008B  CALL	_main
_exit:
    0066 CFFF      RJMP	_exit
_delay_ms:
  a                    --> R20
  b                    --> R22
  i                    --> R16
    0067 940E00CE  CALL	push_gset2
FILE: E:\ICCAVR\project\AVRMEG~3\icc\008-PWM-LED\main.c
(0001) /*
(0002) 实验八:
(0003) 
(0004) 	PWM实险。
(0005) 	1、利用PWM占空比调节功能,进行定时器T1输出三路动态PWM信号,
(0006) 		并将结果以亮度的型式显示在对应的LED发光二极管上。
(0007) 	2、内部1 M晶振,程序采用单任务方式,软件延时。
(0008) 	3、进行此实验请插上LED短路块。
(0009) 	4、通过此实验,可以对PWM有个初步认识,知道它的工作原理。
(0010) 		用一个定时器输出三路PWM信号,充分发辉硬件资源。
(0011) 
(0012) 	AVR  mega128学习板
(0013) 	www.iccavr.com 阿发
(0014) 	16:36 2007-10-12
(0015) */
(0016) #include "iom128v.h"
(0017) 
(0018) /*延时函数*/
(0019) void delay_ms(unsigned char i) {
(0020) 
(0021) 	unsigned char a, b;
(0022) 	for (a = 0; a < i; a++) {
    0069 2744      CLR	R20
    006A C006      RJMP	0x0071
(0023) 		for (b = 1; b; b++);
    006B E061      LDI	R22,1
    006C C001      RJMP	0x006E
    006D 9563      INC	R22
    006E 2366      TST	R22
    006F F7E9      BNE	0x006D
    0070 9543      INC	R20
    0071 1740      CP	R20,R16
    0072 F3C0      BCS	0x006B
    0073 940E00C5  CALL	pop_gset2
    0075 9508      RET
(0024) 		}
(0025) }
(0026) 
(0027) /*IO口初始化函数*/
(0028) void io_init(void) {
(0029) 
(0030) 	DDRA = 0x00;										/*方向输入*/
_io_init:
    0076 2422      CLR	R2
    0077 BA2A      OUT	0x1A,R2
(0031) 	PORTA = 0xFF;										/*打开上拉*/
    0078 EF8F      LDI	R24,0xFF
    0079 BB8B      OUT	0x1B,R24
(0032) 	DDRB = 0xFF;										/*方向输出*/
    007A BB87      OUT	0x17,R24
(0033) 	PORTB = 0xFF;										/*输出高电平*/
    007B BB88      OUT	0x18,R24
(0034) 	DDRC = 0x00;										/*不用的IO口建议设置为输入带上拉*/
    007C BA24      OUT	0x14,R2
(0035) 	PORTC = 0xFF;
    007D BB85      OUT	0x15,R24
(0036) 	DDRD = 0x00;
    007E BA21      OUT	0x11,R2
(0037) 	PORTD = 0xFF;
    007F BB82      OUT	0x12,R24
(0038) 	DDRE = 0x00;
    0080 B822      OUT	0x02,R2
(0039) 	PORTE = 0xFF;
    0081 B983      OUT	0x03,R24
(0040) 	DDRF = 0x00;
    0082 92200061  STS	0x61,R2
(0041) 	PORTF = 0xFF;
    0084 93800062  STS	0x62,R24
(0042) 	DDRG = 0x00;
    0086 92200064  STS	0x64,R2
(0043) 	PORTG = 0xFF;
    0088 93800065  STS	0x65,R24
    008A 9508      RET
(0044) }
(0045) 
(0046) void main(void) {
(0047) 
(0048) 	unsigned char i = 0;
_main:
  i                    --> R20
    008B 2744      CLR	R20
(0049) 	
(0050) 	io_init();
    008C DFE9      RCALL	_io_init
(0051) 	OCR1A = i;											/*先预设值,防止启动瞬间值为空*/
    008D 2E24      MOV	R2,R20
    008E 2433      CLR	R3
    008F BC3B      OUT	0x2B,R3
    0090 BC2A      OUT	0x2A,R2
(0052) 	OCR1B = i + 80;
    0091 2D82      MOV	R24,R2
    0092 2799      CLR	R25
    0093 5B80      SUBI	R24,0xB0
    0094 4F9F      SBCI	R25,0xFF
    0095 BD99      OUT	0x29,R25
    0096 BD88      OUT	0x28,R24
(0053) 	OCR1C = i + 160;
    0097 2D82      MOV	R24,R2
    0098 2799      CLR	R25
    0099 5680      SUBI	R24,0x60
    009A 4F9F      SBCI	R25,0xFF
    009B 93900079  STS	0x79,R25
    009D 93800078  STS	0x78,R24
(0054) 	
(0055) 	TCCR1A = (1 << WGM10);								/*8位相位修正PWM模式*/
    009F E081      LDI	R24,1
    00A0 BD8F      OUT	0x2F,R24
(0056) 	TCCR1A |= (1 << COM1A1) | (1 << COM1B1) | (1 << COM1C1);
    00A1 B58F      IN	R24,0x2F
    00A2 6A88      ORI	R24,0xA8
    00A3 BD8F      OUT	0x2F,R24
(0057) 	TCCR1B = (1 << CS10);								/*256分频*/
    00A4 E081      LDI	R24,1
    00A5 BD8E      OUT	0x2E,R24
    00A6 C01C      RJMP	0x00C3
(0058)  
(0059) 	while (1) {
(0060) 		delay_ms(150);									/*变化周期*/
    00A7 E906      LDI	R16,0x96
    00A8 DFBE      RCALL	_delay_ms
(0061) 		i ++;											/*调节角度*/
    00A9 9543      INC	R20
(0062) 		OCR1A = i | 0xC0;
    00AA 2F84      MOV	R24,R20
    00AB 2799      CLR	R25
    00AC 6C80      ORI	R24,0xC0
    00AD BD9B      OUT	0x2B,R25
    00AE BD8A      OUT	0x2A,R24
(0063) 		OCR1B = (i + 80) | 0xC0;						/*人为加入一个修改值,读整占空比*/
    00AF 2F84      MOV	R24,R20
    00B0 2799      CLR	R25
    00B1 5B80      SUBI	R24,0xB0
    00B2 4F9F      SBCI	R25,0xFF
    00B3 6C80      ORI	R24,0xC0
    00B4 BD99      OUT	0x29,R25
    00B5 BD88      OUT	0x28,R24
(0064) 		OCR1C = (i + 160) | 0xC0;						/*主要是因为LED不是线性亮度*/
    00B6 2F84      MOV	R24,R20
    00B7 2799      CLR	R25
    00B8 5680      SUBI	R24,0x60
    00B9 4F9F      SBCI	R25,0xFF
    00BA 6C80      ORI	R24,0xC0
    00BB 93900079  STS	0x79,R25
    00BD 93800078  STS	0x78,R24
(0065) 		PORTB ^= 0x01;
FILE: <library>
    00BF E081      LDI	R24,1
    00C0 B228      IN	R2,0x18
    00C1 2628      EOR	R2,R24
    00C2 BA28      OUT	0x18,R2
    00C3 CFE3      RJMP	0x00A7
    00C4 9508      RET
pop_gset2:
    00C5 E0E2      LDI	R30,2
    00C6 940C00D4  JMP	pop
push_gset5:
    00C8 92FA      ST	R15,-Y
    00C9 92EA      ST	R14,-Y
push_gset4:
    00CA 92DA      ST	R13,-Y
    00CB 92CA      ST	R12,-Y
push_gset3:
    00CC 92BA      ST	R11,-Y
    00CD 92AA      ST	R10,-Y
push_gset2:
    00CE 937A      ST	R23,-Y
    00CF 936A      ST	R22,-Y
push_gset1:
    00D0 935A      ST	R21,-Y
    00D1 934A      ST	R20,-Y
    00D2 9508      RET
pop_gset1:
    00D3 E0E1      LDI	R30,1
pop:
    00D4 9149      LD	R20,Y+
    00D5 9159      LD	R21,Y+
    00D6 FDE0      SBRC	R30,0
    00D7 9508      RET
    00D8 9169      LD	R22,Y+
    00D9 9179      LD	R23,Y+
    00DA FDE1      SBRC	R30,1
    00DB 9508      RET
    00DC 90A9      LD	R10,Y+
    00DD 90B9      LD	R11,Y+
    00DE FDE2      SBRC	R30,2
    00DF 9508      RET
    00E0 90C9      LD	R12,Y+
    00E1 90D9      LD	R13,Y+
    00E2 FDE3      SBRC	R30,3
    00E3 9508      RET
    00E4 90E9      LD	R14,Y+
    00E5 90F9      LD	R15,Y+
    00E6 9508      RET

⌨️ 快捷键说明

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