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

📄 020_smbus.lst

📁 基于C8051F020单片机的
💻 LST
📖 第 1 页 / 共 5 页
字号:
 100   3                              {
 101   4                                      GCV_slave_subaddr_num = 0;
 102   4                                      SMB0DAT = (unsigned char)GIV_slave_subaddr;
 103   4                              }
 104   3                              //没有子地址,则结束传输操作
 105   3                              else
 106   3                              {
 107   4                                      STO = 1;
 108   4                                      STA = 0;
 109   4                                      _nop_();
 110   4                              }
 111   3      
 112   3                              SI = 0;
 113   3                              break;
 114   3                      }
 115   2                      //20 写地址已发送并收到非应答,发送重复起始位或者结束本次传输
 116   2                      case SEND_ADDR_W_REC_NACK:
 117   2                      {
 118   3                              //结束本次传输
 119   3                              STO = 1;
 120   3                              STA = 0;
 121   3                              SI = 0;
 122   3                              break;
 123   3                      }
 124   2                      //28 数据已发送并收到应答,发送下个数据或者停止传输或者重复起始条件。
 125   2                      case SEND_DATA_REC_ACK:
C51 COMPILER V7.50   020_SMBUS                                                             05/07/2007 10:34:34 PAGE 8   

 126   2                      {
 127   3                              //两种可能:写操作写出子地址,读操作写出子地址
 128   3      
 129   3                              //为1则为读操作
 130   3                              if (GBV_smbus_wr)
 131   3                              {
 132   4                                      //如果从机子地址为1位,则发送低位即,子地址数减1
 133   4                                      if (GCV_slave_subaddr_num == 1)
 134   4                                      {
 135   5                                              GCV_slave_subaddr_num = 0;
 136   5                                              SMB0DAT = (unsigned char)GIV_slave_subaddr;
 137   5                                      }
 138   4                                      //从机子地址发送完毕,则开始发送重复起始位
 139   4                                      else
 140   4                                      {
 141   5                                              //STO = 1;
 142   5                                              //STA = 1;
 143   5                                              //从机地址变读
 144   5                                              GCV_slave_addr |= 0x01;
 145   5                                              //重复起始
 146   5                                              SMB0CN |= 0X30;
 147   5                                      }
 148   4                              }
 149   3                              //否则为写操作
 150   3                              else
 151   3                              {
 152   4                                      //如果从机子地址为1位,则发送低位即,子地址数减1
 153   4                                      if (GCV_slave_subaddr_num == 1)
 154   4                                      {
 155   5                                              GCV_slave_subaddr_num = 0;
 156   5                                              SMB0DAT = (unsigned char)GIV_slave_subaddr;
 157   5                                      }
 158   4                                      //从机子地址发送完毕,则开始发送字节
 159   4                                      else if (GCV_slave_data_num > 0)
 160   4                                      {       
 161   5                                              SMB0DAT = *GPV_slave_data_array;
 162   5                                              GCV_slave_data_num--;
 163   5                                              GPV_slave_data_array++;
 164   5                                      }
 165   4                                      //数据发送完毕,则结束传输过程
 166   4                                      else
 167   4                                      {
 168   5                                              STO = 1;
 169   5                                              STA = 0;
 170   5                                              _nop_();
 171   5                                      }
 172   4                              }
 173   3                              SI = 0;
 174   3                              break;
 175   3                      }
 176   2                      //30 数据已发送并收到非应答,停止传输或者重复起始条件。
 177   2                      case SEND_DATA_REC_NACK:
 178   2                      {
 179   3                              //结束本次传输
 180   3                              STO = 1;
 181   3                              SI = 0;
 182   3                              break;
 183   3                      }
 184   2                      //38 竞争失败,保存当前数据
 185   2                      case COMPETE_FAIL:
 186   2                      {
 187   3                              _nop_();
C51 COMPILER V7.50   020_SMBUS                                                             05/07/2007 10:34:34 PAGE 9   

 188   3                              SI = 0;
 189   3                              break;
 190   3                      }
 191   2                      //40 读地址已发送并收到应答,如果只接收1个字节,则AA位清0,否则等待接收数据
 192   2                      case SEND_ADDR_R_REC_ACK:
 193   2                      {
 194   3                              //如果只接收1个字节,则AA位清0,否则AA置1,允许应答
 195   3                              if (GCV_slave_data_num == 1)
 196   3                              {       
 197   4                                      AA = 0;
 198   4                              }
 199   3                              else
 200   3                              {
 201   4                                      AA = 1;
 202   4                              }
 203   3      
 204   3                              SI = 0;
 205   3                              break;
 206   3                      }
 207   2                      //48 读地址已发送并收到非应答,发送重复起始位或者结束本次传输
 208   2                      case SEND_ADDR_R_REC_NACK:
 209   2                      {
 210   3                              //结束本次传输操作
 211   3                              STO = 1;
 212   3                              STA = 0;
 213   3                              SI = 0;
 214   3                              break;
 215   3                      }
 216   2                      //50 数据字节已收到并已发送完毕应答,读回SMB0DAT,等待下个字节,并判断,下个字节如果为最后一个字节,则AA
             -位清0
 217   2                      case REC_DATA_SEND_ACK:
 218   2                      {
 219   3                              if (GCV_slave_data_num > 0)
 220   3                              {
 221   4                                      //读取数据
 222   4                                      *GPV_slave_data_array = SMB0DAT;
 223   4                                      GPV_slave_data_array++;
 224   4                                      GCV_slave_data_num--;
 225   4                                      //下个字节如果为最后一个字节,则AA位清0
 226   4                                      if (GCV_slave_data_num == 1)
 227   4                                      {
 228   5                                              AA = 0;
 229   5                                      }
 230   4                              }
 231   3                              else
 232   3                              {
 233   4                                      //结束传输
 234   4                                      STO = 1;
 235   4                                      STA = 0;        
 236   4                              }
 237   3      
 238   3                              SI = 0;
 239   3                              break;
 240   3                      }
 241   2                      //58 数据字节已收到并已发送完毕非应答,则结束传输
 242   2                      case REC_DATA_SEND_NACK:
 243   2                      {
 244   3                              _nop_();
 245   3                              //读取数据
 246   3                              *GPV_slave_data_array = SMB0DAT;
 247   3                              //结束传输
 248   3                              STO = 1;
C51 COMPILER V7.50   020_SMBUS                                                             05/07/2007 10:34:34 PAGE 10  

 249   3                              STA = 0;
 250   3                              SI = 0;
 251   3                              break;
 252   3                      }
 253   2      
 254   2                      default:
 255   2                      {
 256   3                              //结束传输
 257   3                              STO = 1;
 258   3                              SI = 0;
 259   3                              break;
 260   3                      }
 261   2              }
 262   1      }
C51 COMPILER V7.50   020_SMBUS                                                             05/07/2007 10:34:34 PAGE 11  

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION fram_wr_fun (BEGIN)
                                           ; SOURCE LINE # 14
                                           ; SOURCE LINE # 18
                                           ; SOURCE LINE # 19
0000 A200        R     MOV     C,B_wr
0002 9200        R     MOV     GBV_smbus_wr,C
                                           ; SOURCE LINE # 20
0004 850000      R     MOV     GIV_slave_subaddr,subaddr
0007 850000      R     MOV     GIV_slave_subaddr+01H,subaddr+01H
                                           ; SOURCE LINE # 21
000A 850000      R     MOV     GCV_slave_data_num,length_of_data
                                           ; SOURCE LINE # 22
000D 850000      R     MOV     GPV_slave_data_array,P_to_wr_array+01H
0010 850000      R     MOV     GPV_slave_data_array+01H,P_to_wr_array+02H
                                           ; SOURCE LINE # 24
0013 7500A0      R     MOV     GCV_slave_addr,#0A0H
                                           ; SOURCE LINE # 25
0016 750002      R     MOV     GCV_slave_subaddr_num,#02H
                                           ; SOURCE LINE # 26
0019 C2C4              CLR     STO
                                           ; SOURCE LINE # 27
001B D2C5              SETB    STA
                                           ; SOURCE LINE # 28
001D 22                RET     
             ; FUNCTION fram_wr_fun (END)

             ; FUNCTION wdt_rtc_wr_fun (BEGIN)
                                           ; SOURCE LINE # 31
                                           ; SOURCE LINE # 35
                                           ; SOURCE LINE # 36
0000 A200        R     MOV     C,B_wr
0002 9200        R     MOV     GBV_smbus_wr,C
                                           ; SOURCE LINE # 37
0004 850000      R     MOV     GIV_slave_subaddr,subaddr
0007 850000      R     MOV     GIV_slave_subaddr+01H,subaddr+01H
                                           ; SOURCE LINE # 38

⌨️ 快捷键说明

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