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

📄 main.lis

📁 一个关于AVR单片机的例程
💻 LIS
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\桌面\实验教程\LED应用\led用于程序调试\main.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 20
 0000           ; //ICC-AVR application builder : 2007-1-29 10:04:38
 0000           ; // Target : M16
 0000           ; // Crystal: 7.3728Mhz
 0000           ; // 功能:LED指示灯用于程序调试
 0000           ; // 作者:古欣
 0000           ; // AVR与虚拟仪器 http://www.avrvi.com
 0000           ; 
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; #define led_port PORTA
 0000           ; //定义输出端口
 0000           ; #define led_ddr DDRA
 0000           ; //定义输出控制寄存器
 0000           ; //可以自行修改,必须保持 led_port和led_ddr一致,PORTA对应DDRA
 0000           ; 
 0000           ; //使用  |= 置一  ,  &=~ 清零 , ^= 取反 都是只对选择位进行操作,不会对同一个口的其他位造成影响。
 0000           ; 
 0000           ; void port_init(void)
 0000           ; {
 0000                   .dbline 21
 0000           ;  PORTA = 0x00;
 0000 2224              clr R2
 0002 2BBA              out 0x1b,R2
 0004                   .dbline 22
 0004           ;  DDRA  = 0x00;
 0004 2ABA              out 0x1a,R2
 0006                   .dbline 23
 0006           ;  PORTB = 0x00;
 0006 28BA              out 0x18,R2
 0008                   .dbline 24
 0008           ;  DDRB  = 0x00;
 0008 27BA              out 0x17,R2
 000A                   .dbline 25
 000A           ;  PORTC = 0x00; //m103 output only
 000A 25BA              out 0x15,R2
 000C                   .dbline 26
 000C           ;  DDRC  = 0x00;
 000C 24BA              out 0x14,R2
 000E                   .dbline 27
 000E           ;  PORTD = 0x00;
 000E 22BA              out 0x12,R2
 0010                   .dbline 28
 0010           ;  DDRD  = 0x00;
 0010 21BA              out 0x11,R2
 0012                   .dbline 29
 0012           ;  led_ddr|=0x03; //设置LED的0和1端口为输出,其余不变
 0012 8AB3              in R24,0x1a
 0014 8360              ori R24,3
 0016 8ABB              out 0x1a,R24
 0018                   .dbline -2
 0018           L1:
 0018                   .dbline 0 ; func end
 0018 0895              ret
 001A                   .dbend
 001A                   .dbfunc e init_devices _init_devices fV
                        .even
 001A           _init_devices::
 001A                   .dbline -1
 001A                   .dbline 35
 001A           ; }
 001A           ; 
 001A           ; //call this routine to initialize all peripherals
 001A           ; //此处为ICC系统生成,未做更改
 001A           ; void init_devices(void)
 001A           ; {
 001A                   .dbline 37
 001A           ;  //stop errant interrupts until set up
 001A           ;  CLI(); //disable all interrupts
 001A F894              cli
 001C                   .dbline 38
 001C           ;  port_init();
 001C F1DF              xcall _port_init
 001E                   .dbline 40
 001E           ; 
 001E           ;  MCUCR = 0x00;
 001E 2224              clr R2
 0020 25BE              out 0x35,R2
 0022                   .dbline 41
 0022           ;  GICR  = 0x00;
 0022 2BBE              out 0x3b,R2
 0024                   .dbline 42
 0024           ;  TIMSK = 0x00; //timer interrupt sources
 0024 29BE              out 0x39,R2
 0026                   .dbline 43
 0026           ;  SEI(); //re-enable interrupts
 0026 7894              sei
 0028                   .dbline -2
 0028           L2:
 0028                   .dbline 0 ; func end
 0028 0895              ret
 002A                   .dbend
 002A                   .dbfunc e Delay _Delay fV
 002A           ;              i -> R16
 002A           ;              j -> R18
                        .even
 002A           _Delay::
 002A                   .dbline -1
 002A                   .dbline 48
 002A           ;  //all peripherals are now initialized
 002A           ; }
 002A           ; 
 002A           ; void Delay(void)  //延时,没有详细计算
 002A           ; {
 002A                   .dbline 50
 002A           ; unsigned char i,j;
 002A           ; for(i=200;i>0;i--)
 002A 08EC              ldi R16,200
 002C 07C0              xjmp L7
 002E           L4:
 002E                   .dbline 51
 002E           ; {
 002E                   .dbline 52
 002E           ;   for(j=200;j>0;j--)
 002E 28EC              ldi R18,200
 0030 01C0              xjmp L11
 0032           L8:
 0032                   .dbline 53
 0032           L9:
 0032                   .dbline 52
 0032 2A95              dec R18
 0034           L11:
 0034                   .dbline 52
 0034 2224              clr R2
 0036 2216              cp R2,R18
 0038 E0F3              brlo L8
 003A                   .dbline 54
 003A           L5:
 003A                   .dbline 50
 003A 0A95              dec R16
 003C           L7:
 003C                   .dbline 50
 003C 2224              clr R2
 003E 2016              cp R2,R16
 0040 B0F3              brlo L4
 0042                   .dbline -2
 0042           L3:
 0042                   .dbline 0 ; func end
 0042 0895              ret
 0044                   .dbsym r i 16 c
 0044                   .dbsym r j 18 c
 0044                   .dbend
 0044                   .dbfunc e right _right fV
 0044           ;              i -> R20,R21
                        .even
 0044           _right::
 0044 0E940000          xcall push_gset1
 0048                   .dbline -1
 0048                   .dbline 58
 0048           ; ;
 0048           ; }
 0048           ; }
 0048           ; 
 0048           ; void right(void) //01两个灯来回闪烁三次,指示工作正常。
 0048           ; {
 0048                   .dbline 60
 0048           ;  unsigned int i;
 0048           ;  for(i=3;i!=0;i--)
 0048 43E0              ldi R20,3
 004A 50E0              ldi R21,0
 004C 0AC0              xjmp L16
 004E           L13:
 004E                   .dbline 61
 004E                   .dbline 62
 004E D89A              sbi 0x1b,0
 0050                   .dbline 63
 0050 D998              cbi 0x1b,1
 0052                   .dbline 64
 0052 EBDF              xcall _Delay
 0054                   .dbline 65
 0054 83E0              ldi R24,3
 0056 2BB2              in R2,0x1b
 0058 2826              eor R2,R24
 005A 2BBA              out 0x1b,R2
 005C                   .dbline 66
 005C E6DF              xcall _Delay
 005E                   .dbline 67
 005E           L14:
 005E                   .dbline 60
 005E 4150              subi R20,1
 0060 5040              sbci R21,0
 0062           L16:
 0062                   .dbline 60
 0062 4030              cpi R20,0
 0064 4507              cpc R20,R21
 0066 99F7              brne L13
 0068           X0:
 0068                   .dbline 68
 0068           ;  {
 0068           ;   led_port |=  0x01;   //0位置一
 0068           ;   led_port &=~ 0x02;   //1位清零
 0068           ;   Delay();             //延时
 0068           ;   led_port ^=  0x03;   //0位和1位翻转
 0068           ;   Delay();             //延时
 0068           ;  }
 0068           ;  led_port |=  0x03;    //置一,都灭。
 0068 8BB3              in R24,0x1b
 006A 8360              ori R24,3
 006C 8BBB              out 0x1b,R24
 006E                   .dbline -2
 006E           L12:
 006E 0E940000          xcall pop_gset1
 0072                   .dbline 0 ; func end
 0072 0895              ret
 0074                   .dbsym r i 20 i
 0074                   .dbend
 0074                   .dbfunc e report_1 _report_1 fV
                        .even
 0074           _report_1::
 0074                   .dbline -1
 0074                   .dbline 72
 0074           ; }
 0074           ; 
 0074           ; void report_1(void) //一灭一亮
 0074           ; {
 0074                   .dbline 73
 0074           ;   led_port |=  0x01;   //0位置一
 0074 D89A              sbi 0x1b,0
 0076                   .dbline 74
 0076           ;   led_port &=~ 0x02;   //1位清零
 0076 D998              cbi 0x1b,1
 0078                   .dbline -2
 0078           L17:
 0078                   .dbline 0 ; func end
 0078 0895              ret
 007A                   .dbend
 007A                   .dbfunc e report_2 _report_2 fV
                        .even
 007A           _report_2::
 007A                   .dbline -1
 007A                   .dbline 78
 007A           ; }
 007A           ; 
 007A           ; void report_2(void) //一亮一灭
 007A           ; {
 007A                   .dbline 79
 007A           ;   led_port |=  0x02;   //0位置一
 007A D99A              sbi 0x1b,1
 007C                   .dbline 80
 007C           ;   led_port &=~ 0x01;   //1位清零
 007C D898              cbi 0x1b,0
 007E                   .dbline -2
 007E           L18:
 007E                   .dbline 0 ; func end
 007E 0895              ret
 0080                   .dbend
 0080                   .dbfunc e error _error fV
                        .even
 0080           _error::
 0080                   .dbline -1
 0080                   .dbline 84
 0080           ; }
 0080           ; 
 0080           ; void error(void)
 0080           ; {
 0080                   .dbline 85
 0080           ;  led_port &=~ 0x03;   //同时清零,都亮,表示错误
 0080 8BB3              in R24,0x1b
 0082 8C7F              andi R24,252
 0084 8BBB              out 0x1b,R24
 0086                   .dbline -2
 0086           L19:
 0086                   .dbline 0 ; func end
 0086 0895              ret
 0088                   .dbend
 0088                   .dbfunc e main _main fV
                        .even
 0088           _main::
 0088                   .dbline -1
 0088                   .dbline 92
 0088           ; }
 0088           ; 
 0088           ; //有时候做比较大的程序,无法确认程序是否正常运行,
 0088           ; //就需要在程序中添加调试语句,以查看程序运行到什么地方。
 0088           ; //至于什么情况表示什么含义,看你自己喜欢
 0088           ; void main(void)
 0088           ; {
 0088                   .dbline 93
 0088           ;  init_devices();
 0088 C8DF              xcall _init_devices
 008A                   .dbline 94
 008A           ;  right();  //指示进入程序正常工作
 008A DCDF              xcall _right
 008C                   .dbline 96
 008C           ;  
 008C           ;  if(1==1)  //只为演示,并无意义。
 008C                   .dbline 97
 008C           ;  {
 008C                   .dbline 98
 008C           ;   report_1(); //调用一灭一亮
 008C F3DF              xcall _report_1
 008E                   .dbline 99
 008E           ;  }
 008E           L21:
 008E                   .dbline 101
 008E           ;  
 008E           ;  if(1<0)
 008E 02C0              xjmp L23
 0090           X1:
 0090                   .dbline 102
 0090           ;  {
 0090                   .dbline 103
 0090           ;   report_2();
 0090 F4DF              xcall _report_2
 0092                   .dbline 104
 0092           ;  }
 0092 01C0              xjmp L26
 0094           L23:
 0094                   .dbline 106
 0094           ;  else 
 0094           ;  {
 0094                   .dbline 107
 0094           ;   error(); //错误。
 0094 F5DF              xcall _error
 0096                   .dbline 108
 0096           ;  }
 0096           L25:
 0096                   .dbline 110
 0096           L26:
 0096                   .dbline 110
 0096 FFCF              xjmp L25
 0098           X2:
 0098                   .dbline -2
 0098           L20:
 0098                   .dbline 0 ; func end
 0098 0895              ret
 009A                   .dbend

⌨️ 快捷键说明

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