📄 main.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 + -