长沙理工自己的实验程序

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

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

相关代码

					.module _训练项目四:扩展IO口的使用.c
					.area text(rom, con, rel)
					.even
				_init::
				; /****************************************************************************
				; ** File Name:          扩展I/O口的使用
				; ** Createed By:        Wangchangsong
				; ** Create Date:        07/26/2008
				; ** Version:            1.0
				; ** Descriptions:       led display
				; **
				; **---------------------------------------------------------------------------
				; ** Modified By:
				; ** Modified Date:
				; ** Version:
				; ** Descriptions:
				; **
				; ****************************************************************************/
				; 
				; #include  
				; #define CON8255 0x8003                    
				;                                             /* 宏定义,定义8255的地址         */                       
				; #define A8255 0x8000
				;                                             /* 宏定义,定义8255A口地址        */
				; /****************************************************************************
				; ** Function Name:      init      
				; ** Descriptions:       initialization
				; ** Input Parameters:   viod
				; ** Output parameters:  void
				; ** Returned Value:     void
				; **---------------------------------------------------------------------------
				; ****************************************************************************/
				; 
				; void init(void)                             /* 初始化                         */
				; { 
				;    MCUCR=MCUCR|0x80;                        /*允许外部存储器扩展,允许使用8255*/
					in R24,0x35
					ori R24,128
					out 0x35,R24
				;    XMCRB=0x80;                              /* 外部存储总线保持允许           */
					ldi R24,128
					sts 108,R24
				;    w8255con(0x80);                          /*A口工作在模式0,A口作输出       */
					ldi R16,128
					ldi R17,0
					xcall _w8255con
				L1:
					.dbline 0 ; func end
					ret
				;              p -> R20,R21
				;           ctrl -> R16
					.even
				_w8255con::
					st -y,R20
					st -y,R21
				; }
				; 
				; /****************************************************************************
				; ** Function Name:      w8255con        
				; ** Descriptions:       
				; ** Input Parameters:   ctrl
				; ** Output parameters:  void
				; ** Returned Value:     void
				; **---------------------------------------------------------------------------
				; ****************************************************************************/
				; 
				; void w8255con(unsigned char ctrl) 
				; { 
				;    unsigned char *p = (unsigned char *)(CON8255); /*指针指向控制总线          */
					ldi R20,32771
					ldi R21,128
				;    *p=ctrl;           
					movw R30,R20
					std z+0,R16
				L2:
					.dbline 0 ; func end
					ld R21,y+
					ld R20,y+
					ret
				;              p -> R20,R21
				;          value -> R16
					.even
				_w8255a::
					st -y,R20
					st -y,R21
				; }
				; 
				; /****************************************************************************
				; ** Function Name:      w8255a       
				; ** Descriptions:       
				; ** Input Parameters:   value
				; ** Output parameters:  void
				; ** Returned Value:     void
				; **---------------------------------------------------------------------------
				; ****************************************************************************/
				; 
				; void w8255a(unsigned char value) 
				; {   
				;    unsigned char *p = (unsigned char *)(A8255);   /* 指针指向8255的A口        */
					ldi R20,32768
					ldi R21,128
				;    *p=value; 
					movw R30,R20
					std z+0,R16
				L3:
					.dbline 0 ; func end
					ld R21,y+
					ld R20,y+
					ret
				;              i -> R16,R17
					.even
				_delay_1ms::
				; }
				; 
				; /****************************************************************************
				; ** Function Name:      delay_1ms       
				; ** Descriptions:       delay time
				; ** Input Parameters:   void
				; ** Output parameters:  void
				; ** Returned Value:     void
				; **---------------------------------------------------------------------------
				; ****************************************************************************/
				; 
				; void delay_1ms(void)                           /* 延时                        */
				; { 
				;     unsigned int i;
				; 	
				;     for(i = 1;i < 2260;i++);
					ldi R16,1
					ldi R17,0
					xjmp L8
				L5:
				L6:
					subi R16,255  ; offset = 1
					sbci R17,255
				L8:
					cpi R16,212
					ldi R30,8
					cpc R17,R30
					brlo L5
				X0:
				L4:
					.dbline 0 ; func end
					ret
				;              i -> R20,R21
				;         uiTime -> R10,R11
					.even
				_delay_nms::
					xcall push_xgset300C
					movw R10,R16
				; }
				; 
				; /****************************************************************************
				; ** Function Name:      delay_nms       
				; ** Descriptions:       delay time
				; ** Input Parameters:   uiTime
				; ** Output parameters:  void
				; ** Returned Value:     void
				; **---------------------------------------------------------------------------
				; ****************************************************************************/
				; 
				; void delay_nms(unsigned int uiTime)                 /* 延时                   */
				; {
				;     unsigned int i = 0;
					clr R20
					clr R21
					xjmp L11
				L10:
				; 	
				;     while(i < uiTime)
				;     {delay_1ms();
					xcall _delay_1ms
				;      i++;
					subi R20,255  ; offset = 1
					sbci R21,255
				;     }
				L11:
					cp R20,R10
					cpc R21,R11
					brlo L10
				X1:
				L9:
					.dbline 0 ; func end
					xjmp pop_xgset300C
					.even
				_main::
				; }
				; 
				; /****************************************************************************
				; ** Function Name:      main       
				; ** Descriptions:       
				; ** Input Parameters:   void
				; ** Output parameters:  void
				; ** Returned Value:     void
				; **---------------------------------------------------------------------------
				; ****************************************************************************/
				; 
				; void main(void) 
				; {
				;    init();
					xcall _init
					xjmp L15
				L14:
				;    while(1)
				;    {
				;    w8255a(0xfe);                               /* 给A口赋值                   */
					ldi R16,254
					xcall _w8255a
				;    delay_nms(80);
					ldi R16,80
					ldi R17,0
					xcall _delay_nms
				;    w8255a(0xfd);
					ldi R16,253
					xcall _w8255a
				;    delay_nms(80);
					ldi R16,80
					ldi R17,0
					xcall _delay_nms
				;    w8255a(0xfb);
					ldi R16,251
					xcall _w8255a
				;    delay_nms(80);
					ldi R16,80
					ldi R17,0
					xcall _delay_nms
				;    w8255a(0xf7);
					ldi R16,247
					xcall _w8255a
				;    delay_nms(80);
					ldi R16,80
					ldi R17,0
					xcall _delay_nms
				;    w8255a(0xef);
					ldi R16,239
					xcall _w8255a
				;    delay_nms(80);
					ldi R16,80
					ldi R17,0
					xcall _delay_nms
				;    w8255a(0xdf);
					ldi R16,223
					xcall _w8255a
				;    delay_nms(80);
					ldi R16,80
					ldi R17,0
					xcall _delay_nms
				;    w8255a(0xbf);
					ldi R16,191
					xcall _w8255a
				;    delay_nms(80);
					ldi R16,80
					ldi R17,0
					xcall _delay_nms
				;    w8255a(0x7f);
					ldi R16,127
					xcall _w8255a
				;    delay_nms(80);
					ldi R16,80
					ldi R17,0
					xcall _delay_nms
				;    
				;    }
				L15:
					xjmp L14
				X2:
				L13:
					.dbline 0 ; func end
					ret
				; }
				; 
				; /****************************************************************************
				;  END FILE
				; ****************************************************************************/
							

相关资源