please dont rip this site

Scenix Lib IO OSI2 IR IR2SER.LST

CC1B  Ver 0.5B beta,   File: ir2ser.c            25. Oct 2002  17:31   Page 1

ADDR CODE  LINE SOURCE

           0001 
           0002 ; CC1B Ver 0.5B beta, Copyright (c) B Knudsen Data
           0003 ; C compiler for the Ubicom SX family
           0004 ; ************  25. Oct 2002  17:31  *************
           0005 
           0006         device SX28
           0007 
     0000  0008 INDF        EQU   $00
     0001  0009 TMR0        EQU   $01
     0004  0010 FSR         EQU   $04
     0005  0011 PORTA       EQU   $05
     0006  0012 PORTB       EQU   $06
     0000  0013 Carry       EQU   0
     0002  0014 Zero_       EQU   2
     0007  0015 PA2         EQU   7
     0005  0016 RA          EQU   $05
     0001  0017 IR_input    EQU   1
     0002  0018 RxD_pin     EQU   2
     0003  0019 _TxOUT      EQU   3
     0004  0020 LED         EQU   4
     000D  0021 x           EQU   $0D
     000E  0022 y           EQU   $0E
     0010  0023 r           EQU   $10
     0014  0024 med         EQU   $14
     0015  0025 min         EQU   $15
     0016  0026 max         EQU   $16
     0017  0027 rxBuf       EQU   $17
     0008  0028 in          EQU   $08
     0009  0029 Hex         EQU   $09
     000C  0030 timeout     EQU   $0C
     000A  0031 txBuf       EQU   $0A
     000B  0032 idx         EQU   $0B
     000F  0033 idx_2       EQU   $0F
           0034 
           0035   ; FILE ir2ser.c
           0036                         ;/*
           0037                         ; * IR reception
           0038                         ; * 05/Sep/1999 JLS & CAE
           0039                         ; * jls at certi.ufsc.br
           0040                         ; * cae at certi.ufsc.br
           0041                         ; * CC5xFree v3.0E (http://www.bknd.com)
           0042                         ; * use CC1B for SX
           0043                         ; */
           0044                         ;
           0045                         ;/*
           0046                         ;  Sony Data format: 12 bits
           0047                         ;
           0048                         ;  Bit zero:
           0049                         ;
           0050                         ;  400
           0051                         ;  +--+   +...
           0052                         ;  |  |   |
           0053                         ;  +  +---+
           0054                         ;      800
           0055                         ;
           0056                         ;  Bit one:
           0057                         ;
           0058                         ;  400
           0059                         ;  +--+      +...
           0060                         ;  |  |      |
CC1B Ver 0.5B beta,   File: ir2ser.c            25. Oct 2002  17:31   Page 2

ADDR CODE  LINE SOURCE

           0061                         ;  +  +------+
           0062                         ;       1400
           0063                         ;
           0064                         ;  Frame:
           0065                         ;               400    400
           0066                         ;  --+          +--+   +--+      +--+
           0067                         ;    |          |  |   |  |      |  |
           0068                         ;    +---2600---+  +---+  +------+  +...
           0069                         ;                   800     1400
           0070                         ;
           0071                         ;  Decoding algorithm:
           0072                         ;  - Detect 2600us pulse,
           0073                         ;  - measure next high pulse as P1 (400us)
           0074                         ;  - measure next low  pulse as P2 (800/1400us)
           0075                         ;  - store min(P1)
           0076                         ;  - store max(P2)
           0077                         ;  After all measurements:
           0078                         ;  - calculate mean = (max-min)/2 + min
           0079                         ;  - For all (P1,P2) measured:
           0080                         ;    . Add P1+P2=P3
           0081                         ;    . If P3< mean => bit is zero
           0082                         ;    . If P3>=mean => bit is one
           0083                         ;
           0084                         ;  Measures with Timer0 & Prescaler:16
           0085                         ;    2600us = 162
           0086                         ;    1400us = 87
           0087                         ;     800us = 50
           0088                         ;     400us = 25
           0089                         ;
           0090                         ;     400+800  = 25+50 = 75
           0091                         ;     400+1400 = 25+87 = 112
           0092                         ;     mean ~= (112-75)/2+75 = 18+75 = 93
           0093                         ;*/
           0094                         ;
           0095                         ;#define         _sx28_
           0096                         ;#include        <sx28.h>
           0097                         ;
           0098                         ;#ifdef _12C508_
           0099                         ;        bit     _TxOUT          @ GP0;
           0100                         ;        bit     RxD_pin         @ GP1;
           0101                         ;        bit     IR_input        @ GP2;
           0102                         ;#else
           0103                         ;        #define RP0             STATUS.5
           0104                         ;        #pragma update_RP 0   /* OFF */
           0105                         ;        #define DEF_TRISA       0
           0106                         ;        #define DEF_TRISB       6
           0107                         ;        bit     Rele            @ PORTA.1;
           0108                         ;
           0109                         ;        bit     IR_input        @ PORTB.1;
           0110                         ;        bit     RxD_pin         @ PORTB.2;
           0111                         ;        bit     _TxOUT          @ PORTB.3;
           0112                         ;        bit     LED             @ PORTB.4;
           0113                         ;#endif
           0114                         ;
           0115                         ;
           0116                         ;
           0117                         ;#ifdef _sx28_
           0118                         ;	unsigned char x,y;
           0119                         ;bank0	unsigned char r[4];
           0120                         ;bank0	unsigned char med,min,max,rxBuf;
CC1B Ver 0.5B beta,   File: ir2ser.c            25. Oct 2002  17:31   Page 3

ADDR CODE  LINE SOURCE

           0121                         ;bank1	unsigned char buff[16];
           0122                         ;bank2	unsigned char buff2[16];
           0123                         ;#else
           0124                         ;	unsigned char x,y,med,min,max,rxBuf;
           0125                         ;	unsigned char r[4];
           0126                         ;	unsigned char buff[16];
           0127                         ;	unsigned char buff2[16];
           0128                         ;	#endif
           0129                         ;
           0130                         ;void TxSerial (unsigned char txBuf);
           0131                         ;
           0132                         ;/*--------------------------------------------------------------------------
                   */
           0133                         ;void TxEnter (void) {
           0134 TxEnter
           0135                         ;/*--------------------------------------------------------------------------
                   */
           0136                         ;        TxSerial(0xD);
0000 0C0D  0137         MOV   W,#13
0001 0928  0138         CALL  TxSerial
           0139                         ;        TxSerial(0xA);
0002 0C0A  0140         MOV   W,#10
0003 0A28  0141         JMP   TxSerial
           0142                         ;}
           0143                         ;
           0144                         ;/*--------------------------------------------------------------------------
                   */
           0145                         ;void TxHexAscii (unsigned char in) {
           0146 TxHexAscii
0004 0028  0147         MOV   in,W
           0148                         ;/*--------------------------------------------------------------------------
                   */
           0149                         ;        unsigned char Hex;
           0150                         ;
           0151                         ;        Hex = swap(in);                 // upper nibble
0005 0388  0152         MOV   W,<>in
0006 0029  0153         MOV   Hex,W
           0154                         ;        Hex &= 0x0F;
0007 0C0F  0155         MOV   W,#15
0008 0169  0156         AND   Hex,W
           0157                         ;        if (Hex<10) Hex += 0x30;
0009 0C0A  0158         MOV   W,#10
000A 0089  0159         MOV   W,Hex-W
000B 0603  0160         SNB   3.Carry
000C 0A10  0161         JMP   m001
000D 0C30  0162         MOV   W,#48
000E 01E9  0163         ADD   Hex,W
           0164                         ;        else Hex += 0x37;
000F 0A12  0165         JMP   m002
0010 0C37  0166 m001    MOV   W,#55
0011 01E9  0167         ADD   Hex,W
           0168                         ;        TxSerial(Hex);
0012 0209  0169 m002    MOV   W,Hex
0013 0928  0170         CALL  TxSerial
           0171                         ;        Hex = in & 0x0F;
0014 0C0F  0172         MOV   W,#15
0015 0148  0173         AND   W,in
0016 0029  0174         MOV   Hex,W
           0175                         ;        if (Hex<0x0A) Hex += 0x30;
0017 0C0A  0176         MOV   W,#10
CC1B Ver 0.5B beta,   File: ir2ser.c            25. Oct 2002  17:31   Page 4

ADDR CODE  LINE SOURCE

0018 0089  0177         MOV   W,Hex-W
0019 0603  0178         SNB   3.Carry
001A 0A1E  0179         JMP   m003
001B 0C30  0180         MOV   W,#48
001C 01E9  0181         ADD   Hex,W
           0182                         ;        else Hex += 0x37;
001D 0A20  0183         JMP   m004
001E 0C37  0184 m003    MOV   W,#55
001F 01E9  0185         ADD   Hex,W
           0186                         ;        TxSerial(Hex);
0020 0209  0187 m004    MOV   W,Hex
0021 0A28  0188         JMP   TxSerial
           0189                         ;}
           0190                         ;
           0191                         ;/*--------------------------------------------------------------------------
                   */
           0192                         ;void Delay_uSeg (unsigned char timeout) {
           0193 Delay_uSeg
0022 002C  0194         MOV   timeout,W
           0195                         ;/*--------------------------------------------------------------------------
                   */
           0196                         ;        // delay = 3*timeout + 7uS (including call and return)
           0197                         ;
           0198                         ;        while (1) {
           0199                         ;                timeout--;
0023 02EC  0200 m005    DECSZ timeout
           0201                         ;                if (timeout==0) {
0024 0A23  0202         JMP   m005
           0203                         ;                        nop();
0025 0000  0204         NOP  
           0205                         ;                        nop();
0026 0000  0206         NOP  
           0207                         ;                        return;
0027 000C  0208         RET  
           0209                         ;                }
           0210                         ;        }
           0211                         ;}
           0212                         ;
           0213                         ;/*--------------------------------------------------------------------------
                   */
           0214                         ;void TxSerial (unsigned char txBuf) {
           0215 TxSerial
0028 002A  0216         MOV   txBuf,W
           0217                         ;/*--------------------------------------------------------------------------
                   */
           0218                         ;
           0219                         ;/*
           0220                         ; ;--------------------------------------------------------------------------
                   -*
           0221                         ; ; Transmit 1 start bit Lo, 8 data bits and 1 stop bit Hi at 9600 bps
           0222                         ; ; No Parity
           0223                         ; ; Byte time = 1.040 mS
           0224                         ; ; Bit  time = 104 uS (0.16% erro w/4.00 Mhz Internal RC)
           0225                         ; ; Input : W = byte to be transmitted
           0226                         ; ; Output: byte transmitted by serial pin
           0227                         ; ;--------------------------------------------------------------------------
                   -*
           0228                         ;*/
           0229                         ;
           0230                         ;    char idx;
CC1B Ver 0.5B beta,   File: ir2ser.c            25. Oct 2002  17:31   Page 5

ADDR CODE  LINE SOURCE

           0231                         ;
           0232                         ;        while (1)
           0233                         ;        {
           0234                         ;                Carry = 0;                      // start bit
0029 0403  0235         CLRB  3.Carry
           0236                         ;                for (idx=10; idx; idx--)        // 3us
002A 0C0A  0237         MOV   W,#10
002B 002B  0238         MOV   idx,W
002C 022B  0239 m006    TEST  idx
002D 0643  0240         SNB   3.Zero_
002E 0A3A  0241         JMP   m007
           0242                         ;                {
           0243                         ;                        _TxOUT = Carry;         // 4us
002F 0703  0244         SB    3.Carry
0030 0466  0245         CLRB  6._TxOUT
0031 0603  0246         SNB   3.Carry
0032 0566  0247         SETB  6._TxOUT
           0248                         ;                        Delay_uSeg(28);         // 91us (28*3+7)
0033 0C1C  0249         MOV   W,#28
0034 0922  0250         CALL  Delay_uSeg
           0251                         ;                        Carry  = 1;             // 1us
0035 0503  0252         SETB  3.Carry
           0253                         ;                        txBuf  = rr(txBuf);     // 1us
0036 032A  0254         RR    txBuf
           0255                         ;                        nop();                  // 1us
0037 0000  0256         NOP  
           0257                         ;                }                               // 3us
0038 00EB  0258         DEC   idx
0039 0A2C  0259         JMP   m006
           0260                         ;                return;
003A 000C  0261 m007    RET  
           0262                         ;        }
           0263                         ;}
           0264                         ;
           0265                         ;/*--------------------------------------------------------------------------
                   */
           0266                         ;void RxSerial (void) {
           0267 RxSerial
           0268                         ;/*--------------------------------------------------------------------------
                   */
           0269                         ;
           0270                         ;/*
           0271                         ; ;--------------------------------------------------------------------------
                   -*
           0272                         ; ; Receives 1 start bit Lo, 8 data bits and 1 stop bit Hi at 9600 bps
           0273                         ; ; No Parity
           0274                         ; ; Byte time = 1.040 mS
           0275                         ; ; Bit  time = 104 uS (0.16% erro w/4.00 Mhz Internal RC)
           0276                         ; ;
           0277                         ; ; False start bit check
           0278                         ; ;
           0279                         ; ; Start bit hunting timeout = 4*1.283ms
           0280                         ; ;
           0281                         ; ; Input  : none
           0282                         ; ; Output : Carry = 1 => success
           0283                         ; ;          rxBuf = input byte
           0284                         ; ;          Carry = 0 => error (timeout or stop bit=0)
           0285                         ; ;--------------------------------------------------------------------------
                   -*
           0286                         ;*/
CC1B Ver 0.5B beta,   File: ir2ser.c            25. Oct 2002  17:31   Page 6

ADDR CODE  LINE SOURCE

           0287                         ;        char idx;
           0288                         ;
           0289                         ;        rxBuf = 4;                              // 5.135 ms timeout
003B 0C04  0290         MOV   W,#4
003C 0064  0291         CLR   FSR
003D 0037  0292         MOV   rxBuf,W
           0293                         ;        idx   = 0;
003E 006F  0294         CLR   idx_2
           0295                         ;
           0296                         ;        while (1)
           0297                         ;        {
           0298                         ;                while (RxD_pin)                 // input "high"
003F 0746  0299 m008    SB    6.RxD_pin
0040 0A47  0300         JMP   m009
           0301                         ;                {
           0302                         ;                        if ((-- idx)==0)
0041 02EF  0303         DECSZ idx_2
0042 0A3F  0304         JMP   m008
           0305                         ;                        {
           0306                         ;                                if ((-- rxBuf)==0)
0043 02F7  0307         DECSZ rxBuf
0044 0A3F  0308         JMP   m008
           0309                         ;                                {
           0310                         ;                                        Carry = 0;
0045 0403  0311         CLRB  3.Carry
           0312                         ;                                        return;
0046 000C  0313         RET  
           0314                         ;                                }
           0315                         ;                        }
           0316                         ;                }
           0317                         ;
           0318                         ;                Delay_uSeg(14);                 // 1/2 bit delay (14*3+7)
0047 0C0E  0319 m009    MOV   W,#14
0048 0922  0320         CALL  Delay_uSeg
           0321                         ;                if (RxD_pin)
0049 0646  0322         SNB   6.RxD_pin
           0323                         ;                        continue;               // false start bit detection
                   
004A 0A3F  0324         JMP   m008
           0325                         ;
           0326                         ;                rxBuf = 0x80;                   // 8 bits counter and recept
                   ion buffer
004B 0C80  0327         MOV   W,#128
004C 0037  0328         MOV   rxBuf,W
           0329                         ;                nop();
004D 0000  0330         NOP  
           0331                         ;                nop();                          // timming adjustment
004E 0000  0332         NOP  
           0333                         ;
           0334                         ;                do
           0335                         ;                {
           0336                         ;                        Delay_uSeg(30);         // (30*3+7)us
004F 0C1E  0337 m010    MOV   W,#30
0050 0922  0338         CALL  Delay_uSeg
           0339                         ;                        Carry = RxD_pin;        // bit read
0051 0403  0340         CLRB  3.Carry
0052 0646  0341         SNB   6.RxD_pin
0053 0503  0342         SETB  3.Carry
           0343                         ;                        rxBuf = rr(rxBuf);      // store and count
0054 0337  0344         RR    rxBuf
CC1B Ver 0.5B beta,   File: ir2ser.c            25. Oct 2002  17:31   Page 7

ADDR CODE  LINE SOURCE

           0345                         ;                }
           0346                         ;                while (Carry==0);
0055 0703  0347         SB    3.Carry
0056 0A4F  0348         JMP   m010
           0349                         ;                Delay_uSeg(30);                 // 1 bit delay
0057 0C1E  0350         MOV   W,#30
0058 0922  0351         CALL  Delay_uSeg
           0352                         ;                nop();                          // timming adjustment
0059 0000  0353         NOP  
           0354                         ;                Carry = RxD_pin;                // stop bit read
005A 0403  0355         CLRB  3.Carry
005B 0646  0356         SNB   6.RxD_pin
005C 0503  0357         SETB  3.Carry
           0358                         ;                return;                         // 100 us availiable
005D 000C  0359         RET  
           0360                         ;        }
           0361                         ;}
           0362                         ;
           0363                         ;
           0364                         ;/*--------------------------------------------------------------------------
                   */
           0365                         ;void main (void) {
           0366 main
           0367                         ;/*--------------------------------------------------------------------------
                   */
           0368                         ;
           0369                         ;#ifdef _12C508_
           0370                         ;//      OSCCAL  = W;                                    // OscCal Value - OT
                   P part
           0371                         ;        OSCCAL  = 0xB0;                                 // OscCal Value - Wi
                   ndowed part
           0372                         ;        GPIO    = 0x00;
           0373                         ;        TRIS    = 0x08;                                 // GP3 input
           0374                         ;	#endif
           0375                         ;
           0376                         ;#ifdef _sx28_
           0377                         ;    #pragma config &= 0b11010011 // reg 1 = RTCC, no int on RTCC, RTCC inter
                   nal, prescale, 1:16
           0378                         ;      PORTA   = 0;
005E 0065  0379         CLR   PORTA
           0380                         ;      PORTB   = 0;
005F 0066  0381         CLR   PORTB
           0382                         ;      DDRA = DEF_TRISA;
0060 005F  0383         MOV   M,#15
0061 0C00  0384         MOV   W,#0
0062 0005  0385         MOV   !RA,W
           0386                         ;      DDRA = DEF_TRISB;
0063 0C06  0387         MOV   W,#6
0064 0005  0388         MOV   !RA,W
           0389                         ;	PA0 = 0;
           0390                         ;	PA1 = 0;
           0391                         ;	PA2 = 0;
0065 04E3  0392         CLRB  3.PA2
           0393                         ;	#endif
           0394                         ;
           0395                         ;#ifdef _16f84_
           0396                         ;        INTCON  = 0;                                    // no interrupts
           0397                         ;        PCLATH  = 0;                                    // bank 0
           0398                         ;        PORTA   = 0;
           0399                         ;        PORTB   = 0;
CC1B Ver 0.5B beta,   File: ir2ser.c            25. Oct 2002  17:31   Page 8

ADDR CODE  LINE SOURCE

           0400                         ;        TRISA   = DEF_TRISA;
           0401                         ;        TRISB   = DEF_TRISB;
           0402                         ;        RP0     = 1;                                    // RAM bank 1
           0403                         ;        RP0     = 0;                                    // RAM bank 0
           0404                         ;	#endif
           0405                         ;
           0406                         ;        while (1)
           0407                         ;        {
           0408                         ;                /* set vars to start */
           0409                         ;                min  = 255;                             // min period
0066 0064  0410         CLR   FSR
0067 0CFF  0411 m011    MOV   W,#255
0068 0035  0412         MOV   min,W
           0413                         ;                max  = 0;                               // max period
0069 0076  0414         CLR   max
           0415                         ;
           0416                         ;                y    = 0;                               // pointer to buffer
                   
006A 006E  0417         CLR   y
           0418                         ;                x    = 12;                              // only 12 bits
006B 0C0C  0419         MOV   W,#12
006C 002D  0420         MOV   x,W
           0421                         ;
           0422                         ;                /* start bit management */
           0423                         ;                while (IR_input==1);                    // wait for 0
006D 0626  0424 m012    SNB   6.IR_input
006E 0A6D  0425         JMP   m012
           0426                         ;
           0427                         ;                /* 2600us start bit */
           0428                         ;                while (IR_input==0);                    // wait for 1
006F 0726  0429 m013    SB    6.IR_input
0070 0A6F  0430         JMP   m013
           0431                         ;
           0432                         ;                TMR0 = 0;                               // start counter
0071 0061  0433         CLR   TMR0
           0434                         ;                do
           0435                         ;                {
           0436                         ;//                        buff[y] = 0; 
           0437                         ;//                        buff2[y] = 0; 
           0438                         ;                        /* measure high pulse */
           0439                         ;                        while (TMR0==0);                // wait TMR0 advance
                   
0072 0201  0440 m014    MOV   W,TMR0
0073 0643  0441         SNB   3.Zero_
0074 0A72  0442         JMP   m014
           0443                         ;                        while (IR_input==1)             // wait for 0
0075 0726  0444 m015    SB    6.IR_input
0076 0A7B  0445         JMP   m016
           0446                         ;                        {
           0447                         ;                                if (TMR0==0)            // timer overflow (4
                   096us) ?
0077 0201  0448         MOV   W,TMR0
0078 0743  0449         SB    3.Zero_
0079 0A75  0450         JMP   m015
           0451                         ;	goto	frame_end	; // yes, exit
007A 0AA1  0452         JMP   m021
           0453                         ;                        }
           0454                         ;                        buff[y] = TMR0;                 // store period
007B 0C30  0455 m016    MOV   W,#48
007C 01CE  0456         ADD   W,y
CC1B Ver 0.5B beta,   File: ir2ser.c            25. Oct 2002  17:31   Page 9

ADDR CODE  LINE SOURCE

007D 0024  0457         MOV   FSR,W
007E 0201  0458         MOV   W,TMR0
007F 0020  0459         MOV   INDF,W
           0460                         ;                        med = TMR0;                     // save high period
0080 0201  0461         MOV   W,TMR0
0081 0018  0462         BANK  0
0082 0034  0463         MOV   med,W
           0464                         ;                        TMR0 = 0;                       // start counter
0083 0061  0465         CLR   TMR0
           0466                         ;
           0467                         ;                        /* measure low pulse */
           0468                         ;
           0469                         ;                        while (TMR0==0);                // wait TMR0 advance
                   
0084 0201  0470 m017    MOV   W,TMR0
0085 0643  0471         SNB   3.Zero_
0086 0A84  0472         JMP   m017
           0473                         ;                        while (IR_input==0);            // wait for 1
0087 0726  0474 m018    SB    6.IR_input
0088 0A87  0475         JMP   m018
           0476                         ;                        buff2[y] = TMR0;                // store period
0089 0C50  0477         MOV   W,#80
008A 01CE  0478         ADD   W,y
008B 0024  0479         MOV   FSR,W
008C 0201  0480         MOV   W,TMR0
008D 0020  0481         MOV   INDF,W
           0482                         ;                        med += TMR0;                    // total period
008E 0201  0483         MOV   W,TMR0
008F 0018  0484         BANK  0
0090 01F4  0485         ADD   med,W
           0486                         ;                        TMR0 = 0;                       // start counter
0091 0061  0487         CLR   TMR0
           0488                         ;                        if (med>=max) max = med;        // find max
0092 0216  0489         MOV   W,max
0093 0094  0490         MOV   W,med-W
0094 0703  0491         SB    3.Carry
0095 0A98  0492         JMP   m019
0096 0214  0493         MOV   W,med
0097 0036  0494         MOV   max,W
           0495                         ;                        if (med<min)  min = med;        // find min
0098 0215  0496 m019    MOV   W,min
0099 0094  0497         MOV   W,med-W
009A 0603  0498         SNB   3.Carry
009B 0A9E  0499         JMP   m020
009C 0214  0500         MOV   W,med
009D 0035  0501         MOV   min,W
           0502                         ;
           0503                         ;                        y++;                            // bump pointer
009E 02AE  0504 m020    INC   y
           0505                         ;                        x--;                            // dec max bits
009F 02ED  0506         DECSZ x
           0507                         ;                }
           0508                         ;                while (x);
00A0 0A72  0509         JMP   m014
           0510                         ;frame_end:
           0511                         ;                LED = 1;
00A1 0586  0512 m021    SETB  6.LED
           0513                         ;                med  = max - min;
00A2 0215  0514         MOV   W,min
00A3 0096  0515         MOV   W,max-W
CC1B Ver 0.5B beta,   File: ir2ser.c            25. Oct 2002  17:31   Page 10

ADDR CODE  LINE SOURCE

00A4 0034  0516         MOV   med,W
           0517                         ;                med /= 2;
00A5 0403  0518         CLRB  3.Carry
00A6 0334  0519         RR    med
           0520                         ;                med += min;
00A7 0215  0521         MOV   W,min
00A8 01F4  0522         ADD   med,W
           0523                         ;
           0524                         ;                r[0] = 0;
00A9 0070  0525         CLR   r
           0526                         ;                r[1] = 0;
00AA 0071  0527         CLR   r+1
           0528                         ;                r[2] = 0;
00AB 0072  0529         CLR   r+2
           0530                         ;                r[3] = 0;
00AC 0073  0531         CLR   r+3
           0532                         ;
           0533                         ;                x = y;	//save the size
00AD 020E  0534         MOV   W,y
00AE 002D  0535         MOV   x,W
           0536                         ;                do
           0537                         ;                {
           0538                         ;                        Carry = 0;
00AF 0403  0539 m022    CLRB  3.Carry
           0540                         ;                        r[3] = rl(r[3]);
00B0 0373  0541         RL    r+3
           0542                         ;                        r[2] = rl(r[2]);
00B1 0372  0543         RL    r+2
           0544                         ;                        r[1] = rl(r[1]);
00B2 0371  0545         RL    r+1
           0546                         ;                        r[0] = rl(r[0]);
00B3 0370  0547         RL    r
           0548                         ;                        y--;
00B4 00EE  0549         DEC   y
           0550                         ;                        max = buff[y];
00B5 0C30  0551         MOV   W,#48
00B6 01CE  0552         ADD   W,y
00B7 0024  0553         MOV   FSR,W
00B8 0200  0554         MOV   W,INDF
00B9 0018  0555         BANK  0
00BA 0036  0556         MOV   max,W
           0557                         ;                        max += buff2[y];
00BB 0C50  0558         MOV   W,#80
00BC 01CE  0559         ADD   W,y
00BD 0024  0560         MOV   FSR,W
00BE 0200  0561         MOV   W,INDF
00BF 0018  0562         BANK  0
00C0 01F6  0563         ADD   max,W
           0564                         ;                        if (max>=med) r[3]++;
00C1 0214  0565         MOV   W,med
00C2 0096  0566         MOV   W,max-W
00C3 0603  0567         SNB   3.Carry
00C4 02B3  0568         INC   r+3
           0569                         ;                } while (y);
00C5 022E  0570         TEST  y
00C6 0743  0571         SB    3.Zero_
00C7 0AAF  0572         JMP   m022
           0573                         ;
           0574                         ;                /* now r[0],r[1],r[2], r[3] has the frame */
           0575                         ;                /* Tx the periods and the encoded word */
CC1B Ver 0.5B beta,   File: ir2ser.c            25. Oct 2002  17:31   Page 11

ADDR CODE  LINE SOURCE

           0576                         ;
           0577                         ;                TxHexAscii(x*2);	//size
00C8 0403  0578         CLRB  3.Carry
00C9 034D  0579         MOV   W,<<x
00CA 0904  0580         CALL  TxHexAscii
           0581                         ;                TxSerial(0x20);
00CB 0C20  0582         MOV   W,#32
00CC 0928  0583         CALL  TxSerial
           0584                         ;                TxHexAscii(med);
00CD 0214  0585         MOV   W,med
00CE 0904  0586         CALL  TxHexAscii
           0587                         ;                TxEnter();
00CF 0900  0588         CALL  TxEnter
           0589                         ;
           0590                         ;                for(y=0;y<x; y++) {
00D0 006E  0591         CLR   y
00D1 020D  0592 m023    MOV   W,x
00D2 008E  0593         MOV   W,y-W
00D3 0603  0594         SNB   3.Carry
00D4 0AE4  0595         JMP   m024
           0596                         ;                        TxHexAscii(buff[y]);
00D5 0C30  0597         MOV   W,#48
00D6 01CE  0598         ADD   W,y
00D7 0024  0599         MOV   FSR,W
00D8 0200  0600         MOV   W,INDF
00D9 0904  0601         CALL  TxHexAscii
           0602                         ;                        TxHexAscii(buff2[y]);
00DA 0C50  0603         MOV   W,#80
00DB 01CE  0604         ADD   W,y
00DC 0024  0605         MOV   FSR,W
00DD 0200  0606         MOV   W,INDF
00DE 0904  0607         CALL  TxHexAscii
           0608                         ;                        TxSerial(0x20);
00DF 0C20  0609         MOV   W,#32
00E0 0928  0610         CALL  TxSerial
           0611                         ;                        }
00E1 02AE  0612         INC   y
00E2 0018  0613         BANK  0
00E3 0AD1  0614         JMP   m023
           0615                         ;                TxEnter();
00E4 0900  0616 m024    CALL  TxEnter
           0617                         ;
           0618                         ;                TxHexAscii(r[0]);
00E5 0210  0619         MOV   W,r
00E6 0904  0620         CALL  TxHexAscii
           0621                         ;                TxHexAscii(r[1]);
00E7 0211  0622         MOV   W,r+1
00E8 0904  0623         CALL  TxHexAscii
           0624                         ;                TxHexAscii(r[2]);
00E9 0212  0625         MOV   W,r+2
00EA 0904  0626         CALL  TxHexAscii
           0627                         ;                TxHexAscii(r[3]);
00EB 0213  0628         MOV   W,r+3
00EC 0904  0629         CALL  TxHexAscii
           0630                         ;
           0631                         ;                TxEnter();
00ED 0900  0632         CALL  TxEnter
           0633                         ;                LED = 0;
00EE 0486  0634         CLRB  6.LED
           0635                         ;        }
CC1B Ver 0.5B beta,   File: ir2ser.c            25. Oct 2002  17:31   Page 12

ADDR CODE  LINE SOURCE

00EF 0A67  0636         JMP   m011
           0637 
     0000  0638         ORG $07FF
07FF 0A5E  0639         GOTO main
     0000  0640         END


file: /Techref/scenix/lib/io/osi2/ir/ir2ser.lst, 37KB, , updated: 2002/10/25 18:31, local time: 2024/4/19 21:42,
TOP NEW HELP FIND: 
3.133.141.6:LOG IN

 ©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions?
Please DO link to this page! Digg it! / MAKE!

<A HREF="http://massmind.org/techref/scenix/lib/io/osi2/ir/ir2ser.lst"> scenix lib io osi2 ir ir2ser</A>

Did you find what you needed?

 

Welcome to massmind.org!

 

Welcome to massmind.org!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  .