📄 4_20ma_main.lst
字号:
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 + -