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

📄 8563.lis

📁 基于ATMEGA16的时钟芯片原代码
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 00C4           ;       Stop();                                                                 //停止总线
 00C4 5527              clr R21
 00C6 4030              cpi R20,0
 00C8 4507              cpc R20,R21
 00CA 69F0              breq L25
 00CC           X0:
 00CC 4130              cpi R20,1
 00CE E0E0              ldi R30,0
 00D0 5E07              cpc R21,R30
 00D2 61F0              breq L26
 00D4 4230              cpi R20,2
 00D6 E0E0              ldi R30,0
 00D8 5E07              cpc R21,R30
 00DA 59F0              breq L27
 00DC 4330              cpi R20,3
 00DE E0E0              ldi R30,0
 00E0 5E07              cpc R21,R30
 00E2 51F0              breq L28
 00E4 0CC0              xjmp L22
 00E6           X1:
 00E6                   .dbline 84
 00E6           ;       delay_nms(10);                                                  //延时
 00E6           L25:
 00E6                   .dbline 86
 00E6           ;       return 0;                                                               
 00E6           ; }
 00E6 462F              mov R20,R22
 00E8 4058              subi R20,128    ; addi 128
 00EA                   .dbline 87
 00EA           ; /*******************************************************/
 00EA 0BC0              xjmp L23
 00EC           L26:
 00EC                   .dbline 89
 00EC           ; /******   函数名称: i2c_WriteData()               ******/
 00EC           ; /******   功    能: 向I2C总线连续写入7个数据      ******/
 00EC 462F              mov R20,R22
 00EE 4057              subi R20,112    ; addi 144
 00F0                   .dbline 90
 00F0           ; /******   参    数: RomAddress--目标起始寄存器    ******/
 00F0 08C0              xjmp L23
 00F2           L27:
 00F2                   .dbline 92
 00F2           ; /******   返回值  : 无                            ******/
 00F2           ; /*******************************************************/
 00F2 462F              mov R20,R22
 00F4 4857              subi R20,120    ; addi 136
 00F6                   .dbline 93
 00F6           ; unsigned char i2c_WriteData(unsigned char RomAddress)
 00F6 05C0              xjmp L23
 00F8           L28:
 00F8                   .dbline 95
 00F8           ; {
 00F8           ;       unsigned char i;
 00F8 462F              mov R20,R22
 00FA 4856              subi R20,104    ; addi 152
 00FC                   .dbline 96
 00FC           ;       Start();                                                                //发总线起始命令
 00FC 02C0              xjmp L23
 00FE           L22:
 00FE                   .dbline 97
 00FE           ;       Wait();                                                                 //等待应答
 00FE 462F              mov R20,R22
 0100 4058              subi R20,128    ; addi 128
 0102                   .dbline 98
 0102           ;       if(TestAck()!=START)return 1;                   //测试应答
 0102           L23:
 0102                   .dbline 99
 0102           ;       Write8Bit(wr_device_add);                               //写器件地址
 0102 042F              mov R16,R20
 0104 B1DF              xcall _WR_control
 0106                   .dbline -2
 0106           L21:
 0106 0E940000          xcall pop_gset2
 010A                   .dbline 0 ; func end
 010A 0895              ret
 010C                   .dbsym r address 20 c
 010C                   .dbsym r y 22 c
 010C                   .dbsym r x 20 c
 010C                   .dbend
 010C                   .dbfunc e LCD_Write_string _LCD_Write_string fV
 010C           ;              s -> R20,R21
 010C           ;              Y -> R10
 010C           ;              X -> R22
                        .even
 010C           _LCD_Write_string::
 010C 0E940000          xcall push_gset3
 0110 A22E              mov R10,R18
 0112 602F              mov R22,R16
 0114 4E81              ldd R20,y+6
 0116 5F81              ldd R21,y+7
 0118                   .dbline -1
 0118                   .dbline 110
 0118           ;       Wait();                                                                 //等待应答
 0118           ;       if(TestAck()!=MT_SLA_ACK)return 2;              //测试应答
 0118           ;       Write8Bit(RomAddress);                                  //写器件内的寄存器地址
 0118           ;       Wait();                                                                 //等待应答
 0118           ;       if(TestAck()!=MT_DATA_ACK)return 3;             //测试应答
 0118           ;       for(i=0;i<7;i++)                                                //循环7次
 0118           ;       {                                                                               
 0118           ;               Write8Bit(write_shijian[i]);            //写数据
 0118           ;               Wait();                                                         //等待应答
 0118           ;               if(TestAck()!=MT_DATA_ACK)return 4;     //测试应答
 0118           ;       }                                                                               
 0118                   .dbline 112
 0118           ;       Stop();                                                                 //停止总线
 0118           ;       delay_nms(10);                                                  //延时
 0118 2A2D              mov R18,R10
 011A 062F              mov R16,R22
 011C CFDF              xcall _LCD_address
 011E 05C0              xjmp L31
 0120           L30:
 0120                   .dbline 114
 0120                   .dbline 115
 0120 FA01              movw R30,R20
 0122 0081              ldd R16,z+0
 0124 8DDF              xcall _WR_dat
 0126                   .dbline 116
 0126 4F5F              subi R20,255  ; offset = 1
 0128 5F4F              sbci R21,255
 012A                   .dbline 117
 012A           L31:
 012A                   .dbline 113
 012A           ;       return 0;                                                               
 012A FA01              movw R30,R20
 012C 2080              ldd R2,z+0
 012E 2220              tst R2
 0130 B9F7              brne L30
 0132                   .dbline -2
 0132           L29:
 0132 0E940000          xcall pop_gset3
 0136                   .dbline 0 ; func end
 0136 0895              ret
 0138                   .dbsym r s 20 pc
 0138                   .dbsym r Y 10 c
 0138                   .dbsym r X 22 c
 0138                   .dbend
 0138                   .dbfunc e BCD_ASCII _BCD_ASCII fc
 0138           ;            bcd -> R16
                        .even
 0138           _BCD_ASCII::
 0138                   .dbline -1
 0138                   .dbline 129
 0138           ; }
 0138           ; /*******************************************************/
 0138           ; /******   函数名称: i2c_Read()                    ******/
 0138           ; /******   功    能: 连续读取I2C总线               ******/
 0138           ; /******   参    数: RomAddress--目标寄存器        ******/
 0138           ; /******   返回值  : 读出的数据                    ******/
 0138           ; /*******************************************************/   
 0138           ; unsigned char i2c_Read(unsigned char RomAddress)
 0138           ; {
 0138           ;       unsigned char i;
 0138           ;       Start();                                                                //发总线起始命令
 0138           ;       Wait();                                                                 //等待应答
 0138           ;       if(TestAck()!=START)return 1;                   //测试应答
 0138           ;       Write8Bit(wr_device_add);                               //写器件地址
 0138           ;       Wait();                                                                 //等待应答
 0138           ;       if(TestAck()!=MT_SLA_ACK)return 2;              //测试应答
 0138                   .dbline 130
 0138           ;       Write8Bit(RomAddress);                                  //写器件内的寄存器地址
 0138 0F70              andi R16,15
 013A                   .dbline 131
 013A           ;       Wait();                                                                 //等待应答
 013A 89E0              ldi R24,9
 013C 8017              cp R24,R16
 013E 10F4              brsh L34
 0140                   .dbline 132
 0140           ;       if(TestAck()!=MT_DATA_ACK)return 3;             //测试应答
 0140 095C              subi R16,201    ; addi 55
 0142 01C0              xjmp L35
 0144           L34:
 0144                   .dbline 134
 0144           ;       Start();                                                                //重新发总线起始命令
 0144           ;       Wait();                                                                 //等待应答
 0144 005D              subi R16,208    ; addi 48
 0146           L35:
 0146                   .dbline 135
 0146           ;       if(TestAck()!=RE_START)return 4;                //测试应答
 0146                   .dbline -2
 0146           L33:
 0146                   .dbline 0 ; func end
 0146 0895              ret
 0148                   .dbsym r bcd 16 c
 0148                   .dbend
 0148                   .dbfunc e LCD_writeasc _LCD_writeasc fV
 0148           ;           data -> y+4
 0148           ;              y -> R22
 0148           ;              x -> R20
                        .even
 0148           _LCD_writeasc::
 0148 0E940000          xcall push_gset2
 014C 622F              mov R22,R18
 014E 402F              mov R20,R16
 0150                   .dbline -1
 0150                   .dbline 140
 0150           ;       Write8Bit(rd_device_add);                               //写器件地址
 0150           ;       Wait();                                                                 //等待应答
 0150           ;       if(TestAck()!=MR_SLA_ACK)return 5;              //测试应答
 0150           ;       for(i=0;i<7;i++)                                                
 0150           ;       {                                                                               
 0150                   .dbline 141
 0150           ;               Ack();                                                          //发送应答信号
 0150 262F              mov R18,R22
 0152 042F              mov R16,R20
 0154 B3DF              xcall _LCD_address
 0156                   .dbline 142
 0156           ;               Wait();                                                         //等待应答
 0156 0C81              ldd R16,y+4
 0158 73DF              xcall _WR_dat
 015A                   .dbline -2
 015A           L36:
 015A 0E940000          xcall pop_gset2
 015E                   .dbline 0 ; func end
 015E 0895              ret
 0160                   .dbsym l data 4 c
 0160                   .dbsym r y 22 c
 0160                   .dbsym r x 20 c
 0160                   .dbend
 0160                   .dbfunc e Lcd_INT _Lcd_INT fV
                        .even
 0160           _Lcd_INT::
 0160                   .dbline -1
 0160                   .dbline 146
 0160           ;               if(TestAck()!=MR_DATA_ACK)return 6;     //测试应答
 0160           ;               read_shijian[i]=TWDR;                           //将读取的数据放入数组中
 0160           ;       }                                                                               
 0160           ;       Stop();                                                                 //停止总线
 0160                   .dbline 147
 0160           ;       return 0;                                                               
 0160 D19A              sbi 0x1a,1
 0162                   .dbline 148
 0162           ; }
 0162 D39A              sbi 0x1a,3
 0164                   .dbline 149
 0164           ; /*******************************************************/
 0164 95DF              xcall _lcd_control
 0166                   .dbline -2
 0166           L37:
 0166                   .dbline 0 ; func end
 0166 0895              ret
 0168                   .dbend
 0168                   .dbfunc e lcd_writechar _lcd_writechar fV
 0168           ;         number -> y+4
 0168           ;              Y -> R22
 0168           ;              X -> R20
                        .even
 0168           _lcd_writechar::
 0168 0E940000          xcall push_gset2
 016C 622F              mov R22,R18
 016E 402F              mov R20,R16
 0170                   .dbline -1
 0170                   .dbline 153
 0170           ; /******   函数名称: ToStr()                       ******/
 0170           ; /******   功    能: 整数转换成字符串              ******/
 0170           ; /******   参    数: c--要转换的数据               ******/
 0170           ; /******   返回值  : 无                            ******/
 0170                   .dbline 154
 0170           ; /*******************************************************/  
 0170 262F              mov R18,R22
 0172 042F              mov R16,R20
 0174 A3DF              xcall _LCD_address
 0176                   .dbline 155
 0176           ; void ToStr(unsigned char c)
 0176 0C81              ldd R16,y+4
 0178 0295              swap R16
 017A 0F70              andi R16,#0x0F
 017C DDDF              xcall _BCD_ASCII
 017E 60DF              xcall _WR_dat
 0180                   .dbline 156
 0180           ; {
 0180 0C81              ldd R16,y+4
 0182 DADF              xcall _BCD_ASCII
 0184 5DDF              xcall _WR_dat
 0186                   .dbline -2
 0186           L38:
 0186 0E940000          xcall pop_gset2
 018A                   .dbline 0 ; func end
 018A 0895              ret
 018C                   .dbsym l number 4 c
 018C                   .dbsym r Y 22 c
 018C                   .dbsym r X 20 c
 018C                   .dbend
 018C                   .dbfunc e lcd_write2 _lcd_write2 fV
 018C           ;         number -> y+4
 018C           ;              Y -> R22
 018C           ;              X -> R20
                        .even
 018C           _lcd_write2::
 018C 0E940000          xcall push_gset2
 0190 622F              mov R22,R18
 0192 402F              mov R20,R16
 0194                   .dbline -1
 0194                   .dbline 160
 0194           ;       temp[2]=0;
 0194           ;       temp[1]=(c&0x0f)+0x30;
 0194           ;       temp[0]=((c&0xf0)>>4)+0x30;
 0194           ; }
 0194                   .dbline 161
 0194           ; /*******************************************************/
 0194 262F              mov R18,R22
 0196 042F              mov R16,R20
 0198 91DF              xcall _LCD_address
 019A                   .dbline 162
 019A           ; /******   函数名称: Twi_Init()                    ******/
 019A 14E6              ldi R17,100
 019C 0C81              ldd R16,y+4
 019E 0E940000          xcall mod8u

⌨️ 快捷键说明

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