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

📄 18b20_test.lis

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