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

📄 18b20_test.lis

📁 18b20的器件使用
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 02C6           ;  unsigned char i;
 02C6           ;  for(i=0;i<8;i++)                     //位计数值
 02C6 4427              clr R20
 02C8 10C0              xjmp L87
 02CA           L84:
 02CA                   .dbline 70
 02CA           ;  {
 02CA                   .dbline 71
 02CA           ;   b20_ddr|=(1<<b20_io);                       //配置为输出
 02CA A79A              sbi 0x14,7
 02CC                   .dbline 72
 02CC           ;   b20_port&=~(1<<b20_io);                     //拉低,启动写数据位
 02CC AF98              cbi 0x15,7
 02CE                   .dbline 73
 02CE           ;   Sensor_Delay(1);                                    //等待1微秒
 02CE 01E0              ldi R16,1
 02D0 10E0              ldi R17,0
 02D2 B6DF              xcall _Sensor_Delay
 02D4                   .dbline 74
 02D4           ;   if(wrd&0x01)                                        //此位数据是否为高
 02D4 A0FE              sbrs R10,0
 02D6 02C0              rjmp L88
 02D8           X22:
 02D8                   .dbline 75
 02D8           ;   {
 02D8                   .dbline 76
 02D8           ;    b20_port|=(1<<b20_io);                     //是高则将单总线拉高
 02D8 AF9A              sbi 0x15,7
 02DA                   .dbline 77
 02DA           ;   }
 02DA 01C0              xjmp L89
 02DC           L88:
 02DC                   .dbline 79
 02DC           ;   else
 02DC           ;   {
 02DC                   .dbline 80
 02DC           ;    b20_port&=~(1<<b20_io);            //是低则将单总线拉低
 02DC AF98              cbi 0x15,7
 02DE                   .dbline 81
 02DE           ;   }
 02DE           L89:
 02DE                   .dbline 82
 02DE           ;   Sensor_Delay(50);                                   //等待50微秒
 02DE 02E3              ldi R16,50
 02E0 10E0              ldi R17,0
 02E2 AEDF              xcall _Sensor_Delay
 02E4                   .dbline 83
 02E4           ;   b20_port|=(1<<b20_io);                      //释放总线
 02E4 AF9A              sbi 0x15,7
 02E6                   .dbline 84
 02E6           ;   wrd>>=1;                                            //右移,为写入新的数据位做准备
 02E6 A694              lsr R10
 02E8                   .dbline 85
 02E8           ;  }
 02E8           L85:
 02E8                   .dbline 69
 02E8 4395              inc R20
 02EA           L87:
 02EA                   .dbline 69
 02EA 4830              cpi R20,8
 02EC 70F3              brlo L84
 02EE           X23:
 02EE                   .dbline 86
 02EE           ;  Sensor_Delay(50);                                    //等待50微秒
 02EE 02E3              ldi R16,50
 02F0 10E0              ldi R17,0
 02F2 A6DF              xcall _Sensor_Delay
 02F4                   .dbline -2
 02F4           L83:
 02F4                   .dbline 0 ; func end
 02F4 4991              ld R20,y+
 02F6 A990              ld R10,y+
 02F8 0895              ret
 02FA                   .dbsym r i 20 c
 02FA                   .dbsym r wrd 10 c
 02FA                   .dbend
 02FA                   .dbfunc e Read_temp _Read_temp fV
 02FA           ;          temph -> R10,R11
 02FA           ;          templ -> R12,R13
                        .even
 02FA           _Read_temp::
 02FA 0E940000          xcall push_xgset003C
 02FE 5901              movw R10,R18
 0300 6801              movw R12,R16
 0302                   .dbline -1
 0302                   .dbline 96
 0302           ; }
 0302           ; 
 0302           ; /*******************************************
 0302           ; 函数名称: Read_temp
 0302           ; 功    能: 读取温度值
 0302           ; 参    数: templ温度值低位,temph温度值高位
 0302           ; 返回值  : 无
 0302           ; ********************************************/
 0302           ; void Read_temp(unsigned char *templ,unsigned char *temph)
 0302           ; {
 0302                   .dbline 97
 0302           ;  B20_init();        //初始化,每次写命令都从初始化开始
 0302 B5DF              xcall _B20_init
 0304                   .dbline 98
 0304           ;  B20_writeB(0xcc);      //跳过ROM
 0304 0CEC              ldi R16,204
 0306 DCDF              xcall _B20_writeB
 0308                   .dbline 99
 0308           ;  B20_writeB(0x44);      //启动温度转换
 0308 04E4              ldi R16,68
 030A DADF              xcall _B20_writeB
 030C                   .dbline 100
 030C           ;  B20_init();            //初始化,每次写命令都从初始化开始
 030C B0DF              xcall _B20_init
 030E                   .dbline 101
 030E           ;  B20_writeB(0xcc);      //跳过ROM
 030E 0CEC              ldi R16,204
 0310 D7DF              xcall _B20_writeB
 0312                   .dbline 102
 0312           ;  B20_writeB(0xbe);      //读寄存器
 0312 0EEB              ldi R16,190
 0314 D5DF              xcall _B20_writeB
 0316                   .dbline 103
 0316           ;  *templ=B20_readB();    //读温度低字节
 0316 BADF              xcall _B20_readB
 0318 F601              movw R30,R12
 031A 0083              std z+0,R16
 031C                   .dbline 104
 031C           ;  *temph=B20_readB();    //读温度高字节
 031C B7DF              xcall _B20_readB
 031E F501              movw R30,R10
 0320 0083              std z+0,R16
 0322                   .dbline -2
 0322           L90:
 0322                   .dbline 0 ; func end
 0322 0C940000          xjmp pop_xgset003C
 0326                   .dbsym r temph 10 pc
 0326                   .dbsym r templ 12 pc
 0326                   .dbend
 0326                   .dbfunc e b20_display _b20_display fV
 0326           ;       fraction -> R10,R11
 0326           ;          inter -> R12
 0326           ;          b20_l -> y+1
 0326           ;          b20_h -> y+0
 0326           ;             lz -> R20
                        .even
 0326           _b20_display::
 0326 0E940000          xcall push_xgset303C
 032A 402F              mov R20,R16
 032C 2297              sbiw R28,2
 032E                   .dbline -1
 032E                   .dbline 113
 032E           ; }
 032E           ; /*******************************************
 032E           ; 函数名称: b20_display
 032E           ; 功    能: 温度值显示
 032E           ; 参    数: lz为液晶显示位置
 032E           ; 返回值  : 无
 032E           ; ********************************************/
 032E           ; void b20_display(unsigned char lz)
 032E           ; {
 032E                   .dbline 114
 032E           ;  unsigned char b20_h=0,b20_l=0;
 032E 2224              clr R2
 0330 2882              std y+0,R2
 0332                   .dbline 114
 0332 2982              std y+1,R2
 0334                   .dbline 115
 0334           ;  unsigned char inter=0;
 0334 CC24              clr R12
 0336                   .dbline 116
 0336           ;  unsigned int fraction=0;
 0336 AA24              clr R10
 0338 BB24              clr R11
 033A                   .dbline 117
 033A           ;  Read_temp(&b20_l,&b20_h);   //读取温度值
 033A 9E01              movw R18,R28
 033C 8E01              movw R16,R28
 033E 0F5F              subi R16,255  ; offset = 1
 0340 1F4F              sbci R17,255
 0342 DBDF              xcall _Read_temp
 0344                   .dbline 118
 0344           ;  if(b20_h&0xf8)
 0344 8881              ldd R24,y+0
 0346 887F              andi R24,248
 0348 61F0              breq L92
 034A           X24:
 034A                   .dbline 119
 034A           ;  {
 034A                   .dbline 120
 034A           ;   lcd_write(command,lz);
 034A 242F              mov R18,R20
 034C 0027              clr R16
 034E 82DE              xcall _lcd_write
 0350                   .dbline 121
 0350           ;   lcd_write(data,' -');
 0350 20E2              ldi R18,32
 0352 01E0              ldi R16,1
 0354 7FDE              xcall _lcd_write
 0356                   .dbline 122
 0356           ;   b20_l=~b20_l;
 0356 2980              ldd R2,y+1
 0358 2094              com R2
 035A 2982              std y+1,R2
 035C                   .dbline 123
 035C           ;   b20_h=~b20_h;
 035C 2880              ldd R2,y+0
 035E 2094              com R2
 0360 2882              std y+0,R2
 0362                   .dbline 124
 0362           ;  }
 0362           L92:
 0362                   .dbline 125
 0362           ;  inter=b20_h*16+(b20_l>>4);//整数部分
 0362 2880              ldd R2,y+0
 0364 80E1              ldi R24,16
 0366 829D              mul R24,R2
 0368 6001              movw R12,R0
 036A 8981              ldd R24,y+1
 036C 8295              swap R24
 036E 8F70              andi R24,#0x0F
 0370 C80E              add R12,R24
 0372                   .dbline 126
 0372           ;  int_disp(lz+1,inter);
 0372 2C2D              mov R18,R12
 0374 3327              clr R19
 0376 042F              mov R16,R20
 0378 0F5F              subi R16,255    ; addi 1
 037A 12DF              xcall _int_disp
 037C                   .dbline 127
 037C           ;  lcd_write(data,'.');
 037C 2EE2              ldi R18,46
 037E 01E0              ldi R16,1
 0380 69DE              xcall _lcd_write
 0382                   .dbline 128
 0382           ;  fraction=(b20_l&0x0f)*625;//小数部分,只显示小数点后一位
 0382 2981              ldd R18,y+1
 0384 3327              clr R19
 0386 2F70              andi R18,15
 0388 3070              andi R19,0
 038A 01E7              ldi R16,625
 038C 12E0              ldi R17,2
 038E 0E940000          xcall empy16s
 0392 5801              movw R10,R16
 0394                   .dbline 129
 0394           ;  lcd_write(data,fraction/1000+48);
 0394 28EE              ldi R18,1000
 0396 33E0              ldi R19,3
 0398 0E940000          xcall div16u
 039C 9801              movw R18,R16
 039E 205D              subi R18,208  ; offset = 48
 03A0 3F4F              sbci R19,255
 03A2 01E0              ldi R16,1
 03A4 57DE              xcall _lcd_write
 03A6                   .dbline -2
 03A6           L91:
 03A6                   .dbline 0 ; func end
 03A6 2296              adiw R28,2
 03A8 0C940000          xjmp pop_xgset303C
 03AC                   .dbsym r fraction 10 i
 03AC                   .dbsym r inter 12 c
 03AC                   .dbsym l b20_l 1 c
 03AC                   .dbsym l b20_h 0 c
 03AC                   .dbsym r lz 20 c
 03AC                   .dbend
 03AC                   .dbfile D:\mega16_32实验板资料\ICCAVR源程序\18b20\18b20_test.c
 03AC                   .dbfunc e main _main fV
                        .even
 03AC           _main::
 03AC                   .dbline -1
 03AC                   .dbline 13
 03AC           ; //ICC-AVR application builder : 2008-5-8 17:24:29
 03AC           ; // Target : M16
 03AC           ; // Crystal: 8.0000Mhz
 03AC           ; 
 03AC           ; #include <iom16v.h>
 03AC           ; #include <macros.h>
 03AC           ; 
 03AC           ; #include "delay.h"
 03AC           ; #include "lcd12232.h"
 03AC           ; #include "18b20.h"
 03AC           ; 
 03AC           ; void main(void)
 03AC           ; {
 03AC                   .dbline 14
 03AC           ;  LCD_init();
 03AC 92DE              xcall _LCD_init
 03AE                   .dbline 15
 03AE           ;  line1_display("18B20 温度显示 ");
 03AE 00E0              ldi R16,<L95
 03B0 10E0              ldi R17,>L95
 03B2 C8DE              xcall _line1_display
 03B4 02C0              xjmp L97
 03B6           L96:
 03B6                   .dbline 17
 03B6           ;  while(1)
 03B6           ;  {
 03B6                   .dbline 18
 03B6           ;    b20_display(0x93);
 03B6 03E9              ldi R16,147
 03B8 B6DF              xcall _b20_display
 03BA                   .dbline 19
 03BA           ;  }
 03BA           L97:
 03BA                   .dbline 16
 03BA FDCF              xjmp L96
 03BC           X25:
 03BC                   .dbline -2
 03BC           L94:
 03BC                   .dbline 0 ; func end
 03BC 0895              ret
 03BE                   .dbend
                        .area data(ram, con, rel)
 0000                   .dbfile D:\mega16_32实验板资料\ICCAVR源程序\18b20\18b20_test.c
 0000           L95:
 0000                   .blkb 16
                        .area idata
 0000 313842323020CEC2B6C8CFD4CABE2000  .byte 49,56,'B,50,48,32,206,194,182,200,207,212,202,190,32,0
                        .area data(ram, con, rel)
 0010                   .dbfile D:\mega16_32实验板资料\ICCAVR源程序\18b20\18b20_test.c
 0010           ; }

⌨️ 快捷键说明

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