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

📄 main.lis

📁 用AVR单片机做的一些程序,包括跑马灯显示,PWM产生,ADC转换等
💻 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 + -