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

📄 iic_master.lis

📁 is about the 51 and the LCD
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module iic_master.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\mega16\drive\iic_master.c
 0000                   .dbfunc e IICRead _IICRead fc
 0000           ;              i -> R22
 0000           ;          NByte -> y+4
 0000           ;           Addr -> R22
 0000           ;            Ret -> R20,R21
                        .even
 0000           _IICRead::
 0000 0E940000          xcall push_gset2
 0004 622F              mov R22,R18
 0006 A801              movw R20,R16
 0008                   .dbline -1
 0008                   .dbline 52
 0008           ; /*********************************************************************************************************
 0008           ; **                                             Small RTOS(51)
 0008           ; **                                   The Real-Time Kernel(For Keil c51)
 0008           ; **
 0008           ; **                                  (c) Copyright 2002-2003, chenmingji
 0008           ; **                                           All Rights Reserved
 0008           ; **
 0008           ; **                                                  V1.12.1
 0008           ; **
 0008           ; **
 0008           ; **--------------文件信息--------------------------------------------------------------------------------
 0008           ; **文   件   名: IIC_Master.c
 0008           ; **创   建   人: 陈明计
 0008           ; **最后修改日期:  2002年12月3日
 0008           ; **描        述: Small RTOS IIC总线主器件驱动程序源文件,也可以在不使用
 0008           ; **              Small RTOS的情况下使用(标准51CPU12MHz时100KHz IIc总线
 0008           ; **              仿真)
 0008           ; **--------------历史版本信息----------------------------------------------------------------------------
 0008           ; ** 创建人: 陈明计
 0008           ; ** 版  本: V1.00
 0008           ; ** 日 期: 2003年2月28日
 0008           ; ** 描 述: 原始版本
 0008           ; **
 0008           ; **------------------------------------------------------------------------------------------------------
 0008           ; ** 修改人:
 0008           ; ** 版  本:
 0008           ; ** 日 期:
 0008           ; ** 描 述:
 0008           ; **
 0008           ; **--------------当前版本修订------------------------------------------------------------------------------
 0008           ; ** 修改人:
 0008           ; ** 日 期:
 0008           ; ** 描 述:
 0008           ; **
 0008           ; **------------------------------------------------------------------------------------------------------
 0008           ; ********************************************************************************************************/
 0008           ; #include "config.h"
 0008           ; 
 0008           ; #define IIC_delay() delay_1us();delay_1us();
 0008           ; /*********************************************************************************************************
 0008           ; ** 函数名称: IICRead
 0008           ; ** 功能描述: 从IIC总线读取数据
 0008           ; ** 输 入: Ret:存储读取的数据
 0008           ; **         Addr:IIC从器件地址
 0008           ; **         Nbyte:读取的字节数目
 0008           ; ** 输 出: TRUE:成功
 0008           ; **         FALSE:失败
 0008           ; ** 全局变量: 无
 0008           ; ** 调用模块: 无
 0008           ; ********************************************************************************************************/
 0008           ; uchar IICRead(uchar *Ret,uchar Addr,uchar NByte)
 0008           ; {
 0008                   .dbline 55
 0008           ;       uchar i;
 0008           ; 
 0008           ;       Addr = Addr | 0x01;
 0008 6160              ori R22,1
 000A                   .dbline 56
 000A           ;       if (IICStart() == FALSE)
 000A 48D0              xcall _IICStart
 000C 0230              cpi R16,2
 000E 11F4              brne L2
 0010                   .dbline 57
 0010           ;       {
 0010                   .dbline 58
 0010           ;               return FALSE;
 0010 02E0              ldi R16,2
 0012 19C0              xjmp L1
 0014           L2:
 0014                   .dbline 61
 0014           ;       }
 0014           ; 
 0014           ;       if(IICSend(Addr) == FALSE)
 0014 062F              mov R16,R22
 0016 7FD1              xcall _IICSend
 0018 0230              cpi R16,2
 001A 11F4              brne L4
 001C                   .dbline 62
 001C           ;       {
 001C                   .dbline 63
 001C           ;               return FALSE;
 001C 02E0              ldi R16,2
 001E 13C0              xjmp L1
 0020           L4:
 0020                   .dbline 65
 0020           ;       }
 0020           ;       i = NByte - 1;
 0020 6C81              ldd R22,y+4
 0022 6150              subi R22,1
 0024                   .dbline 66
 0024           ;       if (i != 0)
 0024 51F0              breq L6
 0026                   .dbline 67
 0026           ;       {
 0026           L8:
 0026                   .dbline 69
 0026           ;               do
 0026           ;               {
 0026                   .dbline 70
 0026           ;                       *Ret++ = IICReceive();
 0026 F5D1              xcall _IICReceive
 0028 FA01              movw R30,R20
 002A 0193              st Z+,R16
 002C AF01              movw R20,R30
 002E                   .dbline 71
 002E           ;                       IIC_ACK();
 002E A9D0              xcall _IIC_ACK
 0030                   .dbline 72
 0030           L9:
 0030                   .dbline 72
 0030           ;               } while (--i != 0);
 0030 862F              mov R24,R22
 0032 8150              subi R24,1
 0034 682F              mov R22,R24
 0036 8823              tst R24
 0038 B1F7              brne L8
 003A                   .dbline 73
 003A           ;       }
 003A           L6:
 003A                   .dbline 74
 003A           ;       *Ret = IICReceive();
 003A EBD1              xcall _IICReceive
 003C FA01              movw R30,R20
 003E 0083              std z+0,R16
 0040                   .dbline 75
 0040           ;       IIC_NO_ACK();
 0040 05D1              xcall _IIC_NO_ACK
 0042                   .dbline 76
 0042           ;       IICStop();
 0042 49D0              xcall _IICStop
 0044                   .dbline 77
 0044           ;       return TRUE;
 0044 01E0              ldi R16,1
 0046                   .dbline -2
 0046           L1:
 0046 0E940000          xcall pop_gset2
 004A                   .dbline 0 ; func end
 004A 0895              ret
 004C                   .dbsym r i 22 c
 004C                   .dbsym l NByte 4 c
 004C                   .dbsym r Addr 22 c
 004C                   .dbsym r Ret 20 pc
 004C                   .dbend
 004C                   .dbfunc e IICWrite _IICWrite fc
 004C           ;              i -> R20
 004C           ;          NByte -> y+4
 004C           ;           Data -> R22,R23
 004C           ;           Addr -> R20
                        .even
 004C           _IICWrite::
 004C 0E940000          xcall push_gset2
 0050 B901              movw R22,R18
 0052 402F              mov R20,R16
 0054                   .dbline -1
 0054                   .dbline 92
 0054           ; }
 0054           ; 
 0054           ; /*********************************************************************************************************
 0054           ; ** 函数名称: IICWrite
 0054           ; ** 功能描述: 往IIC总线写数据
 0054           ; ** 输 入: Addr:IIC从器件地址
 0054           ; **         Data:存储将要写的数据
 0054           ; **         Nbyte:写的字节数目
 0054           ; ** 输 出: TRUE:成功
 0054           ; **         FALSE:失败
 0054           ; ** 全局变量: 无
 0054           ; ** 调用模块: 无
 0054           ; ********************************************************************************************************/
 0054           ; uchar IICWrite(uchar Addr,uchar *Data,uchar NByte)
 0054           ; {
 0054                   .dbline 95
 0054           ;       uchar i;
 0054           ; 
 0054           ;       Addr = Addr & 0xfe;
 0054 4E7F              andi R20,254
 0056                   .dbline 96
 0056           ;       if (IICStart() == FALSE)
 0056 22D0              xcall _IICStart
 0058 0230              cpi R16,2
 005A 11F4              brne L12
 005C                   .dbline 97
 005C           ;       {
 005C                   .dbline 98
 005C           ;               return FALSE;
 005C 02E0              ldi R16,2
 005E 16C0              xjmp L11
 0060           L12:
 0060                   .dbline 100
 0060           ;       }
 0060           ;       if (IICSend(Addr) == FALSE)
 0060 042F              mov R16,R20
 0062 59D1              xcall _IICSend
 0064 0230              cpi R16,2
 0066 11F4              brne L14
 0068                   .dbline 101
 0068           ;       {
 0068                   .dbline 102
 0068           ;               return FALSE;
 0068 02E0              ldi R16,2
 006A 10C0              xjmp L11
 006C           L14:
 006C                   .dbline 104
 006C           ;       }
 006C           ;       i = NByte;
 006C 4C81              ldd R20,y+4
 006E           L16:
 006E                   .dbline 106
 006E           ;       do
 006E           ;       {
 006E                   .dbline 107
 006E           ;               if (IICSend(*Data++) == FALSE)
 006E FB01              movw R30,R22
 0070 0191              ld R16,Z+
 0072 BF01              movw R22,R30
 0074 50D1              xcall _IICSend
 0076 0230              cpi R16,2
 0078 11F4              brne L19
 007A                   .dbline 108
 007A           ;               {
 007A                   .dbline 109
 007A           ;                       return FALSE;
 007A 02E0              ldi R16,2
 007C 07C0              xjmp L11
 007E           L19:
 007E                   .dbline 111
 007E           L17:
 007E                   .dbline 111
 007E           ;               }
 007E           ;       } while (--i !=0 );
 007E 842F              mov R24,R20
 0080 8150              subi R24,1
 0082 482F              mov R20,R24
 0084 8823              tst R24
 0086 99F7              brne L16
 0088                   .dbline 112
 0088           ;       IICStop();
 0088 26D0              xcall _IICStop
 008A                   .dbline 113
 008A           ;       return TRUE;
 008A 01E0              ldi R16,1
 008C                   .dbline -2
 008C           L11:
 008C 0E940000          xcall pop_gset2
 0090                   .dbline 0 ; func end
 0090 0895              ret
 0092                   .dbsym r i 20 c
 0092                   .dbsym l NByte 4 c
 0092                   .dbsym r Data 22 pc
 0092                   .dbsym r Addr 20 c
 0092                   .dbend
 0092                   .dbfunc e IICInit _IICInit fV
                        .even
 0092           _IICInit::
 0092                   .dbline -1
 0092                   .dbline 125
 0092           ; }
 0092           ; 
 0092           ; /*********************************************************************************************************
 0092           ; ** 函数名称: IICInit
 0092           ; ** 功能描述: IIC总线初始化
 0092           ; ** 输 入: 无
 0092           ; ** 输 出: 无
 0092           ; ** 全局变量: 无
 0092           ; ** 调用模块: 无
 0092           ; ********************************************************************************************************/
 0092           ; void IICInit(void)
 0092           ; {
 0092                   .dbline 126
 0092           ;       IIC_SDA_O;
 0092 A19A              sbi 0x14,1
 0094                   .dbline 127
 0094           ;       IIC_SCL_O;
 0094 A09A              sbi 0x14,0
 0096                   .dbline 128
 0096           ;       IIC_SCL_L;
 0096 A898              cbi 0x15,0
 0098                   .dbline 129
 0098           ;       IICStop();
 0098 1ED0              xcall _IICStop
 009A                   .dbline -2
 009A           L21:
 009A                   .dbline 0 ; func end
 009A 0895              ret
 009C                   .dbend
 009C                   .dbfunc e IICStart _IICStart fc
                        .even
 009C           _IICStart::
 009C                   .dbline -1
 009C                   .dbline 142
 009C           ; }
 009C           ; 
 009C           ; /*********************************************************************************************************
 009C           ; ** 函数名称: IICStart
 009C           ; ** 功能描述: 发送IIC启动信号
 009C           ; ** 输 入: 无
 009C           ; ** 输 出: TRUE:成功
 009C           ; **         FALSE:失败
 009C           ; ** 全局变量: 无
 009C           ; ** 调用模块: 无
 009C           ; ********************************************************************************************************/
 009C           ; uchar IICStart(void)
 009C           ; {
 009C                   .dbline 143
 009C           ;       IIC_SDA_I;
 009C A198              cbi 0x14,1
 009E                   .dbline 144
 009E           ;       IIC_SDA_H;
 009E A99A              sbi 0x15,1
 00A0                   .dbline 145
 00A0           ;       IIC_SCL_H;
 00A0 A89A              sbi 0x15,0
 00A2                   .dbline 146
 00A2           ;       if (IIC_DATA)
 00A2 999B              sbis 0x13,1
 00A4 16C0              rjmp L23
 00A6                   .dbline 147
 00A6           ;       {
 00A6                   .dbline 148
 00A6           ;               IIC_SDA_O;
 00A6 A19A              sbi 0x14,1
 00A8                   .dbline 149
 00A8           ;               IIC_SDA_L;
 00A8 A998              cbi 0x15,1
 00AA                   .dbline 150
 00AA           ;               IIC_delay();
 00AA 0000              nop
 00AC                   .dbline 150
 00AC 0000              nop
 00AE                   .dbline 150
 00AE 0000              nop
 00B0                   .dbline 150
 00B0 0000              nop
 00B2                   .dbline 150
 00B2 0000              nop
 00B4                   .dbline 150
 00B4 0000              nop
 00B6                   .dbline 150
 00B6 0000              nop
 00B8                   .dbline 150
 00B8 0000              nop
 00BA                   .dbline 150
 00BA 0000              nop
 00BC                   .dbline 150
 00BC 0000              nop
 00BE                   .dbline 150
 00BE 0000              nop
 00C0                   .dbline 150
 00C0 0000              nop
 00C2                   .dbline 150
 00C2 0000              nop
 00C4                   .dbline 150
 00C4 0000              nop
 00C6                   .dbline 150
 00C6 0000              nop
 00C8                   .dbline 150
 00C8 0000              nop
 00CA                   .dbline 150
 00CA                   .dbline 151
 00CA           ;               IIC_SCL_L;
 00CA A898              cbi 0x15,0
 00CC                   .dbline 152
 00CC           ;               IIC_SDA_H;
 00CC A99A              sbi 0x15,1
 00CE                   .dbline 153
 00CE           ;               return TRUE;
 00CE 01E0              ldi R16,1
 00D0 01C0              xjmp L22
 00D2           L23:
 00D2                   .dbline 156
 00D2           ;       }
 00D2           ;       else
 00D2           ;       {
 00D2                   .dbline 157
 00D2           ;               return FALSE;

⌨️ 快捷键说明

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