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

📄 ds1302_mega16.lis

📁 这是一个用温度计和时钟程序,芯片是ATmega16,电路稳定,绝对好用而且易懂
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 00C2 2C2D              mov R18,R12
 00C4 0A2D              mov R16,R10
 00C6 E7DF              xcall _LCD_set_xy
 00C8 06C0              xjmp L13
 00CA           L12:
 00CA                   .dbline 124
 00CA           ;     while (*s) 
 00CA           ;       {
 00CA                   .dbline 125
 00CA           ;         LCD_write_byte(0,*s);
 00CA FA01              movw R30,R20
 00CC 2081              ldd R18,z+0
 00CE 0027              clr R16
 00D0 BCDF              xcall _LCD_write_byte
 00D2                   .dbline 126
 00D2           ;               s++;
 00D2 4F5F              subi R20,255  ; offset = 1
 00D4 5F4F              sbci R21,255
 00D6                   .dbline 127
 00D6           ;       }
 00D6           L13:
 00D6                   .dbline 123
 00D6 FA01              movw R30,R20
 00D8 2080              ldd R2,z+0
 00DA 2220              tst R2
 00DC B1F7              brne L12
 00DE           X3:
 00DE                   .dbline -2
 00DE           L11:
 00DE                   .dbline 0 ; func end
 00DE 0C940000          xjmp pop_xgset303C
 00E2                   .dbsym r s 20 pc
 00E2                   .dbsym r Y 12 c
 00E2                   .dbsym r X 10 c
 00E2                   .dbend
 00E2                   .dbfunc e Move _Move fV
 00E2           ;              i -> R10
 00E2           ;           time -> y+6
 00E2           ;       dirction -> R12
 00E2           ;           step -> R20
                        .even
 00E2           _Move::
 00E2 0E940000          xcall push_xgset303C
 00E6 C22E              mov R12,R18
 00E8 402F              mov R20,R16
 00EA                   .dbline -1
 00EA                   .dbline 131
 00EA           ;   }
 00EA           ; //=======================================================
 00EA           ; void Move(uint8_t step,uint8_t dirction,uint16_t time)
 00EA           ; {
 00EA                   .dbline 133
 00EA           ;        uint8_t i;
 00EA           ;        for(i=0;i<step-1;i++)
 00EA AA24              clr R10
 00EC 07C0              xjmp L19
 00EE           L16:
 00EE                   .dbline 134
 00EE           ;        {
 00EE                   .dbline 135
 00EE           ;                LCD_write_byte(1,dirction);      //字符移动方向                                    
 00EE 2C2D              mov R18,R12
 00F0 01E0              ldi R16,1
 00F2 ABDF              xcall _LCD_write_byte
 00F4                   .dbline 136
 00F4           ;          Delay_nms(time);                //控制移动时间
 00F4 0E81              ldd R16,y+6
 00F6 1F81              ldd R17,y+7
 00F8 1CD0              xcall _Delay_nms
 00FA                   .dbline 137
 00FA           ;        }
 00FA           L17:
 00FA                   .dbline 133
 00FA A394              inc R10
 00FC           L19:
 00FC                   .dbline 133
 00FC 842F              mov R24,R20
 00FE 8150              subi R24,1
 0100 A816              cp R10,R24
 0102 A8F3              brlo L16
 0104           X4:
 0104                   .dbline -2
 0104           L15:
 0104                   .dbline 0 ; func end
 0104 0C940000          xjmp pop_xgset303C
 0108                   .dbsym r i 10 c
 0108                   .dbsym l time 6 i
 0108                   .dbsym r dirction 12 c
 0108                   .dbsym r step 20 c
 0108                   .dbend
 0108                   .dbfunc e Flash_lcd _Flash_lcd fV
 0108           ;              j -> R10
 0108           ;          times -> R14
 0108           ;        delay_t -> R12,R13
                        .even
 0108           _Flash_lcd::
 0108 0E940000          xcall push_xgset00FC
 010C E22E              mov R14,R18
 010E 6801              movw R12,R16
 0110                   .dbline -1
 0110                   .dbline 141
 0110           ; }
 0110           ; //=========================================================
 0110           ; void Flash_lcd(uint16_t delay_t,uint8_t times)
 0110           ; {
 0110                   .dbline 143
 0110           ;        uint8_t j;
 0110           ;        for(j=0;j<times;j++)
 0110 AA24              clr R10
 0112 0BC0              xjmp L24
 0114           L21:
 0114                   .dbline 144
 0114           ;        {
 0114                   .dbline 145
 0114           ;               LCD_write_byte(1,0x08);
 0114 28E0              ldi R18,8
 0116 01E0              ldi R16,1
 0118 98DF              xcall _LCD_write_byte
 011A                   .dbline 146
 011A           ;               Delay_nms(delay_t);
 011A 8601              movw R16,R12
 011C 0AD0              xcall _Delay_nms
 011E                   .dbline 147
 011E           ;               LCD_write_byte(1,0x0c);
 011E 2CE0              ldi R18,12
 0120 01E0              ldi R16,1
 0122 93DF              xcall _LCD_write_byte
 0124                   .dbline 148
 0124           ;               Delay_nms(delay_t);
 0124 8601              movw R16,R12
 0126 05D0              xcall _Delay_nms
 0128                   .dbline 149
 0128           ;        }
 0128           L22:
 0128                   .dbline 143
 0128 A394              inc R10
 012A           L24:
 012A                   .dbline 143
 012A AE14              cp R10,R14
 012C 98F3              brlo L21
 012E           X5:
 012E                   .dbline -2
 012E           L20:
 012E                   .dbline 0 ; func end
 012E 0C940000          xjmp pop_xgset00FC
 0132                   .dbsym r j 10 c
 0132                   .dbsym r times 14 c
 0132                   .dbsym r delay_t 12 i
 0132                   .dbend
 0132                   .dbfunc e Delay_nms _Delay_nms fV
 0132           ;              i -> R20,R21
 0132           ;             ms -> R16,R17
                        .even
 0132           _Delay_nms::
 0132 4A93              st -y,R20
 0134 5A93              st -y,R21
 0136                   .dbline -1
 0136                   .dbline 153
 0136           ; }
 0136           ; //========================================================
 0136           ; void Delay_nms(uint16_t ms) 
 0136           ; { 
 0136 0AC0              xjmp L27
 0138           L26:
 0138                   .dbline 156
 0138           ;     uint16_t i; 
 0138           ;     while(ms--)    
 0138           ;    { 
 0138                   .dbline 157
 0138           ;      for(i=1;i<(uint16_t)(xtal*143-2);i++) 
 0138 41E0              ldi R20,1
 013A 50E0              ldi R21,0
 013C 02C0              xjmp L32
 013E           L29:
 013E                   .dbline 158
 013E           ;          ; 
 013E           L30:
 013E                   .dbline 157
 013E 4F5F              subi R20,255  ; offset = 1
 0140 5F4F              sbci R21,255
 0142           L32:
 0142                   .dbline 157
 0142 86E7              ldi R24,1142
 0144 94E0              ldi R25,4
 0146 4817              cp R20,R24
 0148 5907              cpc R21,R25
 014A C8F3              brlo L29
 014C           X6:
 014C                   .dbline 159
 014C           ;    }   
 014C           L27:
 014C                   .dbline 155
 014C 1801              movw R2,R16
 014E 0150              subi R16,1
 0150 1040              sbci R17,0
 0152 2220              tst R2
 0154 89F7              brne L26
 0156 3320              tst R3
 0158 79F7              brne L26
 015A           X7:
 015A                   .dbline -2
 015A           L25:
 015A                   .dbline 0 ; func end
 015A 5991              ld R21,y+
 015C 4991              ld R20,y+
 015E 0895              ret
 0160                   .dbsym r i 20 i
 0160                   .dbsym r ms 16 i
 0160                   .dbend
 0160                   .dbfile E:\MyDesign\ICCAVR\ATmega16_DEV\DS1302\DS18B20.h
 0160                   .dbfunc e Temp_display _Temp_display fV
                        .area  func_lit(rom, con, rel)
 0000           L69:
 0000 E800              .word `L37
 0002 F000              .word `L39
 0004 F800              .word `L41
 0006 0001              .word `L43
 0008 0801              .word `L45
 000A 1001              .word `L47
 000C 1801              .word `L49
 000E 2001              .word `L51
 0010 2801              .word `L53
 0012 3001              .word `L55
 0014 3801              .word `L57
 0016 4001              .word `L59
 0018 4801              .word `L61
 001A 5001              .word `L63
 001C 5801              .word `L65
 001E 6001              .word `L67
                        .area text(rom, con, rel)
                ;   temp_decimal -> R20
                ;       temp_num -> R12
                ;         temp_l -> R22
                ;         temp_h -> R10
                ;             Th -> R22
                ;             Tl -> R12
                        .even
 0160           _Temp_display::
 0160 0E940000          xcall push_xgsetF03C
 0164 622F              mov R22,R18
 0166 C02E              mov R12,R16
 0168 2297              sbiw R28,2
 016A                   .dbline -1
 016A                   .dbline 18
 016A           ; /**************************************************
 016A           ; *Progect: Temperature measure with DS18B20
 016A           ; */
 016A           ; #include <iom16v.h>
 016A           ; #include <macros.h>
 016A           ; #include "def.h"
 016A           ; 
 016A           ; void Delay_us(uint16_t us);
 016A           ; uint8_t Init_18b20(void);
 016A           ; uint8_t Read_1_byte(void);
 016A           ; void Write_1_byte(uint8_t cmd);
 016A           ; void Write_1(void);
 016A           ; void Write_0(void);
 016A           ; void Temperature(uint8_t Th,uint8_t Tl);
 016A           ; void Temp_display(uint8_t Tl,uint8_t Th);
 016A           ; /*************************************************/
 016A           ; void Temp_display(uint8_t Tl,uint8_t Th)
 016A           ; {
 016A                   .dbline 20
 016A           ;               uint8_t temp_h,temp_l,temp_num,temp_decimal;
 016A           ;               temp_decimal=Tl;
 016A 4C2D              mov R20,R12
 016C                   .dbline 21
 016C           ;               temp_h=Th<<4;
 016C 862F              mov R24,R22
 016E 8F70              andi R24,#0x0F
 0170 8295              swap R24
 0172                   .dbline 22
 0172           ;               temp_l=Tl>>4;
 0172 6C2D              mov R22,R12
 0174 6295              swap R22
 0176 6F70              andi R22,#0x0F
 0178                   .dbline 23
 0178           ;               temp_num=(temp_h|temp_l);
 0178 C82E              mov R12,R24
 017A C62A              or R12,R22
 017C                   .dbline 24
 017C           ;               temp_decimal&=0x0f;
 017C 4F70              andi R20,15
 017E                   .dbline 25
 017E           ;               temp_h=(temp_num/10);
 017E 1AE0              ldi R17,10
 0180 0C2D              mov R16,R12
 0182 0E940000          xcall div8u
 0186 A02E              mov R10,R16
 0188                   .dbline 26
 0188           ;               temp_l=(temp_num%10);
 0188 1AE0              ldi R17,10
 018A 0C2D              mov R16,R12
 018C 0E940000          xcall mod8u
 0190 602F              mov R22,R16
 0192                   .dbline 27
 0192           ;               LCD_write_byte(0,temp_h+48);
 0192 2A2D              mov R18,R10
 0194 205D              subi R18,208    ; addi 48
 0196 0027              clr R16
 0198 58DF              xcall _LCD_write_byte
 019A                   .dbline 28
 019A           ;               LCD_write_byte(0,temp_l+48);
 019A 262F              mov R18,R22
 019C 205D              subi R18,208    ; addi 48
 019E 0027              clr R16
 01A0 54DF              xcall _LCD_write_byte
 01A2                   .dbline 29
 01A2           ;               switch(temp_decimal)
 01A2 5527              clr R21
 01A4 4030              cpi R20,0
 01A6 E0E0              ldi R30,0
 01A8 5E07              cpc R21,R30
 01AA 0CF4              brge X11
 01AC 90C0              xjmp L34
 01AE           X11:
 01AE           X8:
 01AE 8FE0              ldi R24,15

⌨️ 快捷键说明

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