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

📄 18b20.lst

📁 avr基础程序大全
💻 LST
📖 第 1 页 / 共 2 页
字号:
Interrupt Vectors
    00000 940C 0037 JMP	__start|__text_start

Program Code (text area)
__start|__text_start:
    00037 E5CF      LDI	R28,0x5F
    00038 E0D4      LDI	R29,4
    00039 BFCD      OUT	0x3D,R28
    0003A BFDE      OUT	0x3E,R29
    0003B 51CE      SUBI	R28,0x1E
    0003C 40D0      SBCI	R29,0
    0003D EA0A      LDI	R16,0xAA
    0003E 8308      ST	Y,R16
    0003F 2400      CLR	R0
    00040 E7E9      LDI	R30,0x79
    00041 E0F0      LDI	R31,0
    00042 E010      LDI	R17,0
    00043 37EB      CPI	R30,0x7B
    00044 07F1      CPC	R31,R17
    00045 F011      BEQ	0x0048
    00046 9201      ST	Z+,R0
    00047 CFFB      RJMP	0x0043
    00048 8300      ST	Z,R16
    00049 E5E4      LDI	R30,0x54
    0004A E0F0      LDI	R31,0
    0004B E6A0      LDI	R26,0x60
    0004C E0B0      LDI	R27,0
    0004D E010      LDI	R17,0
    0004E E000      LDI	R16,0
    0004F BF0B      OUT	0x3B,R16
    00050 36ED      CPI	R30,0x6D
    00051 07F1      CPC	R31,R17
    00052 F021      BEQ	0x0057
    00053 95C8      LPM
    00054 9631      ADIW	R30,1
    00055 920D      ST	X+,R0
    00056 CFF9      RJMP	0x0050
    00057 940E 012C CALL	_main
_exit:
    00059 CFFF      RJMP	_exit
_Delay_1ms:
  j                    --> R20
  x                    --> R22
  i                    --> R16
    0005A 940E 0176 CALL	push_xgsetF000
    0005C 2744      CLR	R20
    0005D 2755      CLR	R21
    0005E C00C      RJMP	0x006B
    0005F 2766      CLR	R22
    00060 2777      CLR	R23
    00061 C002      RJMP	0x0064
    00062 5F6F      SUBI	R22,0xFF
    00063 4F7F      SBCI	R23,0xFF
    00064 E785      LDI	R24,0x75
    00065 E094      LDI	R25,4
    00066 1786      CP	R24,R22
    00067 0797      CPC	R25,R23
    00068 F7C8      BCC	0x0062
    00069 5F4F      SUBI	R20,0xFF
    0006A 4F5F      SBCI	R21,0xFF
    0006B 1740      CP	R20,R16
    0006C 0751      CPC	R21,R17
    0006D F388      BCS	0x005F
    0006E 940C 017B JMP	pop_xgsetF000
FILE: F:\51&av配套光盘\51&avr配套程序\avr程序\24.DS18b20\main.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) 
(0004) 
(0005) /************************************************************************* 
(0006) ds18b20头文件    
(0007) M16  内部8M         
(0008) *************************************************************************/ 
(0009) #define CLR_DIR_1WIRE DDRD&=~BIT(7)     //只要修改这里的参数就可以了!呵呵! 
(0010) #define SET_DIR_1WIRE DDRD|=BIT(7)      //里面什么都不用该! 
(0011) #define CLR_OP_1WIRE PORTD&=~BIT(7) 
(0012) #define SET_OP_1WIRE PORTD|=BIT(7)       
(0013) #define CHECK_IP_1WIRE (PIND & 0x80)    //检测 
(0014) 
(0015) 
(0016) unsigned char wmh,wml; 
(0017) 
(0018) 
(0019) /*----------------------------------------------------------------------- 
(0020) 延时函数 
(0021) 系统时钟:8M 
(0022) -----------------------------------------------------------------------*/ 
(0023) void delay_1us(void)                 //1us延时函数 
(0024)   { 
(0025)    asm("nop"); 
_delay_1us:
    00070 0000      NOP
    00071 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R10
    00072 940E 016C CALL	push_xgset300C
    00074 0158      MOVW	R10,R16
(0026)   } 
(0027) 
(0028) void delay_nus(unsigned int n)       //N us延时函数 
(0029)   { 
(0030)    unsigned int i=0; 
(0031)    for (i=0;i<n;i++) 
    00075 2744      CLR	R20
    00076 2755      CLR	R21
    00077 C003      RJMP	0x007B
(0032)    delay_1us(); 
    00078 DFF7      RCALL	_delay_1us
    00079 5F4F      SUBI	R20,0xFF
    0007A 4F5F      SBCI	R21,0xFF
    0007B 154A      CP	R20,R10
    0007C 055B      CPC	R21,R11
    0007D F3D0      BCS	0x0078
    0007E 940C 0171 JMP	pop_xgset300C
(0033)   } 
(0034)    
(0035) void delay_1ms(void)                 //1ms延时函数 
(0036)   { 
(0037)    unsigned int i; 
(0038)    for (i=0;i<1140;i++); 
_delay_1ms:
  i                    --> R16
    00080 2700      CLR	R16
    00081 2711      CLR	R17
    00082 C002      RJMP	0x0085
    00083 5F0F      SUBI	R16,0xFF
    00084 4F1F      SBCI	R17,0xFF
    00085 3704      CPI	R16,0x74
    00086 E0E4      LDI	R30,4
    00087 071E      CPC	R17,R30
    00088 F3D0      BCS	0x0083
    00089 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R10
    0008A 940E 016C CALL	push_xgset300C
    0008C 0158      MOVW	R10,R16
(0039)   } 
(0040)    
(0041) void delay_nms(unsigned int n)       //N ms延时函数 
(0042)   { 
(0043)    unsigned int i=0; 
(0044)    for (i=0;i<n;i++) 
    0008D 2744      CLR	R20
    0008E 2755      CLR	R21
    0008F C003      RJMP	0x0093
(0045)    delay_1ms(); 
    00090 DFEF      RCALL	_delay_1ms
    00091 5F4F      SUBI	R20,0xFF
    00092 4F5F      SBCI	R21,0xFF
    00093 154A      CP	R20,R10
    00094 055B      CPC	R21,R11
    00095 F3D0      BCS	0x0090
    00096 940C 0171 JMP	pop_xgset300C
(0046)   } 
(0047) 
(0048) 
(0049) void init_1820()  
(0050) {  
(0051)     SET_DIR_1WIRE; //设置PC2 为输出 
_init_1820:
    00098 9A8F      SBI	0x11,7
(0052)     SET_OP_1WIRE;   
    00099 9A97      SBI	0x12,7
(0053)     CLR_OP_1WIRE;  
    0009A 9897      CBI	0x12,7
(0054)     delay_nus(480);    //480us以上  
    0009B EE00      LDI	R16,0xE0
    0009C E011      LDI	R17,1
    0009D DFD4      RCALL	_delay_nus
(0055)     SET_OP_1WIRE;  
    0009E 9A97      SBI	0x12,7
(0056)     CLR_DIR_1WIRE;  
    0009F 988F      CBI	0x11,7
(0057)     delay_nus(20);     //15~60us  
    000A0 E104      LDI	R16,0x14
    000A1 E010      LDI	R17,0
    000A2 DFCF      RCALL	_delay_nus
(0058)     while(CHECK_IP_1WIRE);  
    000A3 9987      SBIC	0x10,7
    000A4 CFFE      RJMP	0x00A3
(0059)     SET_DIR_1WIRE;  
    000A5 9A8F      SBI	0x11,7
(0060)     SET_OP_1WIRE;  
    000A6 9A97      SBI	0x12,7
(0061)     delay_nus(140);   //60~240us  
    000A7 E80C      LDI	R16,0x8C
    000A8 E010      LDI	R17,0
    000A9 CFC8      RJMP	_delay_nus
_write_1820:
  m                    --> R20
  x                    --> R10
    000AA 92AA      ST	-Y,R10
    000AB 934A      ST	-Y,R20
    000AC 2EA0      MOV	R10,R16
(0062) }  
(0063) void write_1820(unsigned char x)  
(0064) {     
(0065)      unsigned char m;  
(0066)     for(m=0;m<8;m++)  
    000AD 2744      CLR	R20
    000AE C010      RJMP	0x00BF
(0067)     {  
(0068)        CLR_OP_1WIRE;  
    000AF 9897      CBI	0x12,7
(0069)        if(x&(1<<m))    //写数据了,先写低位的! 
    000B0 E001      LDI	R16,1
    000B1 2F14      MOV	R17,R20
    000B2 940E 01A0 CALL	lsl8
    000B4 2C2A      MOV	R2,R10
    000B5 2220      AND	R2,R16
    000B6 F011      BEQ	0x00B9
(0070)        SET_OP_1WIRE;  
    000B7 9A97      SBI	0x12,7
    000B8 C001      RJMP	0x00BA
(0071)        else  
(0072)        {CLR_OP_1WIRE;}  
    000B9 9897      CBI	0x12,7
(0073)        delay_nus(40);   //15~60us  
    000BA E208      LDI	R16,0x28
    000BB E010      LDI	R17,0
    000BC DFB5      RCALL	_delay_nus
(0074)        SET_OP_1WIRE;  
    000BD 9A97      SBI	0x12,7
    000BE 9543      INC	R20
    000BF 3048      CPI	R20,0x8
    000C0 F370      BCS	0x00AF
(0075)     }  
(0076)      SET_OP_1WIRE;  
    000C1 9A97      SBI	0x12,7
    000C2 9149      LD	R20,Y+
    000C3 90A9      LD	R10,Y+
    000C4 9508      RET
_read_1820:
  temp                 --> R10
  k                    --> R22
  n                    --> R20
    000C5 940E 0180 CALL	push_xgsetF00C
(0077) }  
(0078) unsigned char read_1820()  
(0079) {      
(0080)     unsigned char temp,k,n;  
(0081)     temp=0;  
    000C7 24AA      CLR	R10
(0082)     for(n=0;n<8;n++)  
    000C8 2744      CLR	R20
    000C9 C018      RJMP	0x00E2
(0083)        {  
(0084)       CLR_OP_1WIRE;  
    000CA 9897      CBI	0x12,7
(0085)       SET_OP_1WIRE;  
    000CB 9A97      SBI	0x12,7
(0086)       CLR_DIR_1WIRE;  
    000CC 988F      CBI	0x11,7
(0087)       k=(CHECK_IP_1WIRE);    //读数据,从低位开始  
    000CD B360      IN	R22,0x10
    000CE 7860      ANDI	R22,0x80
(0088)       if(k)  
    000CF F031      BEQ	0x00D6
(0089)       temp|=(1<<n);  
    000D0 E001      LDI	R16,1

⌨️ 快捷键说明

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