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

📄 图康科技.lst

📁 基于ATmega8开发的关于医疗康复的机器人
💻 LST
📖 第 1 页 / 共 5 页
字号:
     2EA 0E28      ADD	R2,R24
     2EB 1E39      ADC	R3,R25
     2EC 8239      STD	Y+1,R3
     2ED 8228      STD	Y+0,R2
     2EE E022      LDI	R18,2
     2EF E003      LDI	R16,3
     2F0 DE87      RCALL	_lcd_dis
(0204)  	lcd_dis(3,0x3,(Minutes+temp2*6+2));
     2F1 9020 0112 LDS	R2,temp2
     2F3 E086      LDI	R24,6
     2F4 9D82      MUL	R24,R2
     2F5 0110      MOVW	R2,R0
     2F6 EE86      LDI	R24,0xE6
     2F7 E090      LDI	R25,0
     2F8 0E28      ADD	R2,R24
     2F9 1E39      ADC	R3,R25
     2FA 8239      STD	Y+1,R3
     2FB 8228      STD	Y+0,R2
     2FC E023      LDI	R18,3
     2FD E003      LDI	R16,3
     2FE DE79      RCALL	_lcd_dis
(0205)  	lcd_dis(3,0x4,(Minutes+temp2*6+4));
     2FF 9020 0112 LDS	R2,temp2
     301 E086      LDI	R24,6
     302 9D82      MUL	R24,R2
     303 0110      MOVW	R2,R0
     304 EE88      LDI	R24,0xE8
     305 E090      LDI	R25,0
     306 0E28      ADD	R2,R24
     307 1E39      ADC	R3,R25
     308 8239      STD	Y+1,R3
     309 8228      STD	Y+0,R2
     30A E024      LDI	R18,4
     30B E003      LDI	R16,3
     30C DE6B      RCALL	_lcd_dis
(0206)  	lcd_dis(3,0x5,dao);					//显示“到!”
     30D E082      LDI	R24,2
     30E E091      LDI	R25,1
     30F 8399      STD	Y+1,R25
     310 8388      STD	Y+0,R24
     311 E025      LDI	R18,5
     312 E003      LDI	R16,3
     313 DE64      RCALL	_lcd_dis
(0207)  	lcd_dis(3,0x6,(dao+2));	
     314 E084      LDI	R24,4
     315 E091      LDI	R25,1
     316 8399      STD	Y+1,R25
     317 8388      STD	Y+0,R24
     318 E026      LDI	R18,6
     319 E003      LDI	R16,3
     31A DE5D      RCALL	_lcd_dis
     31B 9622      ADIW	R28,2
     31C 9508      RET
(0208) }	
(0209) /********************延时函数***************
(0210) *函    数:dalay
(0211) *函数功能:软件延时
(0212) *入口参数:无
(0213) *返 回 值:无
(0214) *备    注:
(0215) ****************************************************/ 
(0216) void delay_1us(void)                 	//1us延时函数
(0217) {
(0218)   	asm("nop");
_delay_1us:
     31D 0000      NOP
     31E 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R10
     31F D519      RCALL	push_xgset300C
     320 0158      MOVW	R10,R16
(0219) }
(0220) 
(0221) void delay_nus(unsigned int n)       	//N us延时函数
(0222) {
(0223)   	unsigned int i=0;
     321 2744      CLR	R20
     322 2755      CLR	R21
(0224)   	for (i=0;i<n;i++);
     323 C002      RJMP	0x0326
     324 5F4F      SUBI	R20,0xFF
     325 4F5F      SBCI	R21,0xFF
     326 154A      CP	R20,R10
     327 055B      CPC	R21,R11
     328 F3D8      BCS	0x0324
(0225)   		delay_1us();
     329 DFF3      RCALL	_delay_1us
     32A C513      RJMP	pop_xgset300C
(0226) }
(0227) void delay_1ms(void)                 	//1ms延时函数
(0228) {
(0229)   	unsigned int i;
(0230)   	for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
     32B 2700      CLR	R16
     32C 2711      CLR	R17
     32D C002      RJMP	0x0330
     32E 5F0F      SUBI	R16,0xFF
     32F 4F1F      SBCI	R17,0xFF
     330 3704      CPI	R16,0x74
     331 E0E4      LDI	R30,4
     332 071E      CPC	R17,R30
     333 F3D0      BCS	0x032E
     334 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R10
     335 D503      RCALL	push_xgset300C
     336 0158      MOVW	R10,R16
(0231) }
(0232) void delay_nms(unsigned int n)       	//N ms延时函数
(0233) {
(0234)   	unsigned int i=0;
     337 2744      CLR	R20
     338 2755      CLR	R21
(0235)   	for (i=0;i<n;i++)
     339 C003      RJMP	0x033D
(0236)   	delay_1ms();
     33A DFF0      RCALL	_delay_1ms
     33B 5F4F      SUBI	R20,0xFF
     33C 4F5F      SBCI	R21,0xFF
     33D 154A      CP	R20,R10
     33E 055B      CPC	R21,R11
     33F F3D0      BCS	0x033A
     340 C4FD      RJMP	pop_xgset300C
_display:
     341 934A      ST	R20,-Y
     342 935A      ST	R21,-Y
(0237) }  
(0238)  
(0239) void display(void)
(0240) {
(0241)   	switch(page){
     343 9140 01CF LDS	R20,page
     345 2755      CLR	R21
     346 3040      CPI	R20,0
     347 0745      CPC	R20,R21
     348 F069      BEQ	0x0356
     349 3041      CPI	R20,1
     34A E0E0      LDI	R30,0
     34B 075E      CPC	R21,R30
     34C F081      BEQ	0x035D
     34D 3042      CPI	R20,2
     34E E0E0      LDI	R30,0
     34F 075E      CPC	R21,R30
     350 F089      BEQ	0x0362
     351 3043      CPI	R20,3
     352 E0E0      LDI	R30,0
     353 075E      CPC	R21,R30
     354 F091      BEQ	0x0367
     355 C015      RJMP	0x036B
(0242)       	case 0:	page0();flag=1;page=1;break;	//欢迎界面
     356 DE60      RCALL	_page0
     357 E081      LDI	R24,1
     358 9380 01D6 STS	flag,R24
     35A 9380 01CF STS	page,R24
     35C C00E      RJMP	0x036B
(0243) 	   	case 1:	page1();flag=0;		  break;	//参数设置页面
     35D DE85      RCALL	_page1
     35E 2422      CLR	R2
     35F 9220 01D6 STS	flag,R2
     361 C009      RJMP	0x036B
(0244) 	   	case 2:	page2();flag=0;		  break;	//开始界面
     362 DEA1      RCALL	_page2
     363 2422      CLR	R2
     364 9220 01D6 STS	flag,R2
     366 C004      RJMP	0x036B
(0245) 	   	case 3:	page3();flag=0;       break;	//结束界面
     367 DEBC      RCALL	_page3
     368 2422      CLR	R2
     369 9220 01D6 STS	flag,R2
(0246)       	default:break;
     36B 9159      LD	R21,Y+
     36C 9149      LD	R20,Y+
     36D 9508      RET
FILE: F:\Work\Data\程序\修订版~1.1\Send_485.c
(0001) /*****************************************************
(0002) * File name      : Send_485.C
(0003) * Description    : Header file of  main_H.H
(0004) * Platform       : ICCAVR 
(0005) * Author         : xiao xue      
(0006) * Email          : ay1509@yahoo.com
(0007) * Date           : 2008-03-13
(0008) * Description    :485 Communications
(0009) /********************头文件*************************/
(0010) #include"main_H.h"
(0011) #define fosc 8000000
(0012) #define baud 9600
(0013) /***************************485初始化***************************/
(0014) void RS485_init(void)  
(0015)  {
(0016)     UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN); 	//接收完成中断使能
_RS485_init:
     36E E988      LDI	R24,0x98
     36F B98A      OUT	0x0A,R24
(0017) 											//充许发送、充许接收 
(0018)     UBRRL=(fosc/16/(baud+1))%256; 		  	//波特率为9600
     370 E384      LDI	R24,0x34
     371 B989      OUT	0x09,R24
(0019)     UBRRH=(fosc/16/(baud+1))/256;
     372 2422      CLR	R2
     373 BC20      OUT	0x20,R2
(0020)     UCSRC=(1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);   
     374 E886      LDI	R24,0x86
     375 BD80      OUT	0x20,R24
(0021)     PORTD&=~0x04;  						  	//允许接收数据
     376 9892      CBI	0x12,2
(0022)     DDRD|=0x04;    							//数据方向
     377 9A8A      SBI	0x11,2
     378 9508      RET
(0023) } 
(0024) /******************485发送一个字节子程序************************/   
(0025) void  RS485_out_byte(uchar data )  
(0026) {
(0027) 
(0028)   while(!(UCSRA & (1<<UDRE)) );				//等待数据寄存器不为空
_RS485_out_byte:
  data                 --> R16
     379 9B5D      SBIS	0x0B,5
     37A CFFE      RJMP	_RS485_out_byte
(0029)      UDR=data;
     37B B90C      OUT	0x0C,R16
(0030)   while(!(UCSRA & (BIT(TXC))));  			//等待USART发送完成
     37C 9B5E      SBIS	0x0B,6
     37D CFFE      RJMP	0x037C
(0031)      UCSRA|=BIT(TXC);			 
     37E 9A5E      SBI	0x0B,6
     37F 9508      RET
_RS485_out_6byte:
  i                    --> R20
  datas                --> R10
     380 D4B8      RCALL	push_xgset300C
     381 0158      MOVW	R10,R16
(0032) }
(0033) 
(0034) /**************************一次发送6个字节*********************/
(0035) 
(0036) void  RS485_out_6byte(uchar *datas )  
(0037) {  
(0038) 	uint i=0;
     382 2744      CLR	R20
     383 2755      CLR	R21
(0039)  	CLI();							//关中断
     384 94F8      BCLR	7
(0040)   	PORTD|=0x04;   					//允许发送
     385 9A92      SBI	0x12,2
     386 C007      RJMP	0x038E
(0041)  	while(i<6 ){
(0042)   		RS485_out_byte(*(datas+i));	//发送1个字节
     387 01FA      MOVW	R30,R20
     388 0DEA      ADD	R30,R10
     389 1DFB      ADC	R31,R11
     38A 8100      LDD	R16,Z+0
     38B DFED      RCALL	_RS485_out_byte
(0043)  		i++;
     38C 5F4F      SUBI	R20,0xFF
     38D 4F5F      SBCI	R21,0xFF
     38E 3046      CPI	R20,6
     38F E0E0      LDI	R30,0
     390 075E      CPC	R21,R30
     391 F3A8      BCS	0x0387
(0044)   	} 
(0045)  	delay_nms(5);					//延时
     392 E005      LDI	R16,5
     393 E010      LDI	R17,0
     394 DFA0      RCALL	_delay_nms
(0046)  	PORTD&=~0x04;  				 	//允许接收
     395 9892      CBI	0x12,2
(0047) 	SEI();
     396 9478      BSET	7
     397 C4A6      RJMP	pop_xgset300C
(0048) } 
(0049) /**************************485发送数据函数*****************/
(0050) void Send_485(void)
(0051) { 	
(0052) 	RS485_out_6byte(moto1);			//给节点1发送数据
_Send_485:
     398 E104      LDI	R16,0x14
     399 E011      LDI	R17,1
     39A DFE5      RCALL	_RS485_out_6byte
(0053)    	RS485_out_6byte(moto2);			//给节点2发送数据
     39B E10A      LDI	R16,0x1A
     39C E011      LDI	R17,1
     39D DFE2      RCALL	_RS485_out_6byte
(0054)     RS485_out_6byte(moto3);
     39E E200      LDI	R16,0x20
     39F E011      LDI	R17,1
     3A0 DFDF      RCALL	_RS485_out_6byte
(0055)  	RS485_out_6byte(moto4);
     3A1 E206      LDI	R16,0x26
     3A2 E011      LDI	R17,1
     3A3 DFDC      RCALL	_RS485_out_6byte
     3A4 9508      RET
_RS485_ISR:
     3A5 922A      ST	R2,-Y
     3A6 938A      ST	R24,-Y
     3A7 939A      ST	R25,-Y
     3A8 93EA      ST	R30,-Y
     3A9 93FA      ST	R31,-Y
     3AA B62F      IN	R2,0x3F
     3AB 922A      ST	R2,-Y
(0056) }
(0057) /***************************中断接收服务子程序*******************/
(0058) #pragma interrupt_handler RS485_ISR:iv_USART_RX
(0059) void RS485_ISR(void)
(0060)  {
(0061)  CLI(); 							//关中断
     3AC 94F8      BCLR	7
(0062)  PORTD&=~0x04; 						//允许接收
     3AD 9892      CBI	0x12,2
(0063)  getchar[RS_i]=UDR; 				//存储数据寄存器的值
     3AE ED80      LDI	R24,0xD0
     3AF E091      LDI	R25,1
     3B0 91E0 012C LDS	R30,RS_i
     3B2 27FF      CLR	R31
     3B3 0FE8      ADD	R30,R24
     3B4 1FF9      ADC	R31,R25
     3B5 B02C      IN	R2,0x0C
     3B6 8220      STD	Z+0,R2
(0064)  RS_i++;							//预备存储下一个
     3B7 9180 012C LDS	R24,RS_i
     3B9 5F8F      SUBI	R24,0xFF
     3BA 9380 012C STS	RS_i,R24
(0065)  if(RS_i==6) 						//接收6个后清零
     3BC 3086      CPI	R24,6
     3BD F431      BNE	0x03C4
(0066)  	{RS_i=0;flag=3;}		
     3BE 2422      CLR	R2
     3BF 9220 012C STS	RS_i,R2
     3C1 E083      LDI	R24,3
     3C2 9380 01D6 STS	flag,R24
(0067)  SEI();								//开中断
     3C4 9478      BSET	7
     3C5 9029      LD	R2,Y+
     3C6 BE2F      OUT	0x3F,R2
     3C7 91F9      LD	R31,Y+
     3C8 91E9      LD	R30,Y+
     3C9 9199      LD	R25,Y+
     3CA 9189      LD	R24,Y+
     3CB 9029      LD	R2,Y+
     3CC 9518      RETI
(0068)  }
(0069)  
(0070)  /**********************接收数组判断存储子程序************************/
(0071) void data_decide(void)
(0072) {
(0073) 	uchar RS_j=0;
_data_decide:
  RS_j                 --> R16
     3CD 2700      CLR	R16
(0074) 	if(getchar[0]==0xaa){
     3CE 9180 01D0 LDS	R24,getchar
     3D0 3A8A      CPI	R24,0xAA
     3D1 F009      BEQ	0x03D3
     3D2 C069      RJMP	0x043C
(0075) 		switch(getchar[1]){
     3D3 9120 01D1 LDS	R18,getchar+1
     3D5 2733      CLR	R19
     3D6 322D      CPI	R18,0x2D
     3D7 E0E0      LDI	R30,0
     3D8 073E      CPC	R19,R30
     3D9 F409      BNE	0x03DB
     3DA C03B      RJMP	0x0416
     3DB E28D      LDI	R24,0x2D
     3DC E090      LDI	R25,0
     3DD 1782      CP	R24,R18
     3DE 0793      CPC	R25,R19
     3DF F02C      BLT	0x03E5
     3E0 312E      CPI	R18,0x1E
     3E1 E0E0      LDI	R30,0
     3E2 073E      CPC	R19,R30
     3E3 F101      BEQ	0x0404
     3E4 C057      RJMP	0x043C
     3E5 332C      CPI	R18,0x3C
     3E6 E0E0      LDI	R30,0
     3E7 073E      CPC	R19,R30
     3E8 F409      BNE	0x03EA
     3E9 C03E      RJMP	0x0428
     3EA 332C      CPI	R18,0x3C
     3EB E0E0      LDI	R30,0
     3EC 073E      CPC	R19,R30
     3ED F40C      BGE	0x03EF
     3EE C04D      RJMP	0x043C
     3EF 342B      CPI	R18,0x4B
     3F0 E0E0      LDI	R30,0
     3F1 073E      CPC	R19,R30
     3F2 F409      BNE	0x03F4
     3F3 C046      RJMP	0x043A
     3F4 C047      RJMP	0x043C
(0076) 			case 0x1e:				//节点1
(0077) 				while(RS_j<6){  
(0078)   					get[0+RS_j]=getchar[RS_j];
     3F5 ED80      LDI	R24,0xD0
     3F6 E091      LDI	R25,1
     3F7 2FE0      MOV	R30,R16
     3F8 27FF      CLR	R31
     3F9 0FE8      ADD	R30,R24
     3FA 1FF9      ADC	R31,R25
     3FB 8020      LDD	R2,Z+0
     3FC ED89      LDI	R24,0xD9
     3FD E091      LDI	R25,1

⌨️ 快捷键说明

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