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

📄 iic.lis

📁 平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案
💻 LIS
字号:
                        .module IIC.C
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\niutao\MYDOCU~1\永磁电机\平缝机\新建文件夹\函数库\IIC\IIC.C
 0000                   .dbfunc e twi_init _twi_init fV
                        .even
 0000           _twi_init::
 0000                   .dbline -1
 0000                   .dbline 32
 0000           ; /*****************************************************************
 0000           ;  *  文件名:      IIC.c
 0000           ;  *  版本号:      
 0000           ;  *  创作日期:    2005.7.7
 0000           ;  *  作者:        fengzm
 0000           ;  *  功能说明:    IIC数据传输
 0000           ;  *  其它说明:    使用AVR单片机Atmega48, 晶振:8Mhz
 0000           ;                   注意:发送START信号之后软件不要清零TWCR的"TWSTA"位。
 0000           ;  *****************************************************************/
 0000           ;  
 0000           ; 
 0000           ; /*****************************************************************
 0000           ; 
 0000           ;  *   修改日期:   2005.7.8  
 0000           ;  *   修改人:     wangzq
 0000           ;  *   修改原因:   格式调整
 0000           ; 
 0000           ;  说明:
 0000           ;  FirstData = 0; IicData = 待发数据;START_IIC();开始发送数据。
 0000           ;  FirstData == 0xff  表示发送结束。
 0000           ; *******************************************************************/
 0000           ; 
 0000           ; 
 0000           ; //包含文件
 0000           ; #include "IIC.h"
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; // TWI initialize
 0000           ; // bit rate:32,prescal:1,rate:100Khz;
 0000           ; void twi_init(void)
 0000           ; {
 0000                   .dbline 33
 0000           ;       TWCR = 0x00;             //disable twi
 0000 2224              clr R2
 0002 ECEB              ldi R30,188
 0004 F0E0              ldi R31,0
 0006 2082              std z+0,R2
 0008                   .dbline 34
 0008           ;     TWBR = 0x20;             //set bit rate equal 32
 0008 80E2              ldi R24,32
 000A E8EB              ldi R30,184
 000C 8083              std z+0,R24
 000E                   .dbline 35
 000E           ;     TWSR = 0x00;             //set prescale  clock/1
 000E E9EB              ldi R30,185
 0010 2082              std z+0,R2
 0012                   .dbline 36
 0012           ;     TWAR = 0x00;             //set slave address
 0012 EAEB              ldi R30,186
 0014 2082              std z+0,R2
 0016                   .dbline 37
 0016           ;     TWCR = 0x85;             //enable twi
 0016 85E8              ldi R24,133
 0018 ECEB              ldi R30,188
 001A 8083              std z+0,R24
 001C                   .dbline -2
 001C           L1:
 001C                   .dbline 0 ; func end
 001C 0895              ret
 001E                   .dbend
                        .area vector(rom, abs)
                        .org 48
 0030 0FC0              rjmp _twi_isr
                        .area text(rom, con, rel)
 001E                   .dbfile C:\DOCUME~1\niutao\MYDOCU~1\永磁电机\平缝机\新建文件夹\函数库\IIC\IIC.C
 001E                   .dbfunc e twi_isr _twi_isr fV
 001E           ;        IicTwsr -> R16
                        .even
 001E           _twi_isr::
 001E 2A92              st -y,R2
 0020 0A93              st -y,R16
 0022 1A93              st -y,R17
 0024 8A93              st -y,R24
 0026 9A93              st -y,R25
 0028 EA93              st -y,R30
 002A FA93              st -y,R31
 002C 2FB6              in R2,0x3f
 002E 2A92              st -y,R2
 0030                   .dbline -1
 0030                   .dbline 42
 0030           ; }
 0030           ; 
 0030           ; #pragma interrupt_handler twi_isr:25
 0030           ; void twi_isr(void)
 0030           ; {
 0030                   .dbline 45
 0030           ;       byte  IicTwsr;              
 0030           ;   
 0030           ;       IicTwsr = TWSR & 0xF8;       
 0030 E9EB              ldi R30,185
 0032 F0E0              ldi R31,0
 0034 0081              ldd R16,z+0
 0036 087F              andi R16,248
 0038                   .dbline 46
 0038           ;       switch (IicTwsr)
 0038 1127              clr R17
 003A 0032              cpi R16,32
 003C E0E0              ldi R30,0
 003E 1E07              cpc R17,R30
 0040 61F1              breq L7
 0042 80E2              ldi R24,32
 0044 90E0              ldi R25,0
 0046 8017              cp R24,R16
 0048 9107              cpc R25,R17
 004A 74F0              brlt L16
 004C           L15:
 004C 0830              cpi R16,8
 004E E0E0              ldi R30,0
 0050 1E07              cpc R17,R30
 0052 C1F0              breq L6
 0054 0830              cpi R16,8
 0056 E0E0              ldi R30,0
 0058 1E07              cpc R17,R30
 005A 0CF4              brge X1
 005C 4AC0              rjmp L3
 005E           X1:
 005E           L17:
 005E 0831              cpi R16,24
 0060 E0E0              ldi R30,0
 0062 1E07              cpc R17,R30
 0064 D1F0              breq L7
 0066 45C0              rjmp L3
 0068           L16:
 0068 0832              cpi R16,40
 006A E0E0              ldi R30,0
 006C 1E07              cpc R17,R30
 006E 29F1              breq L10
 0070 0832              cpi R16,40
 0072 E0E0              ldi R30,0
 0074 1E07              cpc R17,R30
 0076 0CF4              brge X2
 0078 3CC0              rjmp L3
 007A           X2:
 007A           L18:
 007A 0033              cpi R16,48
 007C E0E0              ldi R30,0
 007E 1E07              cpc R17,R30
 0080 E1F0              breq L10
 0082 37C0              rjmp L3
 0084           X0:
 0084                   .dbline 47
 0084           ;       {
 0084           L6:
 0084                   .dbline 49
 0084           ;               case 0x08:
 0084           ;         TWDR = 0x58;                  //发送命令;
 0084 88E5              ldi R24,88
 0086 EBEB              ldi R30,187
 0088 F0E0              ldi R31,0
 008A 8083              std z+0,R24
 008C                   .dbline 50
 008C           ;         START_IIC();                  //开始发送
 008C 85E8              ldi R24,133
 008E ECEB              ldi R30,188
 0090 8083              std z+0,R24
 0092                   .dbline 51
 0092           ;         g_FirstData = 0;
 0092 2224              clr R2
 0094 20920000          sts _g_FirstData,R2
 0098                   .dbline 52
 0098           ;         break;
 0098 34C0              rjmp L4
 009A           L7:
 009A                   .dbline 56
 009A           ;         
 009A           ;               case 0x18:
 009A           ;               case 0x20:
 009A           ;               if (g_FirstData == 0)
 009A 20900000          lds R2,_g_FirstData
 009E 2220              tst R2
 00A0 09F0              breq X3
 00A2 2FC0              rjmp L4
 00A4           X3:
 00A4                   .dbline 57
 00A4           ;               {
 00A4                   .dbline 58
 00A4           ;                       TWDR=0x00;                      //发送命令;
 00A4 2224              clr R2
 00A6 EBEB              ldi R30,187
 00A8 F0E0              ldi R31,0
 00AA 2082              std z+0,R2
 00AC                   .dbline 59
 00AC           ;               START_IIC();            //开始发送
 00AC 85E8              ldi R24,133
 00AE ECEB              ldi R30,188
 00B0 8083              std z+0,R24
 00B2                   .dbline 60
 00B2           ;               g_FirstData = 1;
 00B2 81E0              ldi R24,1
 00B4 80930000          sts _g_FirstData,R24
 00B8                   .dbline 61
 00B8           ;               }         
 00B8                   .dbline 62
 00B8           ;               break;
 00B8 24C0              rjmp L4
 00BA           L10:
 00BA                   .dbline 66
 00BA           ;         
 00BA           ;               case 0x28:
 00BA           ;               case 0x30:
 00BA           ;         if (g_FirstData == 2)
 00BA 80910000          lds R24,_g_FirstData
 00BE 8230              cpi R24,2
 00C0 41F4              brne L11
 00C2                   .dbline 67
 00C2           ;           {
 00C2                   .dbline 68
 00C2           ;               TWCR |= 0x10;                   //发出停止位,停止发送;
 00C2 8091BC00          lds R24,188
 00C6 8061              ori R24,16
 00C8 8093BC00          sts 188,R24
 00CC                   .dbline 69
 00CC           ;               g_FirstData = 0xff;             //发送完成;
 00CC 8FEF              ldi R24,255
 00CE 80930000          sts _g_FirstData,R24
 00D2                   .dbline 70
 00D2           ;               }         
 00D2           L11:
 00D2                   .dbline 71
 00D2           ;               if (g_FirstData == 1)
 00D2 80910000          lds R24,_g_FirstData
 00D6 8130              cpi R24,1
 00D8 A1F4              brne L4
 00DA                   .dbline 72
 00DA           ;               {
 00DA                   .dbline 73
 00DA           ;                       TWDR = g_IicData;                       //发送数据;
 00DA 20900000          lds R2,_g_IicData
 00DE EBEB              ldi R30,187
 00E0 F0E0              ldi R31,0
 00E2 2082              std z+0,R2
 00E4                   .dbline 74
 00E4           ;             START_IIC();                      //开始发送
 00E4 85E8              ldi R24,133
 00E6 ECEB              ldi R30,188
 00E8 8083              std z+0,R24
 00EA                   .dbline 75
 00EA           ;               g_FirstData = 2; 
 00EA 82E0              ldi R24,2
 00EC 80930000          sts _g_FirstData,R24
 00F0                   .dbline 76
 00F0           ;            }
 00F0                   .dbline 77
 00F0           ;                break;  
 00F0 08C0              rjmp L4
 00F2           L3:
 00F2                   .dbline 80
 00F2 8091BC00          lds R24,188
 00F6 8061              ori R24,16
 00F8 8093BC00          sts 188,R24
 00FC                   .dbline 81
 00FC 8FEF              ldi R24,255
 00FE 80930000          sts _g_FirstData,R24
 0102                   .dbline 82
 0102           L4:
 0102                   .dbline -2
 0102           L2:
 0102 2990              ld R2,y+
 0104 2FBE              out 0x3f,R2
 0106 F991              ld R31,y+
 0108 E991              ld R30,y+
 010A 9991              ld R25,y+
 010C 8991              ld R24,y+
 010E 1991              ld R17,y+
 0110 0991              ld R16,y+
 0112 2990              ld R2,y+
 0114                   .dbline 0 ; func end
 0114 1895              reti
 0116                   .dbsym r IicTwsr 16 c
 0116                   .dbend

⌨️ 快捷键说明

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