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

📄 pwm.lst

📁 单片机程序AVRATMEGA8PWM程序
💻 LST
字号:
__start:
__text_start:
    0013 E5CF      LDI	R28,0x5F
    0014 E0D4      LDI	R29,4
    0015 BFCD      OUT	0x3D,R28
    0016 BFDE      OUT	0x3E,R29
    0017 51C0      SUBI	R28,0x10
    0018 40D0      SBCI	R29,0
    0019 EA0A      LDI	R16,0xAA
    001A 8308      STD	Y+0,R16
    001B 2400      CLR	R0
    001C E6E0      LDI	R30,0x60
    001D E0F0      LDI	R31,0
    001E E010      LDI	R17,0
    001F 36E0      CPI	R30,0x60
    0020 07F1      CPC	R31,R17
    0021 F011      BEQ	0x0024
    0022 9201      ST	R0,Z+
    0023 CFFB      RJMP	0x001F
    0024 8300      STD	Z+0,R16
    0025 E2E6      LDI	R30,0x26
    0026 E0F0      LDI	R31,0
    0027 E6A0      LDI	R26,0x60
    0028 E0B0      LDI	R27,0
    0029 E010      LDI	R17,0
    002A 32E6      CPI	R30,0x26
    002B 07F1      CPC	R31,R17
    002C F021      BEQ	0x0031
    002D 95C8      LPM
    002E 9631      ADIW	R30,1
    002F 920D      ST	R0,X+
    0030 CFF9      RJMP	0x002A
    0031 D028      RCALL	_main
_exit:
    0032 CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Administrator\桌面\PWM\PWM.C
(0001) /*************************
(0002)      NAME: PWM.C
(0003)   	 DATA: 2007/7/9
(0004)   	 AUTHOR: MICHAEL
(0005)   	 SOFTWARE: ICCAVR6.31
(0006)   	 MCU: ATMEGA8L
(0007)   	 8.000000MHz
(0008) *************************/
(0009) #include <iom8v.h> 
(0010) #include <macros.h> 
(0011) //-----------------------------------------------------------------------
(0012) //                       初始化函数
(0013) //-----------------------------------------------------------------------
(0014) void initial_PWM(void)
(0015) {
(0016)       DDRB=0XFF;
_initial_PWM:
    0033 EF8F      LDI	R24,0xFF
    0034 BB87      OUT	0x17,R24
(0017) 	  PORTB=0XFF;
    0035 BB88      OUT	0x18,R24
(0018)       TCCR2=0X79;
    0036 E789      LDI	R24,0x79
    0037 BD85      OUT	0x25,R24
(0019) 	  OCR2=0X00;   //设置比较数值
    0038 2422      CLR	R2
    0039 BC23      OUT	0x23,R2
    003A 9508      RET
(0020) }
(0021) //----------------------------------------------------------------------------------
(0022) //                       8位快速PWM函数(输出频率为Fout=Fio/N*256,N是分频数)
(0023) //----------------------------------------------------------------------------------
(0024) void Fast_PWM(unsigned char PWMdata)//PWMdata越大,占空比越小
(0025) {
(0026)        TCCR2=0X79;     //快速PWM模式,时钟为I/O时钟不分频
_Fast_PWM:
  PWMdata              --> R16
    003B E789      LDI	R24,0x79
    003C BD85      OUT	0x25,R24
(0027) //	   TCCR2=0X7A;     //快速PWM模式,时钟为I/O时钟8分频
(0028) //	   TCCR2=0X7B;     //快速PWM模式,时钟为I/O时钟32分频
(0029) //	   TCCR2=0X7C;     //快速PWM模式,时钟为I/O时钟64分频
(0030) //	   TCCR2=0X7D;     //快速PWM模式,时钟为I/O时钟128分频
(0031) //	   TCCR2=0X7E;     //快速PWM模式,时钟为I/O时钟256分频
(0032) //	   TCCR2=0X7F;     //快速PWM模式,时钟为I/O时钟1024分频
(0033) 	   TCNT2=PWMdata;                
    003D BD04      OUT	0x24,R16
(0034) 	   OCR2=PWMdata;   //设置比较数值
    003E BD03      OUT	0x23,R16
    003F 9508      RET
(0035) }
(0036) #pragma interrupt_handler USART_receive: 12  
(0037) //------------------------------------------------------------------
(0038) //						   USART初始化函数
(0039) //------------------------------------------------------------------
(0040) void initial_USART(void)
(0041) {
(0042) //-----端口设置--------
(0043)     		PORTB = 0xFF;
_initial_USART:
    0040 EF8F      LDI	R24,0xFF
    0041 BB88      OUT	0x18,R24
(0044)     		DDRB  = 0xFF;
    0042 BB87      OUT	0x17,R24
(0045)     		PORTC = 0x00; 
    0043 2422      CLR	R2
    0044 BA25      OUT	0x15,R2
(0046)     		DDRC  = 0x00;
    0045 BA24      OUT	0x14,R2
(0047)     		PORTD = 0x00;
    0046 BA22      OUT	0x12,R2
(0048)     		DDRD  = 0xFF;
    0047 BB81      OUT	0x11,R24
(0049) //------USART设置-------
(0050) 			UCSRA=0X00;   //波特率不加倍,同时清空一些标志位
    0048 B82B      OUT	0x0B,R2
(0051) 			UCSRB=0X98;   //使能接收和发送,数据位为8位,开接收中断
    0049 E988      LDI	R24,0x98
    004A B98A      OUT	0x0A,R24
(0052) 			UCSRC=0X86;   //异步方式,禁止奇偶校验,数据位为8位
    004B E886      LDI	R24,0x86
    004C BD80      OUT	0x20,R24
(0053) 	//时钟频率8M,波特率9600
(0054) 			UBRRH=0X00;
    004D BC20      OUT	0x20,R2
(0055) 			UBRRL=0X33;
    004E E383      LDI	R24,0x33
    004F B989      OUT	0x09,R24
(0056) 	//时钟频率8M,波特率57600
(0057) 	//         UBRRH=0X00;
(0058) 	//		   UBRRL=0X08;
(0059) 	
(0060) 			SEI();     //全局开中断
    0050 9478      BSET	7
    0051 9508      RET
_USART_receive:
  RECdata              --> R20
    0052 D02A      RCALL	push_lset
    0053 D012      RCALL	push_gset1
(0061) }            			 	   	 		  			  	   //发送移位缓冲器中的数据被送出,且当发送缓冲器 (UDR) 为空时TXC 置位
(0062) //--------------------------------------------------------------
(0063) //						接收中断服务函数
(0064) //--------------------------------------------------------------
(0065) void USART_receive(void)
(0066) {
(0067)  	 unsigned char RECdata;  
(0068)                 RECdata=UDR;
    0054 B14C      IN	R20,0x0C
(0069) 				   Fast_PWM(RECdata);
    0055 2F04      MOV	R16,R20
    0056 DFE4      RCALL	_Fast_PWM
    0057 D011      RCALL	pop_gset1
    0058 D03B      RCALL	pop_lset
    0059 9518      RETI
(0070) 	
(0071) }     
(0072) //-----------------------------------------------------------------------
(0073) //                     主函数
(0074) //-----------------------------------------------------------------------
(0075) void main(void)
(0076) {
(0077)       initial_PWM();
_main:
    005A DFD8      RCALL	_initial_PWM
(0078) 	  initial_USART();
    005B DFE4      RCALL	_initial_USART
(0079) 	  while(1);
FILE: <library>
    005C CFFF      RJMP	0x005C
    005D 9508      RET
push_gset5:
    005E 92FA      ST	R15,-Y
    005F 92EA      ST	R14,-Y
push_gset4:
    0060 92DA      ST	R13,-Y
    0061 92CA      ST	R12,-Y
push_gset3:
    0062 92BA      ST	R11,-Y
    0063 92AA      ST	R10,-Y
push_gset2:
    0064 937A      ST	R23,-Y
    0065 936A      ST	R22,-Y
push_gset1:
    0066 935A      ST	R21,-Y
    0067 934A      ST	R20,-Y
    0068 9508      RET
pop_gset1:
    0069 E0E1      LDI	R30,1
pop:
    006A 9149      LD	R20,Y+
    006B 9159      LD	R21,Y+
    006C FDE0      SBRC	R30,0
    006D 9508      RET
    006E 9169      LD	R22,Y+
    006F 9179      LD	R23,Y+
    0070 FDE1      SBRC	R30,1
    0071 9508      RET
    0072 90A9      LD	R10,Y+
    0073 90B9      LD	R11,Y+
    0074 FDE2      SBRC	R30,2
    0075 9508      RET
    0076 90C9      LD	R12,Y+
    0077 90D9      LD	R13,Y+
    0078 FDE3      SBRC	R30,3
    0079 9508      RET
    007A 90E9      LD	R14,Y+
    007B 90F9      LD	R15,Y+
    007C 9508      RET
push_lset:
    007D 93FA      ST	R31,-Y
    007E 93EA      ST	R30,-Y
    007F 93BA      ST	R27,-Y
    0080 93AA      ST	R26,-Y
    0081 939A      ST	R25,-Y
    0082 938A      ST	R24,-Y
    0083 933A      ST	R19,-Y
    0084 932A      ST	R18,-Y
    0085 931A      ST	R17,-Y
    0086 930A      ST	R16,-Y
    0087 929A      ST	R9,-Y
    0088 928A      ST	R8,-Y
    0089 927A      ST	R7,-Y
    008A 926A      ST	R6,-Y
    008B 925A      ST	R5,-Y
    008C 924A      ST	R4,-Y
    008D 923A      ST	R3,-Y
    008E 922A      ST	R2,-Y
    008F 921A      ST	R1,-Y
    0090 920A      ST	R0,-Y
    0091 B60F      IN	R0,0x3F
    0092 920A      ST	R0,-Y
    0093 9508      RET
pop_lset:
    0094 9009      LD	R0,Y+
    0095 BE0F      OUT	0x3F,R0
    0096 9009      LD	R0,Y+
    0097 9019      LD	R1,Y+
    0098 9029      LD	R2,Y+
    0099 9039      LD	R3,Y+
    009A 9049      LD	R4,Y+
    009B 9059      LD	R5,Y+
    009C 9069      LD	R6,Y+
    009D 9079      LD	R7,Y+
    009E 9089      LD	R8,Y+
    009F 9099      LD	R9,Y+
    00A0 9109      LD	R16,Y+
    00A1 9119      LD	R17,Y+
    00A2 9129      LD	R18,Y+
    00A3 9139      LD	R19,Y+
    00A4 9189      LD	R24,Y+
    00A5 9199      LD	R25,Y+
    00A6 91A9      LD	R26,Y+
    00A7 91B9      LD	R27,Y+
    00A8 91E9      LD	R30,Y+
    00A9 91F9      LD	R31,Y+
    00AA 9508      RET

⌨️ 快捷键说明

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