📄 cmx_dio.lis
字号:
00B9 5300 mov [__r1],A
00BB 550000 mov [__r0],0
00BE 060000 add [__r1],<_DIOChannelPins
00C1 0E0000 adc [__r0],>_DIOChannelPins
00C4 5100 mov A,[__r0]
00C6 10 push X
00C7 5800 mov X,[__r1]
00C9 28 romx
00CA 20 pop X
00CB 5400 mov [X+0],A
00CD .dbline 84
00CD ;
00CD ;
00CD ; if ((pPBlock->ON_bDefine ^ bValue ) == 0) { // Same mode
00CD 52FC mov A,[X-4]
00CF 0101 add A,1
00D1 5300 mov [__r1],A
00D3 52FB mov A,[X-5]
00D5 0900 adc A,0
00D7 10 push X
00D8 5800 mov X,[__r1]
00DA 28 romx
00DB 20 pop X
00DC 5300 mov [__r0],A
00DE 52FA mov A,[X-6]
00E0 3400 xor [__r0],A
00E2 3C0000 cmp [__r0],0
00E5 B00E jnz L7
00E7 .dbline 84
00E7 .dbline 85
00E7 ; DISetPin(pinport,1);
00E7 10 push X
00E8 5001 mov A,1
00EA 08 push A
00EB 5200 mov A,[X+0]
00ED 20 pop X
00EE 7C0000 xcall _DISetPin
00F1 20 pop X
00F2 .dbline 86
00F2 800C xjmp L8
00F4 L7:
00F4 .dbline 86
00F4 .dbline 87
00F4 10 push X
00F5 5000 mov A,0
00F7 08 push A
00F8 5200 mov A,[X+0]
00FA 20 pop X
00FB 7C0000 xcall _DISetPin
00FE 20 pop X
00FF .dbline 88
00FF L8:
00FF .dbline -2
00FF .dbline 89
00FF ; } else {
00FF ; DISetPin(pinport,0);
00FF ; }
00FF ; }
00FF L6:
00FF 38FF add SP,-1
0101 20 pop X
0102 .dbline 0 ; func end
0102 7F ret
0103 .dbsym l pinport 0 c
0103 .dbsym l bValue -6 c
0103 .dbsym l pPBlock -5 pX
0103 .dbend
0103 .dbfunc e CMX_DIO_GetValue _CMX_DIO_GetValue fc
0103 ; pin -> X+3
0103 ; port -> X+2
0103 ; pinValue -> X+1
0103 ; pinPort -> X+0
0103 ; pPBlock -> X-5
0103 _CMX_DIO_GetValue::
0103 .dbline -1
0103 10 push X
0104 4F mov X,SP
0105 3806 add SP,6
0107 .dbline 108
0107 ;
0107 ; //-----------------------------------------------------------------------------
0107 ; // FUNCTION NAME: DIO_GetValue(const CMS_DIO_ParameterBlock * pPBlock)
0107 ; //
0107 ; // DESCRIPTION:
0107 ; // Return the value of the DIO pointed to by the parameter block
0107 ; //
0107 ; //-----------------------------------------------------------------------------
0107 ; //
0107 ; // ARGUMENTS:
0107 ; // pPBlock => Pointer to DIO Parameter block
0107 ; //
0107 ; // RETURNS:
0107 ; // Returns DIO status, 1 or 0
0107 ; //
0107 ; // THEORY of OPERATION or PROCEDURE:
0107 ; ///////////////////////////////////////////////////////////////////////////////
0107 ; BYTE CMX_DIO_GetValue(const CMX_DIO_ParameterBlock * pPBlock)
0107 ; {
0107 .dbline 116
0107 ;
0107 ; BYTE port;
0107 ; BYTE pin;
0107 ; BYTE pinPort;
0107 ; BYTE pinValue;
0107 ;
0107 ;
0107 ; pinPort = DIOChannelPins[(pPBlock->ChannelID)] ;
0107 62D000 mov REG[0xd0],>__r0
010A 52FC mov A,[X-4]
010C 0105 add A,5
010E 5300 mov [__r1],A
0110 52FB mov A,[X-5]
0112 0900 adc A,0
0114 10 push X
0115 5800 mov X,[__r1]
0117 28 romx
0118 20 pop X
0119 5300 mov [__r1],A
011B 550000 mov [__r0],0
011E 060000 add [__r1],<_DIOChannelPins
0121 0E0000 adc [__r0],>_DIOChannelPins
0124 5100 mov A,[__r0]
0126 10 push X
0127 5800 mov X,[__r1]
0129 28 romx
012A 20 pop X
012B 5400 mov [X+0],A
012D .dbline 117
012D ; pin = pinlu[(BYTE)(pinPort & 0x0F)];
012D 5200 mov A,[X+0]
012F 210F and A,15
0131 5300 mov [__r1],A
0133 550000 mov [__r0],0
0136 060000 add [__r1],<_pinlu
0139 0E0000 adc [__r0],>_pinlu
013C 5100 mov A,[__r0]
013E 10 push X
013F 5800 mov X,[__r1]
0141 28 romx
0142 20 pop X
0143 5403 mov [X+3],A
0145 .dbline 118
0145 ; port = portlu[(BYTE)((pinPort & 0xF0) >> 4)];
0145 5200 mov A,[X+0]
0147 21F0 and A,-16
0149 67 asr A
014A 67 asr A
014B 67 asr A
014C 67 asr A
014D 210F and A,15
014F 5300 mov [__r1],A
0151 550000 mov [__r0],0
0154 060000 add [__r1],<_portlu
0157 0E0000 adc [__r0],>_portlu
015A 5100 mov A,[__r0]
015C 10 push X
015D 5800 mov X,[__r1]
015F 28 romx
0160 20 pop X
0161 5402 mov [X+2],A
0163 .dbline 120
0163 ;
0163 ; pinValue = DiscreteReadPin(pin,port);
0163 10 push X
0164 5202 mov A,[X+2]
0166 08 push A
0167 5203 mov A,[X+3]
0169 20 pop X
016A 7C0000 xcall _DiscreteReadPin
016D 62D000 mov REG[0xd0],>__r0
0170 20 pop X
0171 5401 mov [X+1],A
0173 .dbline 122
0173 ;
0173 ; if (pPBlock->ReadOutputPolarity == 0) // if output is to be inverted
0173 52FC mov A,[X-4]
0175 0104 add A,4
0177 5300 mov [__r1],A
0179 52FB mov A,[X-5]
017B 0900 adc A,0
017D 10 push X
017E 5800 mov X,[__r1]
0180 28 romx
0181 20 pop X
0182 3900 cmp A,0
0184 B01B jnz L10
0186 .dbline 123
0186 ; {
0186 .dbline 124
0186 ; pinValue = !pinValue; // invert output
0186 3D0100 cmp [X+1],0
0189 B009 jnz L13
018B 560501 mov [X+5],1
018E 560400 mov [X+4],0
0191 8007 xjmp L14
0193 L13:
0193 560500 mov [X+5],0
0196 560400 mov [X+4],0
0199 L14:
0199 62D000 mov REG[0xd0],>__r0
019C 5205 mov A,[X+5]
019E 5401 mov [X+1],A
01A0 .dbline 125
01A0 ; }
01A0 L10:
01A0 .dbline 127
01A0 ;
01A0 ; return ( pinValue);
01A0 5201 mov A,[X+1]
01A2 62D000 mov REG[0xd0],>__r0
01A5 .dbline -2
01A5 L9:
01A5 38FA add SP,-6
01A7 20 pop X
01A8 .dbline 0 ; func end
01A8 7F ret
01A9 .dbsym l pin 3 c
01A9 .dbsym l port 2 c
01A9 .dbsym l pinValue 1 c
01A9 .dbsym l pinPort 0 c
01A9 .dbsym l pPBlock -5 pX
01A9 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -