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

📄 1302-162.lst

📁 有遥控的温度计,用dS1302做时钟芯片
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0005) void delayb(uint x)                //1.5us左右 
(0006) { 
_delayb:
  x                    --> R16
    049C C002      RJMP	0x049F
(0007)      while(x) 
(0008)     { 
(0009)        x--; 
    049D 5001      SUBI	R16,1
    049E 4010      SBCI	R17,0
    049F 3000      CPI	R16,0
    04A0 0701      CPC	R16,R17
    04A1 F7D9      BNE	0x049D
    04A2 9508      RET
_init_1820:
  ack                  --> R20
    04A3 D0BD      RCALL	push_gset1
(0010)     } 
(0011) } 
(0012) //18b20初始化
(0013) uchar init_1820() 
(0014) {   uchar ack;
(0015)     B20_DATA_DDR|=B20_DATA_IO ;                   //输出   
    04A4 9AA0      SBI	0x14,0
(0016)     B20_DATA_PORT&=~B20_DATA_IO ; 
    04A5 98A8      CBI	0x15,0
(0017)     delayb(600);                   //复位低电平480us~960us
    04A6 E508      LDI	R16,0x58
    04A7 E012      LDI	R17,2
    04A8 DFF3      RCALL	_delayb
(0018)     B20_DATA_PORT|=B20_DATA_IO ;                  //电平拉高
    04A9 9AA8      SBI	0x15,0
(0019) 	B20_DATA_DDR&=~B20_DATA_IO ;                    //输入
    04AA 98A0      CBI	0x14,0
(0020) 	delayb(90);                    //延时60us~240us
    04AB E50A      LDI	R16,0x5A
    04AC E010      LDI	R17,0
    04AD DFEE      RCALL	_delayb
(0021) 	ack=B20_DATA_PIN;                     //读出ack的值
    04AE B343      IN	R20,0x13
(0022) 	ack&=B20_DATA_IO; 
    04AF 7041      ANDI	R20,1
(0023) 	delayb(200);                   //等待480us以上
    04B0 EC08      LDI	R16,0xC8
    04B1 E010      LDI	R17,0
    04B2 DFE9      RCALL	_delayb
(0024) 	B20_DATA_DDR|=B20_DATA_IO ;                   //输出   
    04B3 9AA0      SBI	0x14,0
(0025) 	return(ack);
    04B4 2F04      MOV	R16,R20
    04B5 D0AE      RCALL	pop_gset1
    04B6 9508      RET
_write_1820:
  m                    --> R20
  i                    --> R22
  x                    --> R10
    04B7 D0A5      RCALL	push_gset3
    04B8 2EA0      MOV	R10,R16
(0026) } 
(0027) //写一个字节
(0028) void write_1820(uchar x) 
(0029) {    
(0030)     uchar i,m;
(0031) 	B20_DATA_DDR|=B20_DATA_IO;   //输出 
    04B9 9AA0      SBI	0x14,0
(0032)     for(i=0;i<8;i++) 
    04BA 2766      CLR	R22
    04BB C01A      RJMP	0x04D6
(0033)     {  
(0034) 	   m=x&0x01;                       
    04BC 2D4A      MOV	R20,R10
    04BD 7041      ANDI	R20,1
(0035) 	   if(m==0x01)
    04BE 3041      CPI	R20,1
    04BF F461      BNE	0x04CC
(0036) 	   {
(0037) 	    delayb(1);                        //延时>1us
    04C0 E001      LDI	R16,1
    04C1 E010      LDI	R17,0
    04C2 DFD9      RCALL	_delayb
(0038)        	B20_DATA_PORT&=~B20_DATA_IO;    //产生写起始信号
    04C3 98A8      CBI	0x15,0
(0039) 	   	delayb(3);                       //延时1us~15us  8us
    04C4 E003      LDI	R16,3
    04C5 E010      LDI	R17,0
    04C6 DFD5      RCALL	_delayb
(0040) 	   	B20_DATA_PORT|=B20_DATA_IO;     //数据线电平拉高
    04C7 9AA8      SBI	0x15,0
(0041) 	   	delayb(55);                     //延时60us~120us  85us
    04C8 E307      LDI	R16,0x37
    04C9 E010      LDI	R17,0
    04CA DFD1      RCALL	_delayb
(0042) 	   }
    04CB C008      RJMP	0x04D4
(0043) 	   else
(0044) 	   {
(0045) 	    delayb(1);                        //延时>1us
    04CC E001      LDI	R16,1
    04CD E010      LDI	R17,0
    04CE DFCD      RCALL	_delayb
(0046)        	B20_DATA_PORT&=~B20_DATA_IO;     //产生写起始信号
    04CF 98A8      CBI	0x15,0
(0047)        	delayb(55);                      //B20采样要60us到120us  85us
    04D0 E307      LDI	R16,0x37
    04D1 E010      LDI	R17,0
    04D2 DFC9      RCALL	_delayb
(0048)        	B20_DATA_PORT|=B20_DATA_IO;      //数据线电平拉高
    04D3 9AA8      SBI	0x15,0
(0049)        }
(0050) 	   x=x>>1;                          //右移一位
    04D4 94A6      LSR	R10
    04D5 9563      INC	R22
    04D6 3068      CPI	R22,0x8
    04D7 F320      BCS	0x04BC
    04D8 D07C      RCALL	pop_gset3
    04D9 9508      RET
_read_1820:
  temp                 --> R20
  k                    --> R22
  n                    --> R10
    04DA D082      RCALL	push_gset3
(0051) 	} 
(0052) } 
(0053) //读一个字节
(0054) uchar read_1820() 
(0055) {     
(0056)     uchar temp,k,n; 
(0057)        temp=0; 
    04DB 2744      CLR	R20
(0058)     for(n=0;n<8;n++) 
    04DC 24AA      CLR	R10
    04DD C01E      RJMP	0x04FC
(0059)        { 
(0060) 	  B20_DATA_DDR|=B20_DATA_IO;         //输出 
    04DE 9AA0      SBI	0x14,0
(0061)       B20_DATA_PORT&=~B20_DATA_IO;               //产生读起始信号
    04DF 98A8      CBI	0x15,0
(0062)       asm("nop");
    04E0 0000      NOP
(0063) 	  asm("nop");
    04E1 0000      NOP
(0064) 	  asm("nop");
    04E2 0000      NOP
(0065) 	  asm("nop");                        //延时1us~15us  2us
    04E3 0000      NOP
(0066)       B20_DATA_PORT|=B20_DATA_IO;        //电平拉高    
    04E4 9AA8      SBI	0x15,0
(0067)       B20_DATA_DDR&=~B20_DATA_IO;        //接收数据
    04E5 98A0      CBI	0x14,0
(0068) 	  asm("nop");                      //要在15us内完成读数
    04E6 0000      NOP
(0069) 	  asm("nop");      
    04E7 0000      NOP
(0070)       k=B20_DATA_PIN;     //读数据,从低位开始 
    04E8 B363      IN	R22,0x13
(0071) 	  k&=0x01;
    04E9 7061      ANDI	R22,1
(0072)       if(k) 
    04EA F029      BEQ	0x04F0
(0073)       temp|=(1<<n); 
    04EB E001      LDI	R16,1
    04EC 2D1A      MOV	R17,R10
    04ED D0BF      RCALL	lsl8
    04EE 2B40      OR	R20,R16
    04EF C006      RJMP	0x04F6
(0074)       else 
(0075)       temp&=~(1<<n); 
    04F0 E001      LDI	R16,1
    04F1 2D1A      MOV	R17,R10
    04F2 D0BA      RCALL	lsl8
    04F3 2E20      MOV	R2,R16
    04F4 9420      COM	R2
    04F5 2142      AND	R20,R2
(0076)       delayb(40);                          //60~120us   
    04F6 E208      LDI	R16,0x28
    04F7 E010      LDI	R17,0
    04F8 DFA3      RCALL	_delayb
(0077) 	  B20_DATA_DDR|=B20_DATA_IO;          //输出
    04F9 9AA0      SBI	0x14,0
(0078)       B20_DATA_PORT|=B20_DATA_IO; 
    04FA 9AA8      SBI	0x15,0
    04FB 94A3      INC	R10
    04FC 2D8A      MOV	R24,R10
    04FD 3088      CPI	R24,0x8
    04FE F2F8      BCS	0x04DE
(0079)    } 
(0080)    return temp; 
FILE: <library>
    04FF 2F04      MOV	R16,R20
    0500 D054      RCALL	pop_gset3
    0501 9508      RET
mod16s:
    0502 9468      BSET	6
    0503 92DA      ST	R13,-Y
    0504 2ED1      MOV	R13,R17
    0505 C004      RJMP	0x050A
div16s:
    0506 94E8      BCLR	6
    0507 92DA      ST	R13,-Y
    0508 2ED1      MOV	R13,R17
    0509 26D3      EOR	R13,R19
    050A FF17      SBRS	R17,7
    050B C004      RJMP	0x0510
    050C 9510      COM	R17
    050D 9500      COM	R16
    050E 5F0F      SUBI	R16,0xFF
    050F 4F1F      SBCI	R17,0xFF
    0510 FF37      SBRS	R19,7
    0511 C004      RJMP	0x0516
    0512 9530      COM	R19
    0513 9520      COM	R18
    0514 5F2F      SUBI	R18,0xFF
    0515 4F3F      SBCI	R19,0xFF
    0516 D00B      RCALL	xdiv16u
    0517 FED7      SBRS	R13,7
    0518 C004      RJMP	0x051D
    0519 9510      COM	R17
    051A 9500      COM	R16
    051B 5F0F      SUBI	R16,0xFF
    051C 4F1F      SBCI	R17,0xFF
    051D 90D9      LD	R13,Y+
    051E 9508      RET
mod16u:
    051F 9468      BSET	6
    0520 C001      RJMP	xdiv16u
div16u:
    0521 94E8      BCLR	6
xdiv16u:
    0522 92EA      ST	R14,-Y
    0523 92FA      ST	R15,-Y
    0524 938A      ST	R24,-Y
    0525 24EE      CLR	R14
    0526 24FF      CLR	R15
    0527 E180      LDI	R24,0x10
    0528 0F00      LSL	R16
    0529 1F11      ROL	R17
    052A 1CEE      ROL	R14
    052B 1CFF      ROL	R15
    052C 16E2      CP	R14,R18
    052D 06F3      CPC	R15,R19
    052E F018      BCS	0x0532
    052F 1AE2      SUB	R14,R18
    0530 0AF3      SBC	R15,R19
    0531 9503      INC	R16
    0532 958A      DEC	R24
    0533 F7A1      BNE	0x0528
    0534 F416      BRTC	0x0537
    0535 2D0E      MOV	R16,R14
    0536 2D1F      MOV	R17,R15
    0537 9189      LD	R24,Y+
    0538 90F9      LD	R15,Y+
    0539 90E9      LD	R14,Y+
    053A 9508      RET
mod8u:
    053B 9468      BSET	6
    053C C001      RJMP	xdiv8u
div8u:
    053D 94E8      BCLR	6
xdiv8u:
    053E 932A      ST	R18,-Y
    053F 92FA      ST	R15,-Y
    0540 92EA      ST	R14,-Y
    0541 24FF      CLR	R15
    0542 24EE      CLR	R14
    0543 E120      LDI	R18,0x10
    0544 0F00      LSL	R16
    0545 1CFF      ROL	R15
    0546 1CEE      ROL	R14
    0547 16E1      CP	R14,R17
    0548 F010      BCS	0x054B
    0549 1AE1      SUB	R14,R17
    054A 9503      INC	R16
    054B 952A      DEC	R18
    054C F7B9      BNE	0x0544
    054D F40E      BRTC	0x054F
    054E 2D0E      MOV	R16,R14
    054F 90E9      LD	R14,Y+
    0550 90F9      LD	R15,Y+
    0551 9129      LD	R18,Y+
    0552 9508      RET
pop_gset2:
    0553 E0E2      LDI	R30,2
    0554 C010      RJMP	pop
pop_gset3:
    0555 E0E4      LDI	R30,4
    0556 C00E      RJMP	pop
pop_gset4:
    0557 E0E8      LDI	R30,0x8
    0558 C00C      RJMP	pop
push_gset5:
    0559 92FA      ST	R15,-Y
    055A 92EA      ST	R14,-Y
push_gset4:
    055B 92DA      ST	R13,-Y
    055C 92CA      ST	R12,-Y
push_gset3:
    055D 92BA      ST	R11,-Y
    055E 92AA      ST	R10,-Y
push_gset2:
    055F 937A      ST	R23,-Y
    0560 936A      ST	R22,-Y
push_gset1:
    0561 935A      ST	R21,-Y
    0562 934A      ST	R20,-Y
    0563 9508      RET
pop_gset1:
    0564 E0E1      LDI	R30,1
pop:
    0565 9149      LD	R20,Y+
    0566 9159      LD	R21,Y+
    0567 FDE0      SBRC	R30,0
    0568 9508      RET
    0569 9169      LD	R22,Y+
    056A 9179      LD	R23,Y+
    056B FDE1      SBRC	R30,1
    056C 9508      RET
    056D 90A9      LD	R10,Y+
    056E 90B9      LD	R11,Y+
    056F FDE2      SBRC	R30,2
    0570 9508      RET
    0571 90C9      LD	R12,Y+
    0572 90D9      LD	R13,Y+
    0573 FDE3      SBRC	R30,3
    0574 9508      RET
    0575 90E9      LD	R14,Y+
    0576 90F9      LD	R15,Y+
    0577 9508      RET
push_lset:
    0578 93FA      ST	R31,-Y
    0579 93EA      ST	R30,-Y
    057A 93BA      ST	R27,-Y
    057B 93AA      ST	R26,-Y
    057C 939A      ST	R25,-Y
    057D 938A      ST	R24,-Y
    057E 933A      ST	R19,-Y
    057F 932A      ST	R18,-Y
    0580 931A      ST	R17,-Y
    0581 930A      ST	R16,-Y
    0582 929A      ST	R9,-Y
    0583 928A      ST	R8,-Y
    0584 927A      ST	R7,-Y
    0585 926A      ST	R6,-Y
    0586 925A      ST	R5,-Y
    0587 924A      ST	R4,-Y
    0588 923A      ST	R3,-Y
    0589 922A      ST	R2,-Y
    058A 921A      ST	R1,-Y
    058B 920A      ST	R0,-Y
    058C B60F      IN	R0,0x3F
    058D 920A      ST	R0,-Y
    058E 9508      RET
pop_lset:
    058F 9009      LD	R0,Y+
    0590 BE0F      OUT	0x3F,R0
    0591 9009      LD	R0,Y+
    0592 9019      LD	R1,Y+
    0593 9029      LD	R2,Y+
    0594 9039      LD	R3,Y+
    0595 9049      LD	R4,Y+
    0596 9059      LD	R5,Y+
    0597 9069      LD	R6,Y+
    0598 9079      LD	R7,Y+
    0599 9089      LD	R8,Y+
    059A 9099      LD	R9,Y+
    059B 9109      LD	R16,Y+
    059C 9119      LD	R17,Y+
    059D 9129      LD	R18,Y+
    059E 9139      LD	R19,Y+
    059F 9189      LD	R24,Y+
    05A0 9199      LD	R25,Y+
    05A1 91A9      LD	R26,Y+
    05A2 91B9      LD	R27,Y+
    05A3 91E9      LD	R30,Y+
    05A4 91F9      LD	R31,Y+
    05A5 9508      RET
lsl16:
    05A6 2322      TST	R18
    05A7 F021      BEQ	0x05AC
    05A8 0F00      LSL	R16
    05A9 1F11      ROL	R17
    05AA 952A      DEC	R18
    05AB CFFA      RJMP	lsl16
    05AC 9508      RET
lsl8:
    05AD 2311      TST	R17
    05AE F019      BEQ	0x05B2
    05AF 0F00      LSL	R16
    05B0 951A      DEC	R17
    05B1 CFFB      RJMP	lsl8
    05B2 9508      RET
mpy16s:
    05B3 920A      ST	R0,-Y
    05B4 921A      ST	R1,-Y
    05B5 2400      CLR	R0
    05B6 2411      CLR	R1
    05B7 3000      CPI	R16,0
    05B8 0701      CPC	R16,R17
    05B9 F041      BEQ	0x05C2
    05BA 9516      LSR	R17
    05BB 9507      ROR	R16
    05BC F410      BCC	0x05BF
    05BD 0E02      ADD	R0,R18
    05BE 1E13      ADC	R1,R19
    05BF 0F22      LSL	R18
    05C0 1F33      ROL	R19
    05C1 CFF5      RJMP	0x05B7
    05C2 2D00      MOV	R16,R0
    05C3 2D11      MOV	R17,R1
    05C4 9019      LD	R1,Y+
    05C5 9009      LD	R0,Y+
    05C6 9508      RET

⌨️ 快捷键说明

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