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

📄 1820.lis

📁 基于ATMEGA16的温度传感器原代码
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module _1820.c
                        .area text(rom, con, rel)
 0000                   .dbfile H:\bbi项目源程序\18b20温度传感器\LCD显示18B20/delay.h
 0000                   .dbfunc e delay_nus _delay_nus fV
 0000           ;           time -> R16,R17
                        .even
 0000           _delay_nus::
 0000                   .dbline -1
 0000                   .dbline 33
 0000           ; /////////////////////////////////////////////////////////////
 0000           ; //  文件:DS18B20.C                                        //
 0000           ; //  环境:编译为ICC AVR6.31A,仿真为AVR Studio4.12sp4      //
 0000           ; //  硬件:ATMEGA16芯片                                     //
 0000           ; //  日期:2007年5月28日                                    //
 0000           ; //  功能:读取18B20温度,在数码管显示                      //
 0000           ; //  备注:                                                 //
 0000           ; /////////////////////////////////////////////////////////////
 0000           ; #include <iom16v.h>                           //包含单片机型号头文件
 0000           ; #include <macros.h>                           //包含"位"操作头文件
 0000           ; #include "delay.h"                            //包含延时头文件
 0000           ; #include "AVR_XQV12.h"                        //包含通用函数及宏定义头文件
 0000           ; #include "lcd.h"
 0000           ; /*******************************************************/
 0000           ; /******   函数名称: init_1820()                   ******/
 0000           ; /******   功    能: 复位18B20                     ******/
 0000           ; /******   参    数: 无                            ******/
 0000           ; /******   返回值  : 无                            ******/
 0000           ; /*******************************************************/
 0000           ; void init_1820(void) 
 0000           ; {
 0000           ;       ddrt|=D0;                                                       //设置端口输出
 0000           ;       port|=D0;                                                       //输出一个脉冲
 0000           ;       port&=~D0;
 0000           ;       delay_nus(500);                                 //延时480us以上
 0000           ;       port|=D0;                                                       //输出一个脉冲
 0000           ;       ddrt&=~D0;
 0000           ;       delay_nus(30);                                          //15~60us
 0000           ;       while(pin&D0);                                          //等待应答
 0000           ;     ddrt|=D0;                                                         //设置输出
 0000           ;     port|=D0;                                                         //输出高电平
 0000           ;     delay_nus(80);                                            //60~240us 
 0000           ; }
 0000 09C0              xjmp L3
 0002           L2:
 0002                   .dbline 35
 0002                   .dbline 36
 0002 0000              nop
 0004                   .dbline 36
 0004 0000              nop
 0006                   .dbline 36
 0006 0000              nop
 0008                   .dbline 36
 0008 0000              nop
 000A                   .dbline 36
 000A 0000              nop
 000C                   .dbline 36
 000C 0000              nop
 000E                   .dbline 36
 000E 0000              nop
 0010                   .dbline 37
 0010 0150              subi R16,1
 0012 1040              sbci R17,0
 0014                   .dbline 38
 0014           L3:
 0014                   .dbline 34
 0014           ; /*******************************************************/
 0014 0030              cpi R16,0
 0016 0107              cpc R16,R17
 0018 A1F7              brne L2
 001A           X0:
 001A                   .dbline -2
 001A           L1:
 001A                   .dbline 0 ; func end
 001A 0895              ret
 001C                   .dbsym r time 16 i
 001C                   .dbend
 001C                   .dbfunc e delay_nms _delay_nms fV
 001C           ;              i -> R20,R21
 001C           ;           time -> R16,R17
                        .even
 001C           _delay_nms::
 001C 0E940000          xcall push_gset1
 0020                   .dbline -1
 0020                   .dbline 41
 0020           ; /******   函数名称: write_1820()                  ******/
 0020           ; /******   功    能: 写18B20                       ******/
 0020           ; /******   参    数: x--要写的数据                 ******/
 0020           ; /******   返回值  : 无                            ******/
 0020           ; /*******************************************************/
 0020           ; void write_1820(unsigned char x) 
 0020           ; {
 0020 0BC0              xjmp L7
 0022           L6:
 0022                   .dbline 44
 0022           ;       unsigned char m;
 0022           ;       for(m=0;m<8;m++) 
 0022           ;     {
 0022                   .dbline 45
 0022 4427              clr R20
 0024 5527              clr R21
 0026 02C0              xjmp L12
 0028           L9:
 0028                   .dbline 45
 0028           L10:
 0028                   .dbline 45
 0028 4F5F              subi R20,255  ; offset = 1
 002A 5F4F              sbci R21,255
 002C           L12:
 002C                   .dbline 45
 002C 4C32              cpi R20,44
 002E E6E0              ldi R30,6
 0030 5E07              cpc R21,R30
 0032 D0F3              brlo L9
 0034                   .dbline 46
 0034 0150              subi R16,1
 0036 1040              sbci R17,0
 0038                   .dbline 47
 0038           L7:
 0038                   .dbline 43
 0038 0030              cpi R16,0
 003A 0107              cpc R16,R17
 003C 91F7              brne L6
 003E           X1:
 003E                   .dbline -2
 003E           L5:
 003E 0E940000          xcall pop_gset1
 0042                   .dbline 0 ; func end
 0042 0895              ret
 0044                   .dbsym r i 20 i
 0044                   .dbsym r time 16 i
 0044                   .dbend
                        .area code(ram, con, rel)
 0000                   .dbfile H:\bbi项目源程序\18b20温度传感器\LCD显示18B20/delay.h
                        .area lit(rom, con, rel)
 0000           _SMG_Conver::
 0000 3F06              .byte 63,6
 0002 5B4F              .byte 91,'O
 0004 666D              .byte 'f,'m
 0006 7D07              .byte 125,7
 0008 7F6F              .byte 127,'o
 000A 777C              .byte 'w,124
 000C 395E              .byte 57,94
 000E 7971              .byte 'y,'q
 0010 0040              .byte 0,64
 0012                   .dbfile H:\bbi项目源程序\18b20温度传感器\LCD显示18B20/AVR_XQV12.h
 0012                   .dbsym e SMG_Conver _SMG_Conver A[18:18]kc
                        .area data(ram, con, rel)
 0000                   .dbfile H:\bbi项目源程序\18b20温度传感器\LCD显示18B20/AVR_XQV12.h
                        .area text(rom, con, rel)
 0044                   .dbfile H:\bbi项目源程序\18b20温度传感器\LCD显示18B20/AVR_XQV12.h
 0044                   .dbfunc e Scan_Key _Scan_Key fc
 0044           ;              i -> R20
                        .even
 0044           _Scan_Key::
 0044 0E940000          xcall push_gset1
 0048                   .dbline -1
 0048                   .dbline 69
 0048           ;               port&=~D0;                                              //写数据,从低位开始
 0048           ;               if(x&(1<<m))                                    //判断数据极性
 0048           ;               port|=D0;
 0048           ;               else
 0048           ;               port&=~D0;
 0048           ;               delay_nus(30);                                   //延时15~60us
 0048           ;               port|=D0;                                                
 0048           ;     } 
 0048           ;     port|=D0;                                                          //结束写数据,置高总线
 0048           ; } 
 0048           ; /*******************************************************/
 0048           ; /******   函数名称: read_1820()                   ******/
 0048           ; /******   功    能: 读18B20                       ******/
 0048           ; /******   参    数: 无                            ******/
 0048           ; /******   返回值  : 读取的数据                    ******/
 0048           ; /*******************************************************/
 0048           ; unsigned char read_1820(void) 
 0048           ; {     
 0048           ;     unsigned char temp=0,k,n; 
 0048           ;     for(n=0;n<8;n++) 
 0048           ;     { 
 0048           ;               port&=~D0;                                              //输出一个起始脉冲
 0048           ;       port|=D0;
 0048           ;               ddrt&=~D0;                                              //设端口为输入
 0048           ;               k=(pin&D0);                                     //读数据,从低位开始 
 0048                   .dbline 71
 0048           ;               if(k)                                                   //判断数据极性
 0048           ;               temp|=(1<<n);
 0048 2224              clr R2
 004A 25BA              out 0x15,R2
 004C                   .dbline 72
 004C           ;               else
 004C 80EF              ldi R24,240
 004E 84BB              out 0x14,R24
 0050                   .dbline 73
 0050           ;               temp&=~(1<<n);
 0050 8FE0              ldi R24,15
 0052 85BB              out 0x15,R24
 0054                   .dbline 74
 0054           ;               delay_nus(50);                                   //延时60~120us
 0054 01E0              ldi R16,1
 0056 10E0              ldi R17,0
 0058 D3DF              xcall _delay_nus
 005A                   .dbline 75
 005A           ;               ddrt|=D0;                                                //设端口为输出
 005A 43B3              in R20,0x13
 005C 4F70              andi R20,15
 005E                   .dbline 76
 005E           ;       }
 005E 4F30              cpi R20,15
 0060 B1F0              breq L14
 0062                   .dbline 77
 0062           ;       return (temp);                                           //返回读出的数据
 0062                   .dbline 78
 0062           ; }
 0062 2224              clr R2
 0064 25BA              out 0x15,R2
 0066                   .dbline 79
 0066           ; /*******************************************************/
 0066 8FE0              ldi R24,15
 0068 84BB              out 0x14,R24
 006A                   .dbline 80
 006A           ; /******   函数名称: Read_1820_temprter()          ******/
 006A 80EF              ldi R24,240
 006C 85BB              out 0x15,R24
 006E                   .dbline 81
 006E           ; /******   功    能: 读取18B20温度                 ******/
 006E 0AE0              ldi R16,10
 0070 10E0              ldi R17,0
 0072 C6DF              xcall _delay_nus
 0074                   .dbline 82
 0074           ; /******   参    数: 无                            ******/
 0074 83B3              in R24,0x13
 0076 807F              andi R24,240
 0078 803F              cpi R24,240
 007A 49F0              breq L16
 007C                   .dbline 83
 007C           ; /******   返回值  : 读取的温度数据                ******/
 007C                   .dbline 84
 007C           ; /*******************************************************/
 007C 83B3              in R24,0x13
 007E 807F              andi R24,240
 0080 480F              add R20,R24
 0082           L18:
 0082                   .dbline 85
 0082           L19:
 0082                   .dbline 85
 0082           ; unsigned int Read_1820_temprter(void)
 0082 83B3              in R24,0x13
 0084 807F              andi R24,240
 0086 803F              cpi R24,240
 0088 E1F7              brne L18
 008A                   .dbline 86
 008A           ; {
 008A 042F              mov R16,R20
 008C 01C0              xjmp L13
 008E           L16:
 008E                   .dbline 88
 008E           ;       unsigned int count;
 008E           ;       unsigned char temh,teml; 
 008E           L14:
 008E                   .dbline 89
 008E           ;       init_1820();                             //复位18b20
 008E 0027              clr R16
 0090                   .dbline -2
 0090           L13:
 0090 0E940000          xcall pop_gset1
 0094                   .dbline 0 ; func end
 0094 0895              ret
 0096                   .dbsym r i 20 c
 0096                   .dbend
 0096                   .dbfunc e Key_Num _Key_Num fc
 0096           ;            key -> R16
                        .even
 0096           _Key_Num::
 0096 0E940000          xcall push_gset1
 009A                   .dbline -1
 009A                   .dbline 99
 009A           ;       write_1820(0xcc);                        //发出转换命令
 009A           ;       write_1820(0x44);
 009A           ;       delay_nus(400);
 009A           ;       init_1820();
 009A           ;       write_1820(0xcc);                                //发出读命令
 009A           ;       write_1820(0xbe);
 009A           ;       teml=read_1820();                                //读数据
 009A           ;       temh=read_1820();
 009A           ;       count=(temh*256+teml)*6.25;      //计算具体温度
 009A           ;       return count;                                    //返回温度数据
 009A                   .dbline 100
 009A           ; }
 009A 402F              mov R20,R16
 009C 5527              clr R21
 009E 473B              cpi R20,183
 00A0 E0E0              ldi R30,0
 00A2 5E07              cpc R21,R30
 00A4 09F4              brne X3
 00A6 54C0              xjmp L27
 00A8           X3:
 00A8 4B3B              cpi R20,187
 00AA E0E0              ldi R30,0
 00AC 5E07              cpc R21,R30
 00AE 09F4              brne X4
 00B0 57C0              xjmp L31
 00B2           X4:
 00B2 4D3B              cpi R20,189
 00B4 E0E0              ldi R30,0
 00B6 5E07              cpc R21,R30
 00B8 09F4              brne X5
 00BA 5AC0              xjmp L35
 00BC           X5:
 00BC 4E3B              cpi R20,190
 00BE E0E0              ldi R30,0
 00C0 5E07              cpc R21,R30
 00C2 09F4              brne X6
 00C4 5DC0              xjmp L39
 00C6           X6:
 00C6 8EEB              ldi R24,190
 00C8 90E0              ldi R25,0
 00CA 8417              cp R24,R20
 00CC 9507              cpc R25,R21
 00CE ACF0              brlt L42
 00D0           L41:
 00D0 4737              cpi R20,119
 00D2 E0E0              ldi R30,0
 00D4 5E07              cpc R21,R30
 00D6 09F4              brne X7
 00D8 3DC0              xjmp L28
 00DA           X7:
 00DA 4B37              cpi R20,123
 00DC E0E0              ldi R30,0
 00DE 5E07              cpc R21,R30
 00E0 09F4              brne X8
 00E2 40C0              xjmp L32
 00E4           X8:
 00E4 4D37              cpi R20,125
 00E6 E0E0              ldi R30,0
 00E8 5E07              cpc R21,R30
 00EA 09F4              brne X9
 00EC 43C0              xjmp L36
 00EE           X9:
 00EE 4E37              cpi R20,126
 00F0 E0E0              ldi R30,0
 00F2 5E07              cpc R21,R30
 00F4 09F4              brne X10

⌨️ 快捷键说明

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