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

📄 1602_duoji.lst

📁 用avr的m16产生pwm波控制舵机的程序!
💻 LST
📖 第 1 页 / 共 4 页
字号:
    0359 F3E8      BCS	0x0357
    035A 940E044F  CALL	pop_gset1
    035C 9508      RET
_write_data:
  temp                 --> R20
  i                    --> R22
  data                 --> R10
  addr                 --> R22
    035D 940E0448  CALL	push_gset3
    035F 2EA2      MOV	R10,R18
    0360 2F60      MOV	R22,R16
(0012)   ;
(0013) }
(0014) /****************************************************
(0015)                       写一个字节
(0016) ****************************************************/
(0017) void write_data(uchar addr,uchar data)
(0018) {
(0019) unsigned char i,temp;
(0020)  T_DDR|=T_IO;
    0361 9AD1      SBI	0x1A,1
(0021) T_PORT&=~T_RST;
    0362 98D8      CBI	0x1B,0
(0022) T_PORT&=~T_CLK;         
    0363 98DA      CBI	0x1B,2
(0023)   asm("nop");
    0364 0000      NOP
(0024)   asm("nop");
    0365 0000      NOP
(0025)   asm("nop");
    0366 0000      NOP
(0026)   asm("nop");
    0367 0000      NOP
(0027) T_PORT|=T_RST;                  //时钟信号低时拉高RST初始化
    0368 9AD8      SBI	0x1B,0
(0028)   temp=addr;
    0369 2F46      MOV	R20,R22
(0029)   for(i=0;i<8;i++) 
    036A 2766      CLR	R22
    036B C010      RJMP	0x037C
(0030)   { 
(0031)   if(temp&(1<<i))  
    036C E001      LDI	R16,1
    036D 2F16      MOV	R17,R22
    036E 940E0463  CALL	lsl8
    0370 2E24      MOV	R2,R20
    0371 2220      AND	R2,R16
    0372 F011      BEQ	0x0375
(0032)   		T_PORT |=T_IO ;  
    0373 9AD9      SBI	0x1B,1
    0374 C001      RJMP	0x0376
(0033)   else 
(0034)   	    T_PORT &=~T_IO ;
    0375 98D9      CBI	0x1B,1
(0035)   asm("nop");
    0376 0000      NOP
(0036)   asm("nop");
    0377 0000      NOP
(0037)   T_PORT |=T_CLK;             //时钟上升沿写入数据
    0378 9ADA      SBI	0x1B,2
(0038)   asm("nop");
    0379 0000      NOP
(0039)   T_PORT &=~T_CLK;             //时钟拉低电平 
    037A 98DA      CBI	0x1B,2
    037B 9563      INC	R22
    037C 3068      CPI	R22,0x8
    037D F370      BCS	0x036C
(0040)   }
(0041)   temp=data;
    037E 2D4A      MOV	R20,R10
(0042)     for(i=0;i<8;i++) 
    037F 2766      CLR	R22
    0380 C010      RJMP	0x0391
(0043)   { 
(0044)   if(temp&(1<<i))  
    0381 E001      LDI	R16,1
    0382 2F16      MOV	R17,R22
    0383 940E0463  CALL	lsl8
    0385 2E24      MOV	R2,R20
    0386 2220      AND	R2,R16
    0387 F011      BEQ	0x038A
(0045)   	    T_PORT |=T_IO ;  
    0388 9AD9      SBI	0x1B,1
    0389 C001      RJMP	0x038B
(0046)   else 
(0047)   	    T_PORT &=~T_IO ; 
    038A 98D9      CBI	0x1B,1
(0048)   asm("nop");
    038B 0000      NOP
(0049)   asm("nop"); 
    038C 0000      NOP
(0050)   T_PORT |=T_CLK;             //时钟上升沿写入数据
    038D 9ADA      SBI	0x1B,2
(0051)    asm("nop");
    038E 0000      NOP
(0052)   T_PORT &=~T_CLK;             //时钟拉低电平 
    038F 98DA      CBI	0x1B,2
    0390 9563      INC	R22
    0391 3068      CPI	R22,0x8
    0392 F370      BCS	0x0381
(0053)   } 
(0054)   T_PORT&=~T_RST;             //禁止DS1302 
    0393 98D8      CBI	0x1B,0
    0394 940E043E  CALL	pop_gset3
    0396 9508      RET
_read_data:
  k                    --> R20
  temp                 --> R22
  i                    --> R10
  addr                 --> R20
    0397 940E0448  CALL	push_gset3
    0399 2F40      MOV	R20,R16
(0055) }
(0056) 
(0057) /***************************************************
(0058)                       读一个字节
(0059) ***************************************************/
(0060) uchar read_data(uchar addr)
(0061) {
(0062) uchar i,temp,k;
(0063) temp=0;
    039A 2766      CLR	R22
(0064) T_DDR|=T_IO;
    039B 9AD1      SBI	0x1A,1
(0065) T_PORT&=~T_RST;
    039C 98D8      CBI	0x1B,0
(0066) T_PORT&=~T_CLK;         
    039D 98DA      CBI	0x1B,2
(0067)   asm("nop");
    039E 0000      NOP
(0068)   asm("nop");
    039F 0000      NOP
(0069)   asm("nop");
    03A0 0000      NOP
(0070)   asm("nop");
    03A1 0000      NOP
(0071) T_PORT|=T_RST;                  //时钟信号低时拉高RST初始化
    03A2 9AD8      SBI	0x1B,0
(0072) temp=addr;
    03A3 2F64      MOV	R22,R20
(0073)   for(i=0;i<8;i++) 
    03A4 24AA      CLR	R10
    03A5 C00F      RJMP	0x03B5
(0074)   { 
(0075)   	if(temp&(1<<i)) 
    03A6 E001      LDI	R16,1
    03A7 2D1A      MOV	R17,R10
    03A8 940E0463  CALL	lsl8
    03AA 2E26      MOV	R2,R22
    03AB 2220      AND	R2,R16
    03AC F011      BEQ	0x03AF
(0076)   		 T_PORT |=T_IO ;  
    03AD 9AD9      SBI	0x1B,1
    03AE C001      RJMP	0x03B0
(0077)   	else 
(0078)   		 T_PORT &=~T_IO ;
    03AF 98D9      CBI	0x1B,1
(0079)     asm("nop");
    03B0 0000      NOP
(0080)     asm("nop"); 
    03B1 0000      NOP
(0081)   	T_PORT |=T_CLK;             //时钟上升沿写入数据 	
    03B2 9ADA      SBI	0x1B,2
(0082) 	T_PORT &=~T_CLK;             //时钟拉低电平 
    03B3 98DA      CBI	0x1B,2
    03B4 94A3      INC	R10
    03B5 2D8A      MOV	R24,R10
    03B6 3088      CPI	R24,0x8
    03B7 F370      BCS	0x03A6
(0083)   }
(0084)    T_DDR&=~T_IO;
    03B8 98D1      CBI	0x1A,1
(0085) for(i=0;i<8;i++)
    03B9 24AA      CLR	R10
    03BA C016      RJMP	0x03D1
(0086)  { 
(0087)     k=(T_PIN&T_IO);
    03BB B349      IN	R20,0x19
    03BC 7042      ANDI	R20,2
(0088)   if(k==T_IO)
    03BD 3042      CPI	R20,2
    03BE F431      BNE	0x03C5
(0089)       temp|=(1<<i);
    03BF E001      LDI	R16,1
    03C0 2D1A      MOV	R17,R10
    03C1 940E0463  CALL	lsl8
    03C3 2B60      OR	R22,R16
    03C4 C007      RJMP	0x03CC
(0090)   else
(0091)   	  temp&=~(1<<i);
    03C5 E001      LDI	R16,1
    03C6 2D1A      MOV	R17,R10
    03C7 940E0463  CALL	lsl8
    03C9 2E20      MOV	R2,R16
    03CA 9420      COM	R2
    03CB 2162      AND	R22,R2
(0092) 	    asm("nop");
    03CC 0000      NOP
(0093)        asm("nop"); 
    03CD 0000      NOP
(0094)   T_PORT|=T_CLK;              //上升沿读出数据 
    03CE 9ADA      SBI	0x1B,2
(0095)    T_PORT &=~T_CLK;             //时钟电平拉低 
    03CF 98DA      CBI	0x1B,2
    03D0 94A3      INC	R10
    03D1 2D8A      MOV	R24,R10
    03D2 3088      CPI	R24,0x8
    03D3 F338      BCS	0x03BB
(0096)   }
(0097)   T_DDR|=T_IO;
    03D4 9AD1      SBI	0x1A,1
(0098)   T_PORT&=~T_CLK; 
    03D5 98DA      CBI	0x1B,2
(0099)   T_PORT&=~T_RST;             //禁止DS1302 
    03D6 98D8      CBI	0x1B,0
(0100)  return(temp);
    03D7 2F06      MOV	R16,R22
    03D8 940E043E  CALL	pop_gset3
    03DA 9508      RET
(0101) }
(0102) //1302初始化
(0103) void init_1302()
(0104) {
(0105) write_data(0x8e,0x00);      //关闭寄存器写保护
_init_1302:
    03DB 2722      CLR	R18
    03DC E80E      LDI	R16,0x8E
    03DD DF7F      RCALL	_write_data
(0106) write_data(0x90,0x00);	    //写充电寄存器
    03DE 2722      CLR	R18
    03DF E900      LDI	R16,0x90
    03E0 DF7C      RCALL	_write_data
(0107) write_data(0x80,0x00);      //秒寄存器停止位置0,时钟启动,初值设为0
    03E1 2722      CLR	R18
    03E2 E800      LDI	R16,0x80
    03E3 DF79      RCALL	_write_data
    03E4 9508      RET
_init_time:
  year                 --> Y+12
  d                    --> Y+10
  month                --> Y+8
  day                  --> Y+6
  hour                 --> Y+4
  min                  --> R20
  sec                  --> R22
    03E5 940E044A  CALL	push_gset2
    03E7 2F42      MOV	R20,R18
    03E8 2F60      MOV	R22,R16
(0108) }
(0109) 
(0110) void init_time(uchar sec,uchar min,uchar hour,uchar day,uchar month,uchar d,uchar year)
(0111) {
(0112)   write_data(0x80,sec);
    03E9 2F26      MOV	R18,R22
    03EA E800      LDI	R16,0x80
    03EB DF71      RCALL	_write_data
(0113)   write_data(0x82,min);
    03EC 2F24      MOV	R18,R20
    03ED E802      LDI	R16,0x82
    03EE DF6E      RCALL	_write_data
(0114)   write_data(0x84,hour);
    03EF 812C      LDD	R18,Y+4
    03F0 E804      LDI	R16,0x84
    03F1 DF6B      RCALL	_write_data
(0115)   write_data(0x86,day);
    03F2 812E      LDD	R18,Y+6
    03F3 E806      LDI	R16,0x86
    03F4 DF68      RCALL	_write_data
(0116)   write_data(0x88,month);
    03F5 8528      LDD	R18,Y+8
    03F6 E808      LDI	R16,0x88
    03F7 DF65      RCALL	_write_data
(0117)   write_data(0x8a,d);
    03F8 852A      LDD	R18,Y+10
    03F9 E80A      LDI	R16,0x8A
    03FA DF62      RCALL	_write_data
(0118)   write_data(0x8c,year);
FILE: <library>
    03FB 852C      LDD	R18,Y+12
    03FC E80C      LDI	R16,0x8C
    03FD DF5F      RCALL	_write_data
    03FE 940E043B  CALL	pop_gset2
    0400 9508      RET
mod16s:
    0401 9468      BSET	6
    0402 92DA      ST	R13,-Y
    0403 2ED1      MOV	R13,R17
    0404 C004      RJMP	0x0409
div16s:
    0405 94E8      BCLR	6
    0406 92DA      ST	R13,-Y
    0407 2ED1      MOV	R13,R17
    0408 26D3      EOR	R13,R19
    0409 FF17      SBRS	R17,7
    040A C004      RJMP	0x040F
    040B 9510      COM	R17
    040C 9500      COM	R16
    040D 5F0F      SUBI	R16,0xFF
    040E 4F1F      SBCI	R17,0xFF
    040F FF37      SBRS	R19,7
    0410 C004      RJMP	0x0415
    0411 9530      COM	R19
    0412 9520      COM	R18
    0413 5F2F      SUBI	R18,0xFF
    0414 4F3F      SBCI	R19,0xFF
    0415 940E0422  CALL	xdiv16u
    0417 FED7      SBRS	R13,7
    0418 C004      RJMP	0x041D
    0419 9510      COM	R17
    041A 9500      COM	R16
    041B 5F0F      SUBI	R16,0xFF
    041C 4F1F      SBCI	R17,0xFF
    041D 90D9      LD	R13,Y+
    041E 9508      RET
mod16u:
    041F 9468      BSET	6
    0420 C001      RJMP	xdiv16u
div16u:
    0421 94E8      BCLR	6
xdiv16u:
    0422 92EA      ST	R14,-Y
    0423 92FA      ST	R15,-Y
    0424 938A      ST	R24,-Y
    0425 24EE      CLR	R14
    0426 24FF      CLR	R15
    0427 E180      LDI	R24,0x10
    0428 0F00      LSL	R16
    0429 1F11      ROL	R17
    042A 1CEE      ROL	R14
    042B 1CFF      ROL	R15
    042C 16E2      CP	R14,R18
    042D 06F3      CPC	R15,R19
    042E F018      BCS	0x0432
    042F 1AE2      SUB	R14,R18
    0430 0AF3      SBC	R15,R19
    0431 9503      INC	R16
    0432 958A      DEC	R24
    0433 F7A1      BNE	0x0428
    0434 F416      BRTC	0x0437
    0435 2D0E      MOV	R16,R14
    0436 2D1F      MOV	R17,R15
    0437 9189      LD	R24,Y+
    0438 90F9      LD	R15,Y+
    0439 90E9      LD	R14,Y+
    043A 9508      RET
pop_gset2:
    043B E0E2      LDI	R30,2
    043C 940C0450  JMP	pop
pop_gset3:
    043E E0E4      LDI	R30,4
    043F 940C0450  JMP	pop
pop_gset4:
    0441 E0E8      LDI	R30,0x8
    0442 940C0450  JMP	pop
push_gset5:
    0444 92FA      ST	R15,-Y
    0445 92EA      ST	R14,-Y
push_gset4:
    0446 92DA      ST	R13,-Y
    0447 92CA      ST	R12,-Y
push_gset3:
    0448 92BA      ST	R11,-Y
    0449 92AA      ST	R10,-Y
push_gset2:
    044A 937A      ST	R23,-Y
    044B 936A      ST	R22,-Y
push_gset1:
    044C 935A      ST	R21,-Y
    044D 934A      ST	R20,-Y
    044E 9508      RET
pop_gset1:
    044F E0E1      LDI	R30,1
pop:
    0450 9149      LD	R20,Y+
    0451 9159      LD	R21,Y+
    0452 FDE0      SBRC	R30,0
    0453 9508      RET
    0454 9169      LD	R22,Y+
    0455 9179      LD	R23,Y+
    0456 FDE1      SBRC	R30,1
    0457 9508      RET
    0458 90A9      LD	R10,Y+
    0459 90B9      LD	R11,Y+
    045A FDE2      SBRC	R30,2
    045B 9508      RET
    045C 90C9      LD	R12,Y+
    045D 90D9      LD	R13,Y+
    045E FDE3      SBRC	R30,3
    045F 9508      RET
    0460 90E9      LD	R14,Y+
    0461 90F9      LD	R15,Y+
    0462 9508      RET
lsl8:
    0463 2311      TST	R17
    0464 F019      BEQ	0x0468
    0465 0F00      LSL	R16
    0466 951A      DEC	R17
    0467 CFFB      RJMP	lsl8
    0468 9508      RET

⌨️ 快捷键说明

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