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

📄 训练项目四:扩展io口的使用.lis

📁 长沙理工自己的实验程序
💻 LIS
字号:
                        .module _训练项目四:扩展IO口的使用.c
                        .area text(rom, con, rel)
                        .even
 0000           _init::
 0000           ; /****************************************************************************
 0000           ; ** File Name:          扩展I/O口的使用
 0000           ; ** Createed By:        Wangchangsong
 0000           ; ** Create Date:        07/26/2008
 0000           ; ** Version:            1.0
 0000           ; ** Descriptions:       led display
 0000           ; **
 0000           ; **---------------------------------------------------------------------------
 0000           ; ** Modified By:
 0000           ; ** Modified Date:
 0000           ; ** Version:
 0000           ; ** Descriptions:
 0000           ; **
 0000           ; ****************************************************************************/
 0000           ; 
 0000           ; #include <iom128v.h> 
 0000           ; #define CON8255 0x8003                    
 0000           ;                                             /* 宏定义,定义8255的地址         */                       
 0000           ; #define A8255 0x8000
 0000           ;                                             /* 宏定义,定义8255A口地址        */
 0000           ; /****************************************************************************
 0000           ; ** Function Name:      init      
 0000           ; ** Descriptions:       initialization
 0000           ; ** Input Parameters:   viod
 0000           ; ** Output parameters:  void
 0000           ; ** Returned Value:     void
 0000           ; **---------------------------------------------------------------------------
 0000           ; ****************************************************************************/
 0000           ; 
 0000           ; void init(void)                             /* 初始化                         */
 0000           ; { 
 0000           ;    MCUCR=MCUCR|0x80;                        /*允许外部存储器扩展,允许使用8255*/
 0000 85B7              in R24,0x35
 0002 8068              ori R24,128
 0004 85BF              out 0x35,R24
 0006           ;    XMCRB=0x80;                              /* 外部存储总线保持允许           */
 0006 80E8              ldi R24,128
 0008 80936C00          sts 108,R24
 000C           ;    w8255con(0x80);                          /*A口工作在模式0,A口作输出       */
 000C 00E8              ldi R16,128
 000E 10E0              ldi R17,0
 0010 01D0              xcall _w8255con
 0012           L1:
 0012                   .dbline 0 ; func end
 0012 0895              ret
 0014           ;              p -> R20,R21
 0014           ;           ctrl -> R16
                        .even
 0014           _w8255con::
 0014 4A93              st -y,R20
 0016 5A93              st -y,R21
 0018           ; }
 0018           ; 
 0018           ; /****************************************************************************
 0018           ; ** Function Name:      w8255con        
 0018           ; ** Descriptions:       
 0018           ; ** Input Parameters:   ctrl
 0018           ; ** Output parameters:  void
 0018           ; ** Returned Value:     void
 0018           ; **---------------------------------------------------------------------------
 0018           ; ****************************************************************************/
 0018           ; 
 0018           ; void w8255con(unsigned char ctrl) 
 0018           ; { 
 0018           ;    unsigned char *p = (unsigned char *)(CON8255); /*指针指向控制总线          */
 0018 43E0              ldi R20,32771
 001A 50E8              ldi R21,128
 001C           ;    *p=ctrl;           
 001C FA01              movw R30,R20
 001E 0083              std z+0,R16
 0020           L2:
 0020                   .dbline 0 ; func end
 0020 5991              ld R21,y+
 0022 4991              ld R20,y+
 0024 0895              ret
 0026           ;              p -> R20,R21
 0026           ;          value -> R16
                        .even
 0026           _w8255a::
 0026 4A93              st -y,R20
 0028 5A93              st -y,R21
 002A           ; }
 002A           ; 
 002A           ; /****************************************************************************
 002A           ; ** Function Name:      w8255a       
 002A           ; ** Descriptions:       
 002A           ; ** Input Parameters:   value
 002A           ; ** Output parameters:  void
 002A           ; ** Returned Value:     void
 002A           ; **---------------------------------------------------------------------------
 002A           ; ****************************************************************************/
 002A           ; 
 002A           ; void w8255a(unsigned char value) 
 002A           ; {   
 002A           ;    unsigned char *p = (unsigned char *)(A8255);   /* 指针指向8255的A口        */
 002A 40E0              ldi R20,32768
 002C 50E8              ldi R21,128
 002E           ;    *p=value; 
 002E FA01              movw R30,R20
 0030 0083              std z+0,R16
 0032           L3:
 0032                   .dbline 0 ; func end
 0032 5991              ld R21,y+
 0034 4991              ld R20,y+
 0036 0895              ret
 0038           ;              i -> R16,R17
                        .even
 0038           _delay_1ms::
 0038           ; }
 0038           ; 
 0038           ; /****************************************************************************
 0038           ; ** Function Name:      delay_1ms       
 0038           ; ** Descriptions:       delay time
 0038           ; ** Input Parameters:   void
 0038           ; ** Output parameters:  void
 0038           ; ** Returned Value:     void
 0038           ; **---------------------------------------------------------------------------
 0038           ; ****************************************************************************/
 0038           ; 
 0038           ; void delay_1ms(void)                           /* 延时                        */
 0038           ; { 
 0038           ;     unsigned int i;
 0038           ; 	
 0038           ;     for(i = 1;i < 2260;i++);
 0038 01E0              ldi R16,1
 003A 10E0              ldi R17,0
 003C 02C0              xjmp L8
 003E           L5:
 003E           L6:
 003E 0F5F              subi R16,255  ; offset = 1
 0040 1F4F              sbci R17,255
 0042           L8:
 0042 043D              cpi R16,212
 0044 E8E0              ldi R30,8
 0046 1E07              cpc R17,R30
 0048 D0F3              brlo L5
 004A           X0:
 004A           L4:
 004A                   .dbline 0 ; func end
 004A 0895              ret
 004C           ;              i -> R20,R21
 004C           ;         uiTime -> R10,R11
                        .even
 004C           _delay_nms::
 004C 0E940000          xcall push_xgset300C
 0050 5801              movw R10,R16
 0052           ; }
 0052           ; 
 0052           ; /****************************************************************************
 0052           ; ** Function Name:      delay_nms       
 0052           ; ** Descriptions:       delay time
 0052           ; ** Input Parameters:   uiTime
 0052           ; ** Output parameters:  void
 0052           ; ** Returned Value:     void
 0052           ; **---------------------------------------------------------------------------
 0052           ; ****************************************************************************/
 0052           ; 
 0052           ; void delay_nms(unsigned int uiTime)                 /* 延时                   */
 0052           ; {
 0052           ;     unsigned int i = 0;
 0052 4427              clr R20
 0054 5527              clr R21
 0056 03C0              xjmp L11
 0058           L10:
 0058           ; 	
 0058           ;     while(i < uiTime)
 0058           ;     {delay_1ms();
 0058 EFDF              xcall _delay_1ms
 005A           ;      i++;
 005A 4F5F              subi R20,255  ; offset = 1
 005C 5F4F              sbci R21,255
 005E           ;     }
 005E           L11:
 005E 4A15              cp R20,R10
 0060 5B05              cpc R21,R11
 0062 D0F3              brlo L10
 0064           X1:
 0064           L9:
 0064                   .dbline 0 ; func end
 0064 0C940000          xjmp pop_xgset300C
                        .even
 0068           _main::
 0068           ; }
 0068           ; 
 0068           ; /****************************************************************************
 0068           ; ** Function Name:      main       
 0068           ; ** Descriptions:       
 0068           ; ** Input Parameters:   void
 0068           ; ** Output parameters:  void
 0068           ; ** Returned Value:     void
 0068           ; **---------------------------------------------------------------------------
 0068           ; ****************************************************************************/
 0068           ; 
 0068           ; void main(void) 
 0068           ; {
 0068           ;    init();
 0068 CBDF              xcall _init
 006A 28C0              xjmp L15
 006C           L14:
 006C           ;    while(1)
 006C           ;    {
 006C           ;    w8255a(0xfe);                               /* 给A口赋值                   */
 006C 0EEF              ldi R16,254
 006E DBDF              xcall _w8255a
 0070           ;    delay_nms(80);
 0070 00E5              ldi R16,80
 0072 10E0              ldi R17,0
 0074 EBDF              xcall _delay_nms
 0076           ;    w8255a(0xfd);
 0076 0DEF              ldi R16,253
 0078 D6DF              xcall _w8255a
 007A           ;    delay_nms(80);
 007A 00E5              ldi R16,80
 007C 10E0              ldi R17,0
 007E E6DF              xcall _delay_nms
 0080           ;    w8255a(0xfb);
 0080 0BEF              ldi R16,251
 0082 D1DF              xcall _w8255a
 0084           ;    delay_nms(80);
 0084 00E5              ldi R16,80
 0086 10E0              ldi R17,0
 0088 E1DF              xcall _delay_nms
 008A           ;    w8255a(0xf7);
 008A 07EF              ldi R16,247
 008C CCDF              xcall _w8255a
 008E           ;    delay_nms(80);
 008E 00E5              ldi R16,80
 0090 10E0              ldi R17,0
 0092 DCDF              xcall _delay_nms
 0094           ;    w8255a(0xef);
 0094 0FEE              ldi R16,239
 0096 C7DF              xcall _w8255a
 0098           ;    delay_nms(80);
 0098 00E5              ldi R16,80
 009A 10E0              ldi R17,0
 009C D7DF              xcall _delay_nms
 009E           ;    w8255a(0xdf);
 009E 0FED              ldi R16,223
 00A0 C2DF              xcall _w8255a
 00A2           ;    delay_nms(80);
 00A2 00E5              ldi R16,80
 00A4 10E0              ldi R17,0
 00A6 D2DF              xcall _delay_nms
 00A8           ;    w8255a(0xbf);
 00A8 0FEB              ldi R16,191
 00AA BDDF              xcall _w8255a
 00AC           ;    delay_nms(80);
 00AC 00E5              ldi R16,80
 00AE 10E0              ldi R17,0
 00B0 CDDF              xcall _delay_nms
 00B2           ;    w8255a(0x7f);
 00B2 0FE7              ldi R16,127
 00B4 B8DF              xcall _w8255a
 00B6           ;    delay_nms(80);
 00B6 00E5              ldi R16,80
 00B8 10E0              ldi R17,0
 00BA C8DF              xcall _delay_nms
 00BC           ;    
 00BC           ;    }
 00BC           L15:
 00BC D7CF              xjmp L14
 00BE           X2:
 00BE           L13:
 00BE                   .dbline 0 ; func end
 00BE 0895              ret
 00C0           ; }
 00C0           ; 
 00C0           ; /****************************************************************************
 00C0           ;  END FILE
 00C0           ; ****************************************************************************/

⌨️ 快捷键说明

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