📄 twi.lis
字号:
.module twi.c
.area text(rom, con, rel)
0000 .dbfile F:\cdy笔记本资料\E\工程\五星\设计文档\程序设计\ds1307\twi.c
0000 .dbfunc e TWI_Init _TWI_Init fV
.even
0000 _TWI_Init::
0000 .dbline -1
0000 .dbline 15
0000 ; //-----------------------------------------------------------
0000 ; //程序由AVR辅助开发工具V2.0.0自动生成
0000 ; //MCU系统的处理器为: ATMega16
0000 ; //MCU系统的晶振频率: 8.0000 Mhz
0000 ; //-----------------------------------------------------------
0000 ;
0000 ; #include <iom128v.h>
0000 ; #include "delay.h"
0000 ; #include "twi.h"
0000 ;
0000 ; //-----------------------------------------------------------
0000 ; //TWI初始化子程序
0000 ; //-----------------------------------------------------------
0000 ; void TWI_Init(void)
0000 ; {
0000 .dbline 16
0000 ; TWCR= 0x00; //disable twi
0000 2224 clr R2
0002 20927400 sts 116,R2
0006 .dbline 17
0006 ; TWBR= 0x49; //set bit rate
0006 89E4 ldi R24,73
0008 80937000 sts 112,R24
000C .dbline 18
000C ; TWSR= 0x03; //set prescale
000C 83E0 ldi R24,3
000E 80937100 sts 113,R24
0012 .dbline 19
0012 ; TWAR= 0xFE; //set slave address
0012 8EEF ldi R24,254
0014 80937200 sts 114,R24
0018 .dbline -2
0018 L1:
0018 .dbline 0 ; func end
0018 0895 ret
001A .dbend
001A .dbfunc e twi_stop _twi_stop fV
.even
001A _twi_stop::
001A .dbline -1
001A .dbline 24
001A ; }
001A ;
001A ; //总线上起动停止条件
001A ; void twi_stop(void)
001A ; {
001A .dbline 25
001A ; TWI_Stop();
001A 84E9 ldi R24,148
001C 80937400 sts 116,R24
0020 .dbline -2
0020 L2:
0020 .dbline 0 ; func end
0020 0895 ret
0022 .dbend
0022 .dbfunc e twi_start _twi_start fc
.even
0022 _twi_start::
0022 .dbline -1
0022 .dbline 30
0022 ; }
0022 ;
0022 ; //总线上起动开始条件
0022 ; unsigned char twi_start(void)
0022 ; {
0022 .dbline 31
0022 ; TWI_Start();
0022 84EA ldi R24,164
0024 80937400 sts 116,R24
0028 L4:
0028 .dbline 32
0028 L5:
0028 .dbline 32
0028 ; TWI_Wait();
0028 20907400 lds R2,116
002C 27FE sbrs R2,7
002E FCCF rjmp L4
0030 .dbline 33
0030 ; return TW_STATUS;
0030 00917100 lds R16,113
0034 087F andi R16,248
0036 .dbline -2
0036 L3:
0036 .dbline 0 ; func end
0036 0895 ret
0038 .dbend
0038 .dbfunc e twi_writebyte _twi_writebyte fc
0038 ; c -> R20
.even
0038 _twi_writebyte::
0038 0E940000 xcall push_gset1
003C 402F mov R20,R16
003E .dbline -1
003E .dbline 38
003E ; }
003E ;
003E ; //写一字节
003E ; unsigned char twi_writebyte(unsigned char c)
003E ; {
003E .dbline 39
003E ; TWDR = c;
003E 40937300 sts 115,R20
0042 .dbline 40
0042 ; delay_nms(10);
0042 0AE0 ldi R16,10
0044 10E0 ldi R17,0
0046 0E940000 xcall _delay_nms
004A .dbline 41
004A ; TWCR = (1 << (TWINT)) | (1 << (TWEN));
004A 84E8 ldi R24,132
004C 80937400 sts 116,R24
0050 L8:
0050 .dbline 42
0050 L9:
0050 .dbline 42
0050 ; TWI_Wait();
0050 20907400 lds R2,116
0054 27FE sbrs R2,7
0056 FCCF rjmp L8
0058 .dbline 43
0058 ; delay_nms(10);
0058 0AE0 ldi R16,10
005A 10E0 ldi R17,0
005C 0E940000 xcall _delay_nms
0060 .dbline 44
0060 ; return TW_STATUS;
0060 00917100 lds R16,113
0064 087F andi R16,248
0066 .dbline -2
0066 L7:
0066 0E940000 xcall pop_gset1
006A .dbline 0 ; func end
006A 0895 ret
006C .dbsym r c 20 c
006C .dbend
006C .dbfunc e twi_readbyte _twi_readbyte fc
006C ; tmp -> R22
006C ; ack -> R10
006C ; c -> R20,R21
.even
006C _twi_readbyte::
006C 0E940000 xcall push_gset3
0070 A22E mov R10,R18
0072 A801 movw R20,R16
0074 .dbline -1
0074 .dbline 49
0074 ; }
0074 ;
0074 ; //读一字节 ack: true时发ACK,false时发NACK
0074 ; unsigned char twi_readbyte(unsigned char *c ,unsigned char ack)
0074 ; {
0074 .dbline 50
0074 ; unsigned char tmp=(1 << (TWINT)) | (1 << (TWEN));
0074 64E8 ldi R22,132
0076 .dbline 51
0076 ; if(ack)
0076 AA20 tst R10
0078 09F0 breq L12
007A .dbline 52
007A ; tmp|=(1 << (TWEA));
007A 6064 ori R22,64
007C L12:
007C .dbline 53
007C ; TWCR=tmp;
007C 60937400 sts 116,R22
0080 .dbline 54
0080 ; delay_nms(10);
0080 0AE0 ldi R16,10
0082 10E0 ldi R17,0
0084 0E940000 xcall _delay_nms
0088 L14:
0088 .dbline 55
0088 L15:
0088 .dbline 55
0088 ; TWI_Wait();
0088 20907400 lds R2,116
008C 27FE sbrs R2,7
008E FCCF rjmp L14
0090 .dbline 56
0090 ; delay_nms(10);
0090 0AE0 ldi R16,10
0092 10E0 ldi R17,0
0094 0E940000 xcall _delay_nms
0098 .dbline 57
0098 ; *c=TWDR;
0098 20907300 lds R2,115
009C FA01 movw R30,R20
009E 2082 std z+0,R2
00A0 .dbline 58
00A0 ; return TW_STATUS;
00A0 00917100 lds R16,113
00A4 087F andi R16,248
00A6 .dbline -2
00A6 L11:
00A6 0E940000 xcall pop_gset3
00AA .dbline 0 ; func end
00AA 0895 ret
00AC .dbsym r tmp 22 c
00AC .dbsym r ack 10 c
00AC .dbsym r c 20 pc
00AC .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -