📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile E:\ICCAVR\project\AVRMEG~3\icc\008-PWM-LED\main.c
0000 .dbfunc e delay_ms _delay_ms fV
0000 ; a -> R20
0000 ; b -> R22
0000 ; i -> R16
.even
0000 _delay_ms::
0000 0E940000 xcall push_gset2
0004 .dbline -1
0004 .dbline 19
0004 ; /*
0004 ; 实验八:
0004 ;
0004 ; PWM实险。
0004 ; 1、利用PWM占空比调节功能,进行定时器T1输出三路动态PWM信号,
0004 ; 并将结果以亮度的型式显示在对应的LED发光二极管上。
0004 ; 2、内部1 M晶振,程序采用单任务方式,软件延时。
0004 ; 3、进行此实验请插上LED短路块。
0004 ; 4、通过此实验,可以对PWM有个初步认识,知道它的工作原理。
0004 ; 用一个定时器输出三路PWM信号,充分发辉硬件资源。
0004 ;
0004 ; AVR mega128学习板
0004 ; www.iccavr.com 阿发
0004 ; 16:36 2007-10-12
0004 ; */
0004 ; #include "iom128v.h"
0004 ;
0004 ; /*延时函数*/
0004 ; void delay_ms(unsigned char i) {
0004 .dbline 22
0004 4427 clr R20
0006 06C0 xjmp L5
0008 L2:
0008 .dbline 22
0008 ;
0008 ; unsigned char a, b;
0008 ; for (a = 0; a < i; a++) {
0008 .dbline 23
0008 61E0 ldi R22,1
000A 01C0 xjmp L9
000C L6:
000C .dbline 23
000C L7:
000C .dbline 23
000C 6395 inc R22
000E L9:
000E .dbline 23
000E 6623 tst R22
0010 E9F7 brne L6
0012 .dbline 24
0012 L3:
0012 .dbline 22
0012 4395 inc R20
0014 L5:
0014 .dbline 22
0014 4017 cp R20,R16
0016 C0F3 brlo L2
0018 .dbline -2
0018 L1:
0018 0E940000 xcall pop_gset2
001C .dbline 0 ; func end
001C 0895 ret
001E .dbsym r a 20 c
001E .dbsym r b 22 c
001E .dbsym r i 16 c
001E .dbend
001E .dbfunc e io_init _io_init fV
.even
001E _io_init::
001E .dbline -1
001E .dbline 28
001E ; for (b = 1; b; b++);
001E ; }
001E ; }
001E ;
001E ; /*IO口初始化函数*/
001E ; void io_init(void) {
001E .dbline 30
001E ;
001E ; DDRA = 0x00; /*方向输入*/
001E 2224 clr R2
0020 2ABA out 0x1a,R2
0022 .dbline 31
0022 ; PORTA = 0xFF; /*打开上拉*/
0022 8FEF ldi R24,255
0024 8BBB out 0x1b,R24
0026 .dbline 32
0026 ; DDRB = 0xFF; /*方向输出*/
0026 87BB out 0x17,R24
0028 .dbline 33
0028 ; PORTB = 0xFF; /*输出高电平*/
0028 88BB out 0x18,R24
002A .dbline 34
002A ; DDRC = 0x00; /*不用的IO口建议设置为输入带上拉*/
002A 24BA out 0x14,R2
002C .dbline 35
002C ; PORTC = 0xFF;
002C 85BB out 0x15,R24
002E .dbline 36
002E ; DDRD = 0x00;
002E 21BA out 0x11,R2
0030 .dbline 37
0030 ; PORTD = 0xFF;
0030 82BB out 0x12,R24
0032 .dbline 38
0032 ; DDRE = 0x00;
0032 22B8 out 0x2,R2
0034 .dbline 39
0034 ; PORTE = 0xFF;
0034 83B9 out 0x3,R24
0036 .dbline 40
0036 ; DDRF = 0x00;
0036 20926100 sts 97,R2
003A .dbline 41
003A ; PORTF = 0xFF;
003A 80936200 sts 98,R24
003E .dbline 42
003E ; DDRG = 0x00;
003E 20926400 sts 100,R2
0042 .dbline 43
0042 ; PORTG = 0xFF;
0042 80936500 sts 101,R24
0046 .dbline -2
0046 L10:
0046 .dbline 0 ; func end
0046 0895 ret
0048 .dbend
0048 .dbfunc e main _main fV
0048 ; i -> R20
.even
0048 _main::
0048 .dbline -1
0048 .dbline 46
0048 ; }
0048 ;
0048 ; void main(void) {
0048 .dbline 48
0048 ;
0048 ; unsigned char i = 0;
0048 4427 clr R20
004A .dbline 50
004A ;
004A ; io_init();
004A E9DF xcall _io_init
004C .dbline 51
004C ; OCR1A = i; /*先预设值,防止启动瞬间值为空*/
004C 242E mov R2,R20
004E 3324 clr R3
0050 3BBC out 0x2b,R3
0052 2ABC out 0x2a,R2
0054 .dbline 52
0054 ; OCR1B = i + 80;
0054 822D mov R24,R2
0056 9927 clr R25
0058 805B subi R24,176 ; offset = 80
005A 9F4F sbci R25,255
005C 99BD out 0x29,R25
005E 88BD out 0x28,R24
0060 .dbline 53
0060 ; OCR1C = i + 160;
0060 822D mov R24,R2
0062 9927 clr R25
0064 8056 subi R24,96 ; offset = 160
0066 9F4F sbci R25,255
0068 90937900 sts 120+1,R25
006C 80937800 sts 120,R24
0070 .dbline 55
0070 ;
0070 ; TCCR1A = (1 << WGM10); /*8位相位修正PWM模式*/
0070 81E0 ldi R24,1
0072 8FBD out 0x2f,R24
0074 .dbline 56
0074 ; TCCR1A |= (1 << COM1A1) | (1 << COM1B1) | (1 << COM1C1);
0074 8FB5 in R24,0x2f
0076 886A ori R24,168
0078 8FBD out 0x2f,R24
007A .dbline 57
007A ; TCCR1B = (1 << CS10); /*256分频*/
007A 81E0 ldi R24,1
007C 8EBD out 0x2e,R24
007E 1CC0 xjmp L13
0080 L12:
0080 .dbline 59
0080 .dbline 60
0080 06E9 ldi R16,150
0082 BEDF xcall _delay_ms
0084 .dbline 61
0084 4395 inc R20
0086 .dbline 62
0086 842F mov R24,R20
0088 9927 clr R25
008A 806C ori R24,192
008C 9BBD out 0x2b,R25
008E 8ABD out 0x2a,R24
0090 .dbline 63
0090 842F mov R24,R20
0092 9927 clr R25
0094 805B subi R24,176 ; offset = 80
0096 9F4F sbci R25,255
0098 806C ori R24,192
009A 99BD out 0x29,R25
009C 88BD out 0x28,R24
009E .dbline 64
009E 842F mov R24,R20
00A0 9927 clr R25
00A2 8056 subi R24,96 ; offset = 160
00A4 9F4F sbci R25,255
00A6 806C ori R24,192
00A8 90937900 sts 120+1,R25
00AC 80937800 sts 120,R24
00B0 .dbline 65
00B0 81E0 ldi R24,1
00B2 28B2 in R2,0x18
00B4 2826 eor R2,R24
00B6 28BA out 0x18,R2
00B8 .dbline 66
00B8 L13:
00B8 .dbline 59
00B8 E3CF xjmp L12
00BA X0:
00BA .dbline -2
00BA L11:
00BA .dbline 0 ; func end
00BA 0895 ret
00BC .dbsym r i 20 c
00BC .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -