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

📄 18b20.lis

📁 AVR mega16系列单片机开发程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module _18b20.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\USING07-07\18B20未完成\18B20\18b20.c
 0000                   .dbfunc e init_1820 _init_1820 fV
                        .even
 0000           _init_1820::
 0000                   .dbline -1
 0000                   .dbline 11
 0000           ; /**************************************
 0000           ; ** Filename: 18b20.c
 0000           ; ** Describe: 18b20 温度传感器
 0000           ; ** Time  :   2007-2-15
 0000           ; **************************************/
 0000           ; 
 0000           ; #include "config.h"
 0000           ; 
 0000           ; unsigned char wmh,wml,flag; //flag温度为负标志,count为实际温度
 0000           ; void init_1820(void)  
 0000           ; {  
 0000                   .dbline 12
 0000           ;     SET_DIR_1WIRE;      //设置PC4为输出 
 0000                   .dbline 13
 0000           ;     SET_OP_1WIRE;        
 0000                   .dbline 14
 0000           ;     delay_us(480);    //480us以上  
 0000 00EE              ldi R16,480
 0002 11E0              ldi R17,1
 0004 0E940000          xcall _delay_us
 0008                   .dbline 15
 0008           ;     CLR_OP_1WIRE;
 0008                   .dbline 16
 0008           ;     SET_OP_1WIRE;  
 0008                   .dbline 17
 0008           ;     CLR_DIR_1WIRE;  
 0008                   .dbline 18
 0008           ;     delay_us(20);     //15~60us  
 0008 04E1              ldi R16,20
 000A 10E0              ldi R17,0
 000C 0E940000          xcall _delay_us
 0010           L2:
 0010                   .dbline 19
 0010           L3:
 0010                   .dbline 19
 0010           ;     while(CHECK_IP_1WIRE);  
 0010 B499              sbic 0x16,4
 0012 FECF              rjmp L2
 0014                   .dbline 20
 0014           ;     SET_DIR_1WIRE;  
 0014                   .dbline 21
 0014           ;     SET_OP_1WIRE;  
 0014                   .dbline 22
 0014           ;     delay_us(140);   //60~240us  
 0014 0CE8              ldi R16,140
 0016 10E0              ldi R17,0
 0018 0E940000          xcall _delay_us
 001C                   .dbline -2
 001C           L1:
 001C                   .dbline 0 ; func end
 001C 0895              ret
 001E                   .dbend
 001E                   .dbfunc e write_1820 _write_1820 fV
 001E           ;              m -> R20
 001E           ;              x -> R22
                        .even
 001E           _write_1820::
 001E 0E940000          xcall push_gset2
 0022 602F              mov R22,R16
 0024                   .dbline -1
 0024                   .dbline 25
 0024           ; }  
 0024           ; void write_1820(unsigned char x)  
 0024           ; {     
 0024                   .dbline 27
 0024           ;      unsigned char m;  
 0024           ;     for(m=0;m<8;m++)  
 0024 4427              clr R20
 0026 0CC0              xjmp L9
 0028           L6:
 0028                   .dbline 28
 0028           ;     {  
 0028                   .dbline 29
 0028           ;        CLR_OP_1WIRE;  
 0028                   .dbline 30
 0028           ;        if(x&(1<<m))    //写数据了,先写低位的 
 0028 01E0              ldi R16,1
 002A 142F              mov R17,R20
 002C 0E940000          xcall lsl8
 0030 262E              mov R2,R22
 0032 2022              and R2,R16
 0034 01F0              breq L10
 0036                   .dbline 31
 0036           ;        SET_OP_1WIRE;  
 0036           L10:
 0036                   .dbline 33
 0036           ;        else  
 0036           ;        {CLR_OP_1WIRE;}  
 0036                   .dbline 33
 0036                   .dbline 33
 0036           L11:
 0036                   .dbline 34
 0036 08E2              ldi R16,40
 0038 10E0              ldi R17,0
 003A 0E940000          xcall _delay_us
 003E                   .dbline 35
 003E                   .dbline 36
 003E           L7:
 003E                   .dbline 27
 003E 4395              inc R20
 0040           L9:
 0040                   .dbline 27
 0040 4830              cpi R20,8
 0042 90F3              brlo L6
 0044                   .dbline 37
 0044           ;        delay_us(40);   //15~60us  
 0044           ;        SET_OP_1WIRE;  
 0044           ;     }  
 0044           ;      SET_OP_1WIRE;  
 0044                   .dbline -2
 0044           L5:
 0044 0E940000          xcall pop_gset2
 0048                   .dbline 0 ; func end
 0048 0895              ret
 004A                   .dbsym r m 20 c
 004A                   .dbsym r x 22 c
 004A                   .dbend
 004A                   .dbfunc e read_1820 _read_1820 fc
 004A           ;           temp -> R20
 004A           ;              k -> R22
 004A           ;              n -> R10
                        .even
 004A           _read_1820::
 004A 0E940000          xcall push_gset3
 004E                   .dbline -1
 004E                   .dbline 40
 004E           ; }  
 004E           ; unsigned char read_1820(void)  
 004E           ; {      
 004E                   .dbline 42
 004E           ;     unsigned char temp,k,n;  
 004E           ;     temp=0;  
 004E 4427              clr R20
 0050                   .dbline 43
 0050           ;     for(n=0;n<8;n++)  
 0050 AA24              clr R10
 0052 15C0              xjmp L16
 0054           L13:
 0054                   .dbline 44
 0054           ;     {
 0054                   .dbline 45
 0054           ;       CLR_OP_1WIRE;  
 0054                   .dbline 46
 0054           ;       SET_OP_1WIRE;  
 0054                   .dbline 47
 0054           ;       CLR_DIR_1WIRE;  
 0054                   .dbline 48
 0054           ;       k=(CHECK_IP_1WIRE);    //读数据,从低位开始  
 0054 66B3              in R22,0x16
 0056 6071              andi R22,16
 0058                   .dbline 49
 0058           ;       if(k)  
 0058 31F0              breq L17
 005A                   .dbline 50
 005A           ;       temp|=(1<<n);  
 005A 01E0              ldi R16,1
 005C 1A2D              mov R17,R10
 005E 0E940000          xcall lsl8
 0062 402B              or R20,R16
 0064 07C0              xjmp L18
 0066           L17:
 0066                   .dbline 52
 0066           ;       else  
 0066           ;       temp&=~(1<<n);  
 0066 01E0              ldi R16,1
 0068 1A2D              mov R17,R10
 006A 0E940000          xcall lsl8
 006E 202E              mov R2,R16
 0070 2094              com R2
 0072 4221              and R20,R2
 0074           L18:
 0074                   .dbline 53
 0074 02E3              ldi R16,50
 0076 10E0              ldi R17,0
 0078 0E940000          xcall _delay_us
 007C                   .dbline 54
 007C                   .dbline 55
 007C           L14:
 007C                   .dbline 43
 007C A394              inc R10
 007E           L16:
 007E                   .dbline 43
 007E 8A2D              mov R24,R10
 0080 8830              cpi R24,8
 0082 40F3              brlo L13
 0084                   .dbline 56
 0084           ;       delay_us(50); //60~120us      
 0084           ;       SET_DIR_1WIRE;  
 0084           ;     }  
 0084           ;    return (temp);  
 0084 042F              mov R16,R20
 0086                   .dbline -2
 0086           L12:
 0086 0E940000          xcall pop_gset3
 008A                   .dbline 0 ; func end
 008A 0895              ret
 008C                   .dbsym r temp 20 c
 008C                   .dbsym r k 22 c
 008C                   .dbsym r n 10 c
 008C                   .dbend
 008C                   .dbfunc e gettemp _gettemp fc
 008C           ;            wm3 -> R14
 008C           ;            wm1 -> R20
 008C           ;            wm0 -> R22
 008C           ;           teml -> R12
 008C           ;          count -> R10
 008C           ;           temh -> R14
 008C           ;            wm2 -> R12
                        .even
 008C           _gettemp::
 008C 0E940000          xcall push_gset5
 0090 2497              sbiw R28,4
 0092                   .dbline -1
 0092                   .dbline 60
 0092           ; }   
 0092           ; 
 0092           ; unsigned char gettemp()         //读取温度值 
 0092           ; {    
 0092                   .dbline 63
 0092           ;     unsigned char count;
 0092           ;      unsigned char temh,teml,wm0,wm1,wm2,wm3;  
 0092           ;      init_1820();        //复位18b20  
 0092 B6DF              xcall _init_1820
 0094                   .dbline 64
 0094           ;      write_1820(0xcc);   // 发出转换命令  
 0094 0CEC              ldi R16,204
 0096 C3DF              xcall _write_1820
 0098                   .dbline 65
 0098           ;      write_1820(0xbe); 
 0098 0EEB              ldi R16,190
 009A C1DF              xcall _write_1820
 009C                   .dbline 67
 009C           ;    //  delay_nms(800);     //不延时也好使,不知道怎么回事! 
 009C           ;      teml=read_1820();  //读数据  
 009C D6DF              xcall _read_1820
 009E C02E              mov R12,R16
 00A0                   .dbline 68
 00A0           ;      temh=read_1820();  
 00A0 D4DF              xcall _read_1820
 00A2 E02E              mov R14,R16
 00A4                   .dbline 69
 00A4           ;      init_1820();  
 00A4 ADDF              xcall _init_1820
 00A6                   .dbline 70
 00A6           ;      write_1820(0xcc);  //发出读命令  
 00A6 0CEC              ldi R16,204
 00A8 BADF              xcall _write_1820
 00AA                   .dbline 71
 00AA           ;      write_1820(0x44);
 00AA 04E4              ldi R16,68
 00AC B8DF              xcall _write_1820
 00AE                   .dbline 74
 00AE           ;    

⌨️ 快捷键说明

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