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

📄 ds18b20.lis

📁 AVR-based single-chip temperature display system, so absolutely! DS18B20 sensors used
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module ds18b20.c
                        .area data(ram, con, rel)
 0000           _led_7::
 0000                   .blkb 2
                        .area idata
 0000 3F06              .byte 63,6
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 5B4F              .byte 91,'O
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 666D              .byte 'f,'m
                        .area data(ram, con, rel)
 0006                   .blkb 2
                        .area idata
 0006 7D07              .byte 125,7
                        .area data(ram, con, rel)
 0008                   .blkb 2
                        .area idata
 0008 7F6F              .byte 127,'o
                        .area data(ram, con, rel)
 000A                   .blkb 2
                        .area idata
 000A 4000              .byte 64,0
                        .area data(ram, con, rel)
 000C                   .dbfile G:\ds18b20\ds18b20.c
 000C                   .dbsym e led_7 _led_7 A[12:12]c
 000C           _position::
 000C                   .blkb 2
                        .area idata
 000C 070B              .byte 7,11
                        .area data(ram, con, rel)
 000E                   .dbfile G:\ds18b20\ds18b20.c
 000E                   .blkb 2
                        .area idata
 000E 0D0E              .byte 13,14
                        .area data(ram, con, rel)
 0010                   .dbfile G:\ds18b20\ds18b20.c
 0010                   .dbsym e position _position A[4:4]c
 0010           _led_buf::
 0010                   .blkb 2
                        .area idata
 0010 0000              .byte 0,0
                        .area data(ram, con, rel)
 0012                   .dbfile G:\ds18b20\ds18b20.c
 0012                   .blkb 2
                        .area idata
 0012 0000              .byte 0,0
                        .area data(ram, con, rel)
 0014                   .dbfile G:\ds18b20\ds18b20.c
 0014                   .dbsym e led_buf _led_buf A[4:4]c
                        .area text(rom, con, rel)
 0000                   .dbfile G:\ds18b20\ds18b20.c
 0000                   .dbfunc e delay_1us _delay_1us fV
                        .even
 0000           _delay_1us::
 0000                   .dbline -1
 0000                   .dbline 18
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; #define DQ_IN DDRA &= ~(1 << PA7)             /*设置输入*/
 0000           ; #define DQ_OUT        DDRA |= (1 << PA7)              /*设置输出*/
 0000           ; #define DQ_CLR        PORTA &= ~(1 << PA7)    /*置低电平*/
 0000           ; #define DQ_SET        PORTA |= (1 << PA7)             /*置高电平*/
 0000           ; #define DQ_R  PINA & (1 << PA7)               /*读了电平*/
 0000           ; unsigned char led_7[] = {0X3f,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0x40,0x00,};
 0000           ; unsigned char flag;                                           /*中断标志缓存*/
 0000           ; unsigned char position[4]={0X07,0X0B,0X0D,0X0E};
 0000           ; //unsigned char time[2];//显示时,分,
 0000           ; unsigned char   dis_buff[4];   // 显示缓冲区    
 0000           ; unsigned char   posit;
 0000           ; unsigned char led_buf[] = {0,0,0,0,};                 /*显示信息*/
 0000           ; /*********************delay function********************/
 0000           ; void delay_1us(void)                 //1us延时函数
 0000           ;   {
 0000                   .dbline 19
 0000           ;    asm("nop");
 0000 0000              nop
 0002                   .dbline -2
 0002           L1:
 0002                   .dbline 0 ; func end
 0002 0895              ret
 0004                   .dbend
 0004                   .dbfunc e delay_nus _delay_nus fV
 0004           ;              i -> R20,R21
 0004           ;              n -> R22,R23
                        .even
 0004           _delay_nus::
 0004 0E940000          xcall push_gset2
 0008 B801              movw R22,R16
 000A                   .dbline -1
 000A                   .dbline 23
 000A           ;   }
 000A           ; 
 000A           ; void delay_nus(unsigned int n)       //N us延时函数
 000A           ;   {
 000A                   .dbline 24
 000A           ;    unsigned int i=0;
 000A 4427              clr R20
 000C 5527              clr R21
 000E                   .dbline 25
 000E           ;    for (i=0;i<n;i++)
 000E 03C0              xjmp L6
 0010           L3:
 0010                   .dbline 26
 0010 F7DF              xcall _delay_1us
 0012           L4:
 0012                   .dbline 25
 0012 4F5F              subi R20,255  ; offset = 1
 0014 5F4F              sbci R21,255
 0016           L6:
 0016                   .dbline 25
 0016 4617              cp R20,R22
 0018 5707              cpc R21,R23
 001A D0F3              brlo L3
 001C                   .dbline -2
 001C           L2:
 001C 0E940000          xcall pop_gset2
 0020                   .dbline 0 ; func end
 0020 0895              ret
 0022                   .dbsym r i 20 i
 0022                   .dbsym r n 22 i
 0022                   .dbend
 0022                   .dbfunc e delay_1ms _delay_1ms fV
 0022           ;              i -> R16,R17
                        .even
 0022           _delay_1ms::
 0022                   .dbline -1
 0022                   .dbline 30
 0022           ;    delay_1us();
 0022           ;   }
 0022           ;   
 0022           ; void delay_1ms(void)                 //1ms延时函数
 0022           ;   {
 0022                   .dbline 32
 0022 0027              clr R16
 0024 1127              clr R17
 0026 02C0              xjmp L11
 0028           L8:
 0028                   .dbline 32
 0028           L9:
 0028                   .dbline 32
 0028 0F5F              subi R16,255  ; offset = 1
 002A 1F4F              sbci R17,255
 002C           L11:
 002C                   .dbline 32
 002C           ;    unsigned int i;
 002C           ;    for (i=0;i<1140;i++);
 002C 0437              cpi R16,116
 002E E4E0              ldi R30,4
 0030 1E07              cpc R17,R30
 0032 D0F3              brlo L8
 0034                   .dbline -2
 0034           L7:
 0034                   .dbline 0 ; func end
 0034 0895              ret
 0036                   .dbsym r i 16 i
 0036                   .dbend
 0036                   .dbfunc e delay_nms _delay_nms fV
 0036           ;              i -> R20,R21
 0036           ;              n -> R22,R23
                        .even
 0036           _delay_nms::
 0036 0E940000          xcall push_gset2
 003A B801              movw R22,R16
 003C                   .dbline -1
 003C                   .dbline 36
 003C           ;   }
 003C           ;   
 003C           ; void delay_nms(unsigned int n)       //N ms延时函数
 003C           ;   {
 003C                   .dbline 37
 003C           ;    unsigned int i=0;
 003C 4427              clr R20
 003E 5527              clr R21
 0040                   .dbline 38
 0040           ;    for (i=0;i<n;i++)
 0040 03C0              xjmp L16
 0042           L13:
 0042                   .dbline 39
 0042 EFDF              xcall _delay_1ms
 0044           L14:
 0044                   .dbline 38
 0044 4F5F              subi R20,255  ; offset = 1
 0046 5F4F              sbci R21,255
 0048           L16:
 0048                   .dbline 38
 0048 4617              cp R20,R22
 004A 5707              cpc R21,R23
 004C D0F3              brlo L13
 004E                   .dbline -2
 004E           L12:
 004E 0E940000          xcall pop_gset2
 0052                   .dbline 0 ; func end
 0052 0895              ret
 0054                   .dbsym r i 20 i
 0054                   .dbsym r n 22 i
 0054                   .dbend
 0054                   .dbfunc e ds1820_reset _ds1820_reset fc
 0054           ;              i -> R20
                        .even
 0054           _ds1820_reset::
 0054 0E940000          xcall push_gset1
 0058                   .dbline -1
 0058                   .dbline 43
 0058           ;    delay_1ms();
 0058           ;   }
 0058           ; 
 0058           ; /*DS18B20复位函数*/
 0058           ; unsigned char ds1820_reset(void) {
 0058                   .dbline 46
 0058           ; 
 0058           ;       unsigned char i;
 0058           ;       flag = SREG;                            /*中断保护*/
 0058 2FB6              in R2,0x3f
 005A 20920500          sts _flag,R2
 005E                   .dbline 47
 005E           ;       CLI();                                          /*关中断*/
 005E F894              cli
 0060                   .dbline 48
 0060           ;       DQ_OUT;
 0060 D79A              sbi 0x1a,7
 0062                   .dbline 49
 0062           ;       DQ_CLR;
 0062 DF98              cbi 0x1b,7
 0064                   .dbline 50
 0064           ;       delay_nus(500);                         /*延时500uS(480-960)*/
 0064 04EF              ldi R16,500
 0066 11E0              ldi R17,1
 0068 CDDF              xcall _delay_nus
 006A                   .dbline 51
 006A           ;       DQ_SET;
 006A DF9A              sbi 0x1b,7
 006C                   .dbline 52
 006C           ;       DQ_IN;
 006C D798              cbi 0x1a,7
 006E                   .dbline 53
 006E           ;       delay_nus(80);                  /*延时80uS*/
 006E 00E5              ldi R16,80
 0070 10E0              ldi R17,0
 0072 C8DF              xcall _delay_nus
 0074                   .dbline 54
 0074           ;       i = DQ_R;
 0074 49B3              in R20,0x19
 0076 4078              andi R20,128
 0078                   .dbline 55
 0078           ;       delay_nus(490);                         /*延时500uS(保持>480uS)*/
 0078 0AEE              ldi R16,490
 007A 11E0              ldi R17,1
 007C C3DF              xcall _delay_nus
 007E                   .dbline 56
 007E           ;       if (flag & 0x80) {                      /*恢复中断状态*/
 007E 20900500          lds R2,_flag
 0082 27FE              sbrs R2,7
 0084 01C0              rjmp L18
 0086                   .dbline 56
 0086                   .dbline 57
 0086           ;               SEI();
 0086 7894              sei
 0088                   .dbline 58
 0088           ;               }
 0088           L18:
 0088                   .dbline 59
 0088           ;       if (i) {
 0088 4423              tst R20
 008A 11F0              breq L20
 008C                   .dbline 59
 008C                   .dbline 60
 008C           ;               return 0x00;
 008C 0027              clr R16
 008E 01C0              xjmp L17
 0090           L20:
 0090                   .dbline 62
 0090           ;               }
 0090           ;       else {
 0090                   .dbline 63
 0090           ;               return 0x01;
 0090 01E0              ldi R16,1
 0092                   .dbline -2
 0092           L17:
 0092 0E940000          xcall pop_gset1
 0096                   .dbline 0 ; func end
 0096 0895              ret
 0098                   .dbsym r i 20 c
 0098                   .dbend
 0098                   .dbfunc e ds1820_read_byte _ds1820_read_byte fc
 0098           ;          value -> R20
 0098           ;              i -> R22
                        .even
 0098           _ds1820_read_byte::
 0098 0E940000          xcall push_gset2
 009C                   .dbline -1
 009C                   .dbline 68
 009C           ;               }
 009C           ; }
 009C           ; 
 009C           ; /*DS18B20字节读取函数*/
 009C           ; unsigned char ds1820_read_byte(void) {
 009C                   .dbline 71
 009C           ; 
 009C           ;       unsigned char i;
 009C           ;       unsigned char value = 0;
 009C 4427              clr R20
 009E                   .dbline 72
 009E           ;       flag = SREG;                            /*中断保护*/
 009E 2FB6              in R2,0x3f
 00A0 20920500          sts _flag,R2
 00A4                   .dbline 73
 00A4           ;       CLI();                                          /*关中断*/
 00A4 F894              cli
 00A6                   .dbline 74
 00A6 68E0              ldi R22,8
 00A8 12C0              xjmp L26
 00AA           L23:
 00AA                   .dbline 74
 00AA           ;       for (i = 8; i != 0; i--) {

⌨️ 快捷键说明

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