📄 pwm.lis
字号:
.module PWM.C
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\PWM\PWM.C
0000 .dbfunc e initial_PWM _initial_PWM fV
.even
0000 _initial_PWM::
0000 .dbline -1
0000 .dbline 15
0000 ; /*************************
0000 ; NAME: PWM.C
0000 ; DATA: 2007/7/9
0000 ; AUTHOR: MICHAEL
0000 ; SOFTWARE: ICCAVR6.31
0000 ; MCU: ATMEGA8L
0000 ; 8.000000MHz
0000 ; *************************/
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ; //-----------------------------------------------------------------------
0000 ; // 初始化函数
0000 ; //-----------------------------------------------------------------------
0000 ; void initial_PWM(void)
0000 ; {
0000 .dbline 16
0000 ; DDRB=0XFF;
0000 8FEF ldi R24,255
0002 87BB out 0x17,R24
0004 .dbline 17
0004 ; PORTB=0XFF;
0004 88BB out 0x18,R24
0006 .dbline 18
0006 ; TCCR2=0X79;
0006 89E7 ldi R24,121
0008 85BD out 0x25,R24
000A .dbline 19
000A ; OCR2=0X00; //设置比较数值
000A 2224 clr R2
000C 23BC out 0x23,R2
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbend
0010 .dbfunc e Fast_PWM _Fast_PWM fV
0010 ; PWMdata -> R16
.even
0010 _Fast_PWM::
0010 .dbline -1
0010 .dbline 25
0010 ; }
0010 ; //----------------------------------------------------------------------------------
0010 ; // 8位快速PWM函数(输出频率为Fout=Fio/N*256,N是分频数)
0010 ; //----------------------------------------------------------------------------------
0010 ; void Fast_PWM(unsigned char PWMdata)//PWMdata越大,占空比越小
0010 ; {
0010 .dbline 26
0010 ; TCCR2=0X79; //快速PWM模式,时钟为I/O时钟不分频
0010 89E7 ldi R24,121
0012 85BD out 0x25,R24
0014 .dbline 33
0014 ; // TCCR2=0X7A; //快速PWM模式,时钟为I/O时钟8分频
0014 ; // TCCR2=0X7B; //快速PWM模式,时钟为I/O时钟32分频
0014 ; // TCCR2=0X7C; //快速PWM模式,时钟为I/O时钟64分频
0014 ; // TCCR2=0X7D; //快速PWM模式,时钟为I/O时钟128分频
0014 ; // TCCR2=0X7E; //快速PWM模式,时钟为I/O时钟256分频
0014 ; // TCCR2=0X7F; //快速PWM模式,时钟为I/O时钟1024分频
0014 ; TCNT2=PWMdata;
0014 04BD out 0x24,R16
0016 .dbline 34
0016 ; OCR2=PWMdata; //设置比较数值
0016 03BD out 0x23,R16
0018 .dbline -2
0018 L2:
0018 .dbline 0 ; func end
0018 0895 ret
001A .dbsym r PWMdata 16 c
001A .dbend
.area vector(rom, abs)
.org 22
0016 1FC0 rjmp _USART_receive
.area text(rom, con, rel)
001A .dbfile C:\DOCUME~1\Administrator\桌面\PWM\PWM.C
001A .dbfunc e initial_USART _initial_USART fV
.even
001A _initial_USART::
001A .dbline -1
001A .dbline 41
001A ; }
001A ; #pragma interrupt_handler USART_receive: 12
001A ; //------------------------------------------------------------------
001A ; // USART初始化函数
001A ; //------------------------------------------------------------------
001A ; void initial_USART(void)
001A ; {
001A .dbline 43
001A ; //-----端口设置--------
001A ; PORTB = 0xFF;
001A 8FEF ldi R24,255
001C 88BB out 0x18,R24
001E .dbline 44
001E ; DDRB = 0xFF;
001E 87BB out 0x17,R24
0020 .dbline 45
0020 ; PORTC = 0x00;
0020 2224 clr R2
0022 25BA out 0x15,R2
0024 .dbline 46
0024 ; DDRC = 0x00;
0024 24BA out 0x14,R2
0026 .dbline 47
0026 ; PORTD = 0x00;
0026 22BA out 0x12,R2
0028 .dbline 48
0028 ; DDRD = 0xFF;
0028 81BB out 0x11,R24
002A .dbline 50
002A ; //------USART设置-------
002A ; UCSRA=0X00; //波特率不加倍,同时清空一些标志位
002A 2BB8 out 0xb,R2
002C .dbline 51
002C ; UCSRB=0X98; //使能接收和发送,数据位为8位,开接收中断
002C 88E9 ldi R24,152
002E 8AB9 out 0xa,R24
0030 .dbline 52
0030 ; UCSRC=0X86; //异步方式,禁止奇偶校验,数据位为8位
0030 86E8 ldi R24,134
0032 80BD out 0x20,R24
0034 .dbline 54
0034 ; //时钟频率8M,波特率9600
0034 ; UBRRH=0X00;
0034 20BC out 0x20,R2
0036 .dbline 55
0036 ; UBRRL=0X33;
0036 83E3 ldi R24,51
0038 89B9 out 0x9,R24
003A .dbline 60
003A ; //时钟频率8M,波特率57600
003A ; // UBRRH=0X00;
003A ; // UBRRL=0X08;
003A ;
003A ; SEI(); //全局开中断
003A 7894 sei
003C .dbline -2
003C L3:
003C .dbline 0 ; func end
003C 0895 ret
003E .dbend
003E .dbfunc e USART_receive _USART_receive fV
003E ; RECdata -> R20
.even
003E _USART_receive::
003E 00D0 rcall push_lset
0040 00D0 rcall push_gset1
0042 .dbline -1
0042 .dbline 66
0042 ; } //发送移位缓冲器中的数据被送出,且当发送缓冲器 (UDR) 为空时TXC 置位
0042 ; //--------------------------------------------------------------
0042 ; // 接收中断服务函数
0042 ; //--------------------------------------------------------------
0042 ; void USART_receive(void)
0042 ; {
0042 .dbline 68
0042 ; unsigned char RECdata;
0042 ; RECdata=UDR;
0042 4CB1 in R20,0xc
0044 .dbline 69
0044 ; Fast_PWM(RECdata);
0044 042F mov R16,R20
0046 E4DF rcall _Fast_PWM
0048 .dbline -2
0048 L4:
0048 00D0 rcall pop_gset1
004A 00D0 rcall pop_lset
004C .dbline 0 ; func end
004C 1895 reti
004E .dbsym r RECdata 20 c
004E .dbend
004E .dbfunc e main _main fV
.even
004E _main::
004E .dbline -1
004E .dbline 76
004E ;
004E ; }
004E ; //-----------------------------------------------------------------------
004E ; // 主函数
004E ; //-----------------------------------------------------------------------
004E ; void main(void)
004E ; {
004E .dbline 77
004E ; initial_PWM();
004E D8DF rcall _initial_PWM
0050 .dbline 78
0050 ; initial_USART();
0050 E4DF rcall _initial_USART
0052 L6:
0052 .dbline 79
0052 L7:
0052 .dbline 79
0052 FFCF rjmp L6
0054 X0:
0054 .dbline -2
0054 L5:
0054 .dbline 0 ; func end
0054 0895 ret
0056 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -