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

📄 twi.lis

📁 mega128+时实时钟日期芯片ds1307的例子
💻 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 + -