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

📄 4_20ma_main.lst

📁 PIC18F6720写DAC7612U,TA1604_LCD显示,I2C读写PCF8563,PIC单片机之间模拟I2C通讯,该软件已调试通过,已经在产品上使用,有中文说明.
💻 LST
📖 第 1 页 / 共 5 页
字号:
CCS PCH C Compiler, Version 3.187, 16465

               Filename: 4_20mA_main.LST

               ROM used: 5120 (4%)
                         Largest free fragment is 0
               RAM used: 42 (1%) at main() level
                         126 (3%) worst case
               Stack:    8 worst case (6 in main + 2 for interrupts)

*
0000:  GOTO   1328
*
0008:  MOVWF  05
000A:  MOVFF  FD8,06
000E:  MOVF   FE9,W
0010:  MOVWF  07
0012:  MOVF   FEA,W
0014:  MOVWF  08
0016:  MOVF   FE1,W
0018:  MOVWF  09
001A:  MOVF   FE2,W
001C:  MOVWF  0A
001E:  MOVF   FD9,W
0020:  MOVWF  0B
0022:  MOVF   FDA,W
0024:  MOVWF  0C
0026:  MOVF   FF3,W
0028:  MOVWF  14
002A:  MOVF   FF4,W
002C:  MOVWF  15
002E:  MOVF   FE0,W
0030:  MOVWF  0D
0032:  MOVLB  0
0034:  MOVF   00,W
0036:  MOVWF  0F
0038:  MOVF   01,W
003A:  MOVWF  10
003C:  MOVF   02,W
003E:  MOVWF  11
0040:  MOVF   03,W
0042:  MOVWF  12
0044:  MOVF   04,W
0046:  MOVWF  13
0048:  BTFSS  FF0.3
004A:  GOTO   0054
004E:  BTFSC  FF0.0
0050:  GOTO   022E
0054:  MOVF   0F,W
0056:  MOVWF  00
0058:  MOVF   10,W
005A:  MOVWF  01
005C:  MOVF   11,W
005E:  MOVWF  02
0060:  MOVF   12,W
0062:  MOVWF  03
0064:  MOVF   13,W
0066:  MOVWF  04
0068:  MOVF   0D,W
006A:  MOVWF  FE0
006C:  BSF    0D.7
006E:  MOVF   07,W
0070:  MOVWF  FE9
0072:  MOVF   08,W
0074:  MOVWF  FEA
0076:  MOVF   09,W
0078:  MOVWF  FE1
007A:  MOVF   0A,W
007C:  MOVWF  FE2
007E:  MOVF   0B,W
0080:  MOVWF  FD9
0082:  MOVF   0C,W
0084:  MOVWF  FDA
0086:  MOVF   14,W
0088:  MOVWF  FF3
008A:  MOVF   15,W
008C:  MOVWF  FF4
008E:  MOVF   05,W
0090:  MOVFF  06,FD8
0094:  RETFIE 0
....................  #if defined(__PCH__)  
.................... #include <18F6720.h> 
....................  //////// Standard Header file for the PIC18F6720 device ////////////////  
.................... #device PIC18F6720  
.................... #list  
....................  
....................   
.................... #fuses HS,NOWDT,NOPROTECT,NOLVP  //HS:使用外部晶振10MHz;  
....................                                  //NOWDT:不使用看门狗  
....................                                  //NOPROTECT程序不保护  
.................... #use delay(clock=10000000)       //使能内部函数delay_ms()和delay_us()  
*
0922:  CLRF   FEA
0924:  MOVLW  3B
0926:  MOVWF  FE9
0928:  MOVF   FEF,W
092A:  BTFSC  FD8.2
092C:  GOTO   094E
0930:  MOVLW  03
0932:  MOVWF  01
0934:  CLRF   00
0936:  DECFSZ 00,F
0938:  BRA    0936
093A:  DECFSZ 01,F
093C:  BRA    0934
093E:  MOVLW  3C
0940:  MOVWF  00
0942:  DECFSZ 00,F
0944:  BRA    0942
0946:  NOP   
0948:  NOP   
094A:  DECFSZ FEF,F
094C:  BRA    0930
094E:  RETLW  00
.................... //#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  
.................... //#define use_portb_lcd  
.................... #endif  
.................... char receive_string_buffer[]={'0','0','.','0','0'};  
*
133A:  MOVLW  30
133C:  MOVWF  17
133E:  MOVWF  18
1340:  MOVLW  2E
1342:  MOVWF  19
1344:  MOVLW  30
1346:  MOVWF  1A
1348:  MOVWF  1B
.................... char receive_temp[5]={'0','0','.','0','0'};    //用来存放接收到的数据,以ASCII格式存放  
134A:  MOVWF  1C
134C:  MOVWF  1D
134E:  MOVLW  2E
1350:  MOVWF  1E
1352:  MOVLW  30
1354:  MOVWF  1F
1356:  MOVWF  20
.................... #include "C:\A\EXT_INT1.C " 
....................  #define slave_I2C_data   PIN_B1  
.................... #define slave_I2C_clk    PIN_B2  
....................   
....................   
.................... void ext_int1_init(){  
....................  bit_set(*0xF93,1); //端口B的方向寄存器地址为0xF93,将RB1设置为输入  
*
02EE:  BSF    F93.1
....................  bit_set(*0xF93,2); //端口B的方向寄存器地址为0xF93,将RB2设置为输入  
02F0:  BSF    F93.2
....................  ext_int_edge(1,H_TO_L);     //将EXT_INT1设置为下降沿中断方式;  
02F2:  BCF    FF1.5
....................  enable_interrupts(INT_EXT1);//使能外部中断1  
02F4:  BSF    FF0.3
....................  enable_interrupts(GLOBAL);  //开总中断  
02F6:  MOVLW  C0
02F8:  IORWF  FF2,F
....................  }  
02FA:  GOTO   1376 (RETURN)
....................   
.................... /*  
.................... int1 wait_I2C_clk_high(){  
....................   long int sys_couter=10000;  
....................   while( !input(slave_I2C_clk))  
....................        {  
....................        sys_couter--;  
....................        if(sys_couter==0)  
....................          {  
....................           //enable_interrupts(INT_EXT1);//使能外部中断1  
....................           return  FALSE;//超时;   
....................          }  
....................       }  
....................   return  TRUE;   
.................... }  
.................... */  
....................   
....................   
.................... int1 wait_I2C_clk_low(){  
....................   long int sys_couter2=1000;  
*
0132:  MOVLW  E8
0134:  MOVWF  x76
0136:  MOVLW  03
0138:  MOVWF  x77
....................   while( input(slave_I2C_clk))//等待slave_I2C_clk变为0;  
....................        {  
013A:  BSF    F93.2
013C:  BTFSS  F81.2
013E:  GOTO   0166
....................         sys_couter2--;  
0142:  MOVF   x76,W
0144:  BTFSC  FD8.2
0146:  DECF   x77,F
0148:  DECF   x76,F
....................         if(sys_couter2==0) return  FALSE;//超时;   
014A:  MOVF   x76,F
014C:  BTFSS  FD8.2
014E:  GOTO   0162
0152:  MOVF   x77,F
0154:  BTFSS  FD8.2
0156:  GOTO   0162
015A:  MOVLW  00
015C:  MOVWF  01
015E:  GOTO   016A
....................        }  
0162:  GOTO   013A
....................   return  TRUE;   
0166:  MOVLW  01
0168:  MOVWF  01
.................... }  
016A:  GOTO   023C (RETURN)
....................   
....................   
.................... //从IIC读入一个字节  
.................... BYTE read_IIC_byte( ) {  
.................... long  int sys_couter0=1000;  
016E:  MOVLW  E8
0170:  MOVWF  x78
0172:  MOVLW  03
0174:  MOVWF  x79
.................... long  int sys_couter1=1000;  
0176:  MOVLW  E8
0178:  MOVWF  x7A
017A:  MOVLW  03
017C:  MOVWF  x7B
....................    BYTE i=8,data;  
017E:  MOVLW  08
0180:  MOVWF  x7C
....................   
....................    for(i=0;i<8;i++)  
0182:  CLRF   x7C
0184:  MOVF   x7C,W
0186:  SUBLW  07
0188:  BTFSS  FD8.0
018A:  GOTO   020E
....................       {while( !input(slave_I2C_clk) )  //等待slave_I2C_clk变为1;  
....................             {sys_couter0--;  
018E:  BSF    F93.2
0190:  BTFSC  F81.2
0192:  GOTO   01BA
0196:  MOVF   x78,W
0198:  BTFSC  FD8.2
019A:  DECF   x79,F
019C:  DECF   x78,F
....................              if(sys_couter0==0x0000) return(0);//超时,主机错;   
019E:  MOVF   x78,F
01A0:  BTFSS  FD8.2
01A2:  GOTO   01B6
01A6:  MOVF   x79,F
01A8:  BTFSS  FD8.2
01AA:  GOTO   01B6
01AE:  MOVLW  00
01B0:  MOVWF  01
01B2:  GOTO   0212
....................             }  
01B6:  GOTO   018E
....................        shift_left(&data,1,input(slave_I2C_data)); //slave从从主机发送器读入1位,先读入的是发送数据的最高位;  
01BA:  BSF    F93.1
01BC:  BTFSC  F81.1
01BE:  GOTO   01C8
01C2:  BCF    FD8.0
01C4:  GOTO   01CA
01C8:  BSF    FD8.0
01CA:  RLCF   x7D,F
....................        while( input(slave_I2C_clk) )  //等待slave_I2C_clk变为0;  
....................             {sys_couter1--;  
01CC:  BSF    F93.2
01CE:  BTFSS  F81.2
01D0:  GOTO   01F8
01D4:  MOVF   x7A,W
01D6:  BTFSC  FD8.2
01D8:  DECF   x7B,F
01DA:  DECF   x7A,F
....................              if(sys_couter1==0x0000) return(0);//超时,主机错;   
01DC:  MOVF   x7A,F
01DE:  BTFSS  FD8.2
01E0:  GOTO   01F4
01E4:  MOVF   x7B,F
01E6:  BTFSS  FD8.2
01E8:  GOTO   01F4
01EC:  MOVLW  00
01EE:  MOVWF  01
01F0:  GOTO   0212
....................             }  
01F4:  GOTO   01CC
....................        sys_couter0=1000;  
01F8:  MOVLW  03
01FA:  MOVWF  x79
01FC:  MOVLW  E8
01FE:  MOVWF  x78
....................        sys_couter1=1000;  
0200:  MOVLW  03
0202:  MOVWF  x7B
0204:  MOVLW  E8
0206:  MOVWF  x7A
....................      }  
0208:  INCF   x7C,F
020A:  GOTO   0184
....................   
....................    return(data);//接收正确  
020E:  MOVF   x7D,W
0210:  MOVWF  01
.................... }  
0212:  RETLW  00
....................   
.................... void iic_send_ack()  
.................... {  
....................  output_low(slave_I2C_data);    //在slave_I2C_clk变为0时,本从机发送应答ACK;  
0214:  BCF    F93.1
0216:  BCF    F8A.1
....................   
....................  while( !input(slave_I2C_clk) );//等待slave_I2C_clk变为1;  
0218:  BSF    F93.2
021A:  BTFSS  F81.2

⌨️ 快捷键说明

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