长沙理工自己的实验程序

源代码在线查看: 训练项目四:扩展io口的使用.lis

软件大小: 158 K
上传用户: szjunhui899
关键词: 理工 实验 程序
下载地址: 免注册下载 普通下载 VIP

相关代码

				                        .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  
				 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           ; ****************************************************************************/
							

相关资源