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

📄 dsi8b20.lis

📁 AVR ds18b20 源代码 对学习温度控制的人很有帮助
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module dsi8b20.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\开发板\source\ds18b20\dsi8b20.c
 0000                   .dbfunc e reset_ov _reset_ov fc
 0000           ;              c -> R20
                        .even
 0000           _reset_ov::
 0000 00D0              rcall push_gset1
 0002                   .dbline -1
 0002                   .dbline 24
 0002           ; /******************************************/
 0002           ; /*             北京MCU学习之家            */
 0002           ; /*             ADC通信演示程序            */
 0002           ; /*             作者:白如冰                */
 0002           ; /*             2005年10月1日              */
 0002           ; /*  目标MCU:MEGA8   晶振:外部(EXT) 8MHZ   */
 0002           ; /******************************************/
 0002           ; //  1、使用WIN9X/WIN2000/XP的超级终端,进行通信调试。
 0002           ; //  2、通信波特率为9600(8位数据,无校验,1位停止位,无数据流控制)。
 0002           ; #include <iom8v.h>
 0002           ; #include <macros.h>
 0002           ; extern void delay_us(unsigned int n);
 0002           ; extern void delay_ms(unsigned int n);
 0002           ; extern void uart_init(void);
 0002           ; extern void putchar(unsigned char c);
 0002           ; extern void puts(char *s);
 0002           ; extern void puts_hh(char *s);
 0002           ; 
 0002           ; #define ds1820_data_s PORTD|=BIT(PORTD6)
 0002           ; #define ds1820_data_c PORTD&=~BIT(PORTD6)
 0002           ;                                                       
 0002           ; 
 0002           ; unsigned char reset_ov(void)      //18b20 复位函数
 0002           ; { 
 0002                   .dbline 25
 0002           ;  char c=0; 
 0002 4427              clr R20
 0004                   .dbline 26
 0004           ;  ds1820_data_s;
 0004 969A              sbi 0x12,6
 0006                   .dbline 27
 0006           ;  delay_us(1);//6
 0006 01E0              ldi R16,1
 0008 10E0              ldi R17,0
 000A 00D0              rcall _delay_us
 000C                   .dbline 28
 000C           ;  ds1820_data_c;
 000C 9698              cbi 0x12,6
 000E                   .dbline 29
 000E           ;  delay_us(660);//500
 000E 04E9              ldi R16,660
 0010 12E0              ldi R17,2
 0012 00D0              rcall _delay_us
 0014                   .dbline 30
 0014           ;  ds1820_data_s;
 0014 969A              sbi 0x12,6
 0016                   .dbline 31
 0016           ;  delay_us(73);//60us
 0016 09E4              ldi R16,73
 0018 10E0              ldi R17,0
 001A 00D0              rcall _delay_us
 001C                   .dbline 32
 001C           ;  c=(PIND&=0x40);//dq_in;
 001C 80B3              in R24,0x10
 001E 8074              andi R24,64
 0020 80BB              out 0x10,R24
 0022 482F              mov R20,R24
 0024                   .dbline 33
 0024           ;  if(c==0x40)
 0024 8034              cpi R24,64
 0026 11F4              brne L2
 0028                   .dbline 34
 0028           ;  return (0);
 0028 0027              clr R16
 002A 04C0              rjmp L1
 002C           L2:
 002C                   .dbline 36
 002C           ;  else 
 002C           ;  {
 002C                   .dbline 37
 002C           ;  delay_us(326);//250
 002C 06E4              ldi R16,326
 002E 11E0              ldi R17,1
 0030 00D0              rcall _delay_us
 0032                   .dbline 38
 0032           ;   return (1);
 0032 01E0              ldi R16,1
 0034                   .dbline -2
 0034           L1:
 0034 00D0              rcall pop_gset1
 0036                   .dbline 0 ; func end
 0036 0895              ret
 0038                   .dbsym r c 20 c
 0038                   .dbend
 0038                   .dbfunc e write_data _write_data fV
 0038           ;           temp -> R20
 0038           ;              i -> R22
 0038           ;           data -> R10
                        .even
 0038           _write_data::
 0038 00D0              rcall push_gset3
 003A A02E              mov R10,R16
 003C                   .dbline -1
 003C                   .dbline 43
 003C           ;  }  
 003C           ; }  
 003C           ; 
 003C           ; void write_data(unsigned char data)    //DS18B20写函数
 003C           ; {
 003C                   .dbline 45
 003C           ;     unsigned char i,temp;
 003C           ;     temp=data;
 003C 4A2D              mov R20,R10
 003E                   .dbline 47
 003E           ;    
 003E           ;     for (i=0; i<8; i++) 
 003E 6627              clr R22
 0040 16C0              rjmp L8
 0042           L5:
 0042                   .dbline 48
 0042           ;     {
 0042                   .dbline 49
 0042           ;       if((temp&0x01)&&0x01)
 0042 40FF              sbrs R20,0
 0044 09C0              rjmp L9
 0046                   .dbline 50
 0046           ;       {
 0046                   .dbline 51
 0046           ;         ds1820_data_c;
 0046 9698              cbi 0x12,6
 0048                   .dbline 52
 0048           ;       delay_us(6);//10
 0048 06E0              ldi R16,6
 004A 10E0              ldi R17,0
 004C 00D0              rcall _delay_us
 004E                   .dbline 53
 004E           ;       ds1820_data_s;
 004E 969A              sbi 0x12,6
 0050                   .dbline 54
 0050           ;       delay_us(73);//60
 0050 09E4              ldi R16,73
 0052 10E0              ldi R17,0
 0054 00D0              rcall _delay_us
 0056                   .dbline 55
 0056           ;       }
 0056 08C0              rjmp L10
 0058           L9:
 0058                   .dbline 57
 0058           ;       else
 0058           ;       {
 0058                   .dbline 58
 0058           ;          ds1820_data_c;
 0058 9698              cbi 0x12,6
 005A                   .dbline 59
 005A           ;        delay_us(80);//70
 005A 00E5              ldi R16,80
 005C 10E0              ldi R17,0
 005E 00D0              rcall _delay_us
 0060                   .dbline 60
 0060           ;        ds1820_data_s;
 0060 969A              sbi 0x12,6
 0062                   .dbline 61
 0062           ;        delay_us(1);//6
 0062 01E0              ldi R16,1
 0064 10E0              ldi R17,0
 0066 00D0              rcall _delay_us
 0068                   .dbline 62
 0068           ;       }
 0068           L10:
 0068                   .dbline 63
 0068 A694              lsr R10
 006A                   .dbline 64
 006A 4A2D              mov R20,R10
 006C                   .dbline 65
 006C           L6:
 006C                   .dbline 47
 006C 6395              inc R22
 006E           L8:
 006E                   .dbline 47
 006E 6830              cpi R22,8
 0070 40F3              brlo L5
 0072                   .dbline -2
 0072           L4:
 0072 00D0              rcall pop_gset3
 0074                   .dbline 0 ; func end
 0074 0895              ret
 0076                   .dbsym r temp 20 c
 0076                   .dbsym r i 22 c
 0076                   .dbsym r data 10 c
 0076                   .dbend
 0076                   .dbfunc e read_data _read_data fc
 0076           ;          value -> R20
 0076           ;              i -> R22
                        .even
 0076           _read_data::
 0076 00D0              rcall push_gset2
 0078                   .dbline -1
 0078                   .dbline 70
 0078           ;       data>>=1;   
 0078           ;       temp=data;
 0078           ;     }
 0078           ;       
 0078           ; }
 0078           ; 
 0078           ; unsigned char read_data(void)   //DS18B20     读函数
 0078           ; {
 0078                   .dbline 73
 0078           ; unsigned char i;
 0078           ; 
 0078           ; char value = 0;
 0078 4427              clr R20
 007A                   .dbline 74
 007A           ; for (i=0;i<8;i++)
 007A 6627              clr R22
 007C 13C0              rjmp L15
 007E           L12:
 007E                   .dbline 75
 007E           ; {
 007E                   .dbline 76
 007E           ; value>>=1;
 007E 4695              lsr R20
 0080                   .dbline 77
 0080           ; ds1820_data_c;
 0080 9698              cbi 0x12,6
 0082                   .dbline 78
 0082           ; delay_us(1);//6
 0082 01E0              ldi R16,1
 0084 10E0              ldi R17,0
 0086 00D0              rcall _delay_us
 0088                   .dbline 79
 0088           ; ds1820_data_s;
 0088 969A              sbi 0x12,6
 008A                   .dbline 80
 008A           ; delay_us(1); //6
 008A 01E0              ldi R16,1
 008C 10E0              ldi R17,0
 008E 00D0              rcall _delay_us
 0090                   .dbline 83
 0090           ; 
 0090           ; 
 0090           ; if((PIND&=0x40)==0x40)
 0090 80B3              in R24,0x10
 0092 8074              andi R24,64
 0094 80BB              out 0x10,R24
 0096 8034              cpi R24,64
 0098 09F4              brne L16
 009A                   .dbline 84
 009A           ; value|=0x80;
 009A 4068              ori R20,128
 009C           L16:
 009C                   .dbline 85
 009C 09E4              ldi R16,73
 009E 10E0              ldi R17,0
 00A0 00D0              rcall _delay_us
 00A2                   .dbline 86
 00A2           L13:
 00A2                   .dbline 74
 00A2 6395              inc R22
 00A4           L15:
 00A4                   .dbline 74
 00A4 6830              cpi R22,8
 00A6 58F3              brlo L12
 00A8                   .dbline 89
 00A8           ; delay_us(73);//60 
 00A8           ; }
 00A8           ; 
 00A8           ; 
 00A8           ; return(value);
 00A8 042F              mov R16,R20
 00AA                   .dbline -2
 00AA           L11:
 00AA 00D0              rcall pop_gset2
 00AC                   .dbline 0 ; func end
 00AC 0895              ret
 00AE                   .dbsym r value 20 c
 00AE                   .dbsym r i 22 c
 00AE                   .dbend
 00AE                   .dbfunc e init_ds1820 _init_ds1820 fV
 00AE           ;              i -> R20
                        .even
 00AE           _init_ds1820::
 00AE 00D0              rcall push_gset1
 00B0                   .dbline -1
 00B0                   .dbline 93
 00B0           ; }
 00B0           ; 
 00B0           ; void init_ds1820(void)
 00B0           ; {
 00B0                   .dbline 95
 00B0           ;    unsigned char i;
 00B0           ;    for(i=0;i<40;i++)
 00B0 4427              clr R20
 00B2 05C0              rjmp L22
 00B4           L19:
 00B4                   .dbline 96
 00B4           ;    {if(reset_ov())
 00B4                   .dbline 96
 00B4 A5DF              rcall _reset_ov
 00B6 0023              tst R16
 00B8 09F0              breq L23
 00BA                   .dbline 97
 00BA           ;     break;
 00BA 03C0              rjmp L21
 00BC           L23:
 00BC                   .dbline 98
 00BC           L20:
 00BC                   .dbline 95
 00BC 4395              inc R20
 00BE           L22:
 00BE                   .dbline 95
 00BE 4832              cpi R20,40
 00C0 C8F3              brlo L19
 00C2           L21:
 00C2                   .dbline 100
 00C2           ;    }
 00C2           ;   
 00C2           ;   write_data(0xcc);  //跳过ROM
 00C2 0CEC              ldi R16,204
 00C4 B9DF              rcall _write_data
 00C6                   .dbline 101
 00C6           ;   write_data(0x4e);  //写配置寄存器指令
 00C6 0EE4              ldi R16,78
 00C8 B7DF              rcall _write_data
 00CA                   .dbline 102
 00CA           ;   write_data(0x00);
 00CA 0027              clr R16
 00CC B5DF              rcall _write_data
 00CE                   .dbline 103
 00CE           ;   write_data(0x00);
 00CE 0027              clr R16
 00D0 B3DF              rcall _write_data
 00D2                   .dbline 104
 00D2           ;   write_data(0x7f);  //配置转换位数为12位,转换时间为750ms
 00D2 0FE7              ldi R16,127
 00D4 B1DF              rcall _write_data
 00D6                   .dbline 105
 00D6           ;    for(i=0;i<40;i++)
 00D6 4427              clr R20
 00D8 05C0              rjmp L28
 00DA           L25:
 00DA                   .dbline 106
 00DA           ;    {if(reset_ov())
 00DA                   .dbline 106
 00DA 92DF              rcall _reset_ov
 00DC 0023              tst R16
 00DE 09F0              breq L29
 00E0                   .dbline 107
 00E0           ;     break;
 00E0 03C0              rjmp L27
 00E2           L29:
 00E2                   .dbline 108
 00E2           L26:
 00E2                   .dbline 105
 00E2 4395              inc R20
 00E4           L28:
 00E4                   .dbline 105
 00E4 4832              cpi R20,40
 00E6 C8F3              brlo L25
 00E8           L27:
 00E8                   .dbline 109

⌨️ 快捷键说明

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