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

📄 8255扩展.lis

📁 基于AVR实验平台下ATMega128芯片实习作业
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module _8255扩展.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\user\MYDOCU~1\李智(正)\8255\8255扩展.c
 0000                   .dbfunc e init _init fV
                        .even
 0000           _init::
 0000                   .dbline -1
 0000                   .dbline 6
 0000           ; #include <iom128v.h> 
 0000           ; #define CON8255 0x8003
 0000           ; #define A8255 0x8000
 0000           ; #define B8255 0x8001
 0000           ; void init(void) 
 0000           ; { 
 0000                   .dbline 7
 0000           ;    MCUCR=MCUCR|0x80;
 0000 85B7              in R24,0x35
 0002 8068              ori R24,128
 0004 85BF              out 0x35,R24
 0006                   .dbline 8
 0006           ;    XMCRB=0x80;
 0006 80E8              ldi R24,128
 0008 80936C00          sts 108,R24
 000C                   .dbline 9
 000C           ;    w8255con(0x80); 
 000C 00E8              ldi R16,128
 000E 10E0              ldi R17,0
 0010 04D0              xcall _w8255con
 0012                   .dbline 10
 0012           ;    w8255con(0x82); 
 0012 02E8              ldi R16,130
 0014 10E0              ldi R17,0
 0016 01D0              xcall _w8255con
 0018                   .dbline -2
 0018           L1:
 0018                   .dbline 0 ; func end
 0018 0895              ret
 001A                   .dbend
 001A                   .dbfunc e w8255con _w8255con fV
 001A           ;              p -> R20,R21
 001A           ;           ctrl -> R16
                        .even
 001A           _w8255con::
 001A 0E940000          xcall push_gset1
 001E                   .dbline -1
 001E                   .dbline 13
 001E           ;    }
 001E           ; void w8255con(unsigned char ctrl) 
 001E           ; { 
 001E                   .dbline 14
 001E           ;    unsigned char *p=(unsigned char *)(CON8255);
 001E 43E0              ldi R20,32771
 0020 50E8              ldi R21,128
 0022                   .dbline 15
 0022           ;    *p=ctrl;           
 0022 FA01              movw R30,R20
 0024 0083              std z+0,R16
 0026                   .dbline -2
 0026           L2:
 0026 0E940000          xcall pop_gset1
 002A                   .dbline 0 ; func end
 002A 0895              ret
 002C                   .dbsym r p 20 pc
 002C                   .dbsym r ctrl 16 c
 002C                   .dbend
 002C                   .dbfunc e w8255a _w8255a fV
 002C           ;              p -> R20,R21
 002C           ;          value -> R16
                        .even
 002C           _w8255a::
 002C 0E940000          xcall push_gset1
 0030                   .dbline -1
 0030                   .dbline 18
 0030           ; }
 0030           ; void w8255a(unsigned char value) 
 0030           ; {   
 0030                   .dbline 19
 0030           ;    unsigned char *p=(unsigned char *)(A8255);
 0030 40E0              ldi R20,32768
 0032 50E8              ldi R21,128
 0034                   .dbline 20
 0034           ;    *p=value; 
 0034 FA01              movw R30,R20
 0036 0083              std z+0,R16
 0038                   .dbline -2
 0038           L3:
 0038 0E940000          xcall pop_gset1
 003C                   .dbline 0 ; func end
 003C 0895              ret
 003E                   .dbsym r p 20 pc
 003E                   .dbsym r value 16 c
 003E                   .dbend
 003E                   .dbfunc e r8255b _r8255b fI
 003E           ;              p -> R16,R17
 003E           ;             dp -> R16
                        .even
 003E           _r8255b::
 003E                   .dbline -1
 003E                   .dbline 23
 003E           ; }
 003E           ; 
 003E           ; r8255b(){ 
 003E                   .dbline 25
 003E           ;    unsigned char dp;
 003E           ;    unsigned char *p=(unsigned char *)(B8255);
 003E 01E0              ldi R16,32769
 0040 10E8              ldi R17,128
 0042                   .dbline 26
 0042           ;    dp=*p; 
 0042 F801              movw R30,R16
 0044 0081              ldd R16,z+0
 0046                   .dbline 27
 0046           ;    return dp;
 0046 1127              clr R17
 0048                   .dbline -2
 0048           L4:
 0048                   .dbline 0 ; func end
 0048 0895              ret
 004A                   .dbsym r p 16 pc
 004A                   .dbsym r dp 16 c
 004A                   .dbend
 004A                   .dbfunc e delay_1ms _delay_1ms fV
 004A           ;              i -> R16,R17
                        .even
 004A           _delay_1ms::
 004A                   .dbline -1
 004A                   .dbline 30
 004A           ; }
 004A           ; void delay_1ms(void)
 004A           ; { unsigned int i;
 004A                   .dbline 31
 004A 01E0              ldi R16,1
 004C 10E0              ldi R17,0
 004E 02C0              xjmp L9
 0050           L6:
 0050                   .dbline 31
 0050           L7:
 0050                   .dbline 31
 0050 0F5F              subi R16,255  ; offset = 1
 0052 1F4F              sbci R17,255
 0054           L9:
 0054                   .dbline 31
 0054           ;  for(i=1;i<2286;i++);
 0054 0E3E              cpi R16,238
 0056 E8E0              ldi R30,8
 0058 1E07              cpc R17,R30
 005A D0F3              brlo L6
 005C                   .dbline -2
 005C           L5:
 005C                   .dbline 0 ; func end
 005C 0895              ret
 005E                   .dbsym r i 16 i
 005E                   .dbend
 005E                   .dbfunc e delay_nms _delay_nms fV
 005E           ;              i -> R20,R21
 005E           ;              n -> R22,R23
                        .even
 005E           _delay_nms::
 005E 0E940000          xcall push_gset2
 0062 B801              movw R22,R16
 0064                   .dbline -1
 0064                   .dbline 34
 0064           ; }
 0064           ; void delay_nms(unsigned int n)
 0064           ; {  unsigned int i=0;
 0064                   .dbline 34
 0064 4427              clr R20
 0066 5527              clr R21
 0068 03C0              xjmp L12
 006A           L11:
 006A                   .dbline 36
 006A                   .dbline 36
 006A EFDF              xcall _delay_1ms
 006C                   .dbline 37
 006C 4F5F              subi R20,255  ; offset = 1
 006E 5F4F              sbci R21,255
 0070                   .dbline 38
 0070           L12:
 0070                   .dbline 35
 0070           ;    while(i<n)
 0070 4617              cp R20,R22
 0072 5707              cpc R21,R23
 0074 D0F3              brlo L11
 0076                   .dbline -2
 0076           L10:
 0076 0E940000          xcall pop_gset2
 007A                   .dbline 0 ; func end
 007A 0895              ret
 007C                   .dbsym r i 20 i
 007C                   .dbsym r n 22 i
 007C                   .dbend
 007C                   .dbfunc e main _main fV
                        .even
 007C           _main::
 007C                   .dbline -1
 007C                   .dbline 42
 007C           ;    {delay_1ms();
 007C           ;     i++;
 007C           ;    }
 007C           ;   
 007C           ; }
 007C           ;       void main(void) 
 007C           ; {  init();
 007C                   .dbline 42
 007C C1DF              xcall _init
 007E 8CC0              xjmp L16
 0080           L15:
 0080                   .dbline 43
 0080           ;  while(1){
 0080                   .dbline 44
 0080           ;    if((r8255b()&0x01)==0)
 0080 DEDF              xcall _r8255b
 0082 C801              movw R24,R16
 0084 8170              andi R24,1
 0086 9070              andi R25,0
 0088 8030              cpi R24,0
 008A 8907              cpc R24,R25
 008C 49F5              brne L18
 008E           X0:
 008E                   .dbline 45
 008E           ;    {w8255a(0xfe);
 008E                   .dbline 45
 008E 0EEF              ldi R16,254
 0090 CDDF              xcall _w8255a
 0092                   .dbline 46
 0092           ;    delay_nms(50);
 0092 02E3              ldi R16,50
 0094 10E0              ldi R17,0
 0096 E3DF              xcall _delay_nms
 0098                   .dbline 47
 0098           ;    w8255a(0xfd);
 0098 0DEF              ldi R16,253
 009A C8DF              xcall _w8255a
 009C                   .dbline 48
 009C           ;    delay_nms(50);
 009C 02E3              ldi R16,50
 009E 10E0              ldi R17,0
 00A0 DEDF              xcall _delay_nms
 00A2                   .dbline 49
 00A2           ;    w8255a(0xfb);

⌨️ 快捷键说明

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