📄 8563.lis
字号:
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 + -