xlian541426 发表于 2009-4-26 09:00:14

基于STM32的PLC之CPU板划好了

点击此处下载 ourdev_439887.rar(文件大小:133K) (原文件名:PCB1.rar)

xlian541426 发表于 2009-4-26 10:01:18

这块板是用长河机箱的14-52壳体

xlian541426 发表于 2009-4-26 10:18:15

PLC资源分配:
#include "stm32f10x_type.h"
////////////////////////////////////////////////
//#define PLC_RUN       *(u32*)(u32)(IBIT+_PLC_SR*32+4*0)
//#define PLC_ERR       *(u32*)(u32)(IBIT+_PLC_SR*32+4*2)
//M8061        PC硬件出错        STOPD8061          
//6101         RAM出错
//6102        运算出错
//6103        IO总线出错
//6104        护展设备24V
//6105        监视定时器出错
//M8062        PC/PP通信       D8062       RUN
//6201        奇偶出错
//6202        通信字符有误
//6203        通信数据求和有误
//6204        数据格式有误
//6205        指令有误
//M8063 并行链接通信出错 RUN D8063          
//6301        奇偶出错\超出出错\成帧出错
//6302        通信字符有误
//6303        通信数据求和不一致
//6304        数据格式有误
//6305        指令有误
//6306超时出错
//6312并行链接字符出错
//6313并行链接和出错
//6315并行链接格式出错
//M8064 参数出错 STOP D8064          
//6401程序求和不一致
//6402存储的容量设定有误
//6403保存区域设定有误
//6404注释区域设定有误
//6405文件寄存器区设定有误
//6409其它设定有误
//M8065 语法出错 STOP D8065
//6501指令-元件符号-无件号的组合有误
//6502设定值之前元OUT T,OUT C
//6503设定值之后无设定值\应用指令操作数不足
//6504子程序标号编号重复\中断和高速计数器输入重复
//6505        元件号范围出错
//6506使用了未定义的指令
//6507子程序编号定义出错
//6508为断输入(I)定义出错
//6510MC嵌套编号大小有误
//6511中断输入和高速计数器输入重复
//M8066 STOP D8066
//6601LD,LDI的连续使用次数在9次以上
//6602没有LD\LDI指令,没有线圈,LD\LDI和ANB\ORB之间的关系出错,
//      SRET\IRET\
//                STL\RST\MCR\P(指针)\I(中断)EI\DI\SRET\IRET\FOR\NEXT\FEND\END没有与总线连接
//      忘记了MPP
//6603MPS连续使用次数在13次以上
//6604MPS,PRD,MPP关系出错
//6605STL的连续使用次数在9次以上
//      在STL内有MC,MCR,I(中断),P(指针)
//      没有RET
//6606没有P(指针),I(中断)
//      没有SRET,IRET
//      中断,SRET,IRET在主程序中
//      STL,RET,MCR有子程序和中断子程序中
//6607        FOR,NEXT关系出错
//      在FOR-NEXT间有有STL,RET,MC,MCR,IRET,SRET,FEDN,END
//6608MC和MCR关系出错
//      MCR湍有编号
//      MC-MCR间有SRET,IRET,I(中断)
//6610LD,LDI连续使用次数在9次以上
//6611对LD,LDI指令而言,ANB,ORB指令数太多
//6612        对LD,LDI指令而言,ANB,ORB指令数太少
//6613        MPS连续使用次数在12次以上
//6614无MPS
//6615元MPP
//6616MPS-MRD,MPP间的关系有错误
//6617必须从总线开始的指令没有与总线连接(STL,RET,MCR,P,I,DI,EI,FOR,NEXT,SRET,IRET,FEND,END)
//6618只能在主程中使用的指令出现在主程序之外(中断,子程序中)
//6619FOR-NEXT间使用了(STL,RET,MC,MCR,I,IRET)
//6620        FOR-NEXT嵌套溢出
//6621FOR-NEXT间关系错误
//6622没有NEXT
//6623没有MC
//6624没有MCR
//6625STL连续使用9次以上
//6626STL-RET之间有(MC,MCR,I,IRET,SRET)
//6627没有RET指令
//6628在主程序中有不能用的指令(I,SRET,IRET)
//6629无P,I
//6630没用SRET,IRET
//6631SRET位于不能使用的场合
//6632FEND位于不能用的场合
//M8067 运算出错 RUN D8067
//6701CJ,CALL没有跳转地址
//      在END指令后有标号
//      在FOR-NEXT间或子程序间有单独的标号
//6702CALL嵌套次数在6次以上
//6703中断的嵌套在3层以上
//6704FOR-NEXT的嵌套次数在6次以上
//6705应用指令的操作数在在目标元件外
//6706应用指令的操作数地元件号范围和数据溢出
//6707因设有设定文件寄存器参数而存取了文件寄存器
//6708FORM/TO指令出错
//6709其它
//6730取样时间(TS)在目标范围之外
//6732输入滤波常<0或>100
//6733比例<0
//6734积分时间<0
//6735

////////////////////////////////////////////////
//DQBUS 数据总线26条
//      19条数据总线        0x0XXXX RAM
//                      0x1XXXX        ROM
//                      0x2XXXX IO
//                      0x4XXXX EXMODE      
//      reset
//      R/W
//      ready
//      5V
//      24V
//      GND
////////////////////////////////////////////////
//0000        M0_M255
//0100        M255_M511
//0200M512_M767
//0300        M768_M1023
//0400        M1024_M1279
//0500        M1280_M1535
//0600        M1536_M1791
//0700        M1792_M2047
//0800        M2048_M2303
//0900        M2304_M2559
//0A00M2560_M2815
//0B00        M2816_M3071
//0C00Y
//0D00
//0E00M8000
//0F00C0_C255
//1000T0_T255
//1100
//1200X
//1300
//1400S0_S255
//1500S256_S511
//1600S512_SM767
//17E7S798_S999
//1800
//2700
//2800
//3000
//////////////////////////////////////////////////
//0000 lit
//0001 daddr
//ZV02 lit+ZV
//ZV03 daddr+ZV
//00k4 kxbaddr           k=1...8
//ZVk5 kxbaddr+ZVK=1...8
////////////////////////////////////////////////
//0000             NOP
//0001             FEND         
//0002 0000_17E7   LDMYSCT       
//0003 0000_17E7   LDI MYSCT       
//0004 0000_17E7   AND MYSCT       
//0005 0000_17E7   ANI MYSCT
//0006 0000_17E7   ORMYSCT
//0007 0000_17E7   ORI MYSCT
//0008 0000_17E7   LDPXYMTC         
//0009 0000_17E7   LDFXYMTC         
//000A 0000_17E7   ANPXYMTC
//000B 0000_17E7   ANFXYMTC         
//000C 0000_17E7   ORPXYMTC   
//000D 0000_17E7   ORFXYMTC                                                                                                                            4000_4FFERST D0_D1999
//000E 0000_0EFF   PLS MY                                         
//000F 0000_0EFF   PLF MY                                                                                                                                               MCR
//0010 0000_0CFF   OUT MYS
//           1400_17E7   OUT S
//0011 0000_0CFF   SET MY
//   1400_17E7   SET S                                                               
//0012 0000_0CFF   RST MY
//   1400_17E7   RST S                                       
//0013                            ORB                                                                               
//0014                            ANB               
//0015                            MPS
//0016                            MRD
//0017                            MPP
//0018                            INV
//0019



//xx20             RST T0_T255                          
//xx21             RST C0_C199            
//xx22             RST C200_C255            
//0023 1E00_1FFE   RST D8000_D8255
//   4000_47D0   RST D0_D999   
      
//0024 00TT kkkk      OUT T kkkk
//0025 00TT dddd      OUT D kkkk            
//0026 00CC kkkk      OUT C0_C199 kkkk
//0027 00CC dddd      OUT C0_C199 D
//0028 00CC kkkk kkkk OUT C200-C255 kkkkkkkk
//0029 00CC dddd 0000 OUT C200_C255 dddd





////////////////////////////////////////////////
//指令解释
//0002OUT Mx (M1536-M3071)   0002 A800   OUT M1536   
//0003SET Mx (M1536-M3071)   0003 A801   SET M1537
//0004RST Mx (M1536-M3071)   0004 ADFF   RST M3071
//0005OUT S(S0-S999)       0005 8000   OUT S0
//0006SET S(S0-S999)       0006 8000   SET S0
//0007RST S(S0-S999)       0007 8000   RST S0

//0008PLS D.               0008 8500   PLS Y0
//0009PLF D.               0009 8800   PLF M0

//000AMCN                  000A 8000 8864MC N0 M100
//000BMCR N                  000B 8000       MCR N0

//000CRSTC               000C 8E01   RST C1
//      RSTT               000C 8601   RST T1
//000DRSTD               000D 8600 8600RST D0
//000FEND
            
//0010CJ   P               0010 8800 8000CJP0
//                           0010 8804 8000CJP2
//                           0010 8810 8000CJP8
//0012CALL P               0012 8814 8000CALL P10

//0014SRET
//0016IRET
//0018EI
//001ADI
//001CFEND
//001EWDT

//0020FOR S.               0020 8004 8000 FOR K4
//                           0020 A600 8600 FOR D0Z0
//                           0020 9600 8600 FOR D0V0
//                           0020 8400 8204 FOR K1X0
//0022 NEXT
//0024 CMP S1. S2. D.          0024 8064 8000 8628 8400 8400 8008 CMP K100 C20 M0
//0026 ZCP S1. S2. S3. D.      0026 8064 8000 8078 8000 863C 8400 8400 8008 ZCP K100 K120 C30 M0


//0028MOVS. D.             0028 8600 8600 8602 8600 MOV D0   D1
//                           0028 8600 8600 8664 8800 MOV D0   D1000
//                           0028 8600 8400 8600 8600 MOV C0   D0
//                           0028 8064 8000 8602 8400 MOV K100 C0
//                           0028 842C 8809 8664 8600 MOV K4M300 D100
//                        
//0029MOVD S. D.             0029 8600 8600 8000 8000 8608 8600 8000 8000 MOVD D0 D4
//                           0029 8600 8600 8000 8000 8664 8800 8000 8000 MOVD D0 D1000
//                           0029 842C 8809 8000 8000 8600 8600 8000 8000 MOVD K4M300 D0
//002ASMOV                   002A 8602 8600 8004 8000 8002 8000 8604 8600 8003 8000 SMOV D1 K4 K2 D2 K3
//002CCML                  002C 8600 8600 8400 8205 CML D0 K1Y0
//002DDCML                   002D 8600 8600 8000 8000 8400 8205 8000 8000 DCML D0 K1Y0
//002EBMOV                   002E 8600 8600 8614 8600 8005 8000BMOV D0 D10 K5
//0030FMOV                   0030 8000 8000 8600 8600 800A 8000FMOV K0 D0 K10
//0031DFMOV                  0031 8000 8000 8000 8000 8600 8600 8000 8000 800A 8000 8000 8000 DFMOV K0 D0 K10
//0038ADDS1. S2. D.      0038 8600 8600 8602 8600 8600 8800ADD D0 D1 D1000
//0039DADD S1. S2. D.      0039 8600 8600 8000 8000 800A 8000 8000 8000 8602 8600 8000 8000 ADDD D0 K100 D1
//003ASUBS1. S2. D.      003A 8600 8600 8602 8600 8600 8800SUB D0 D1 D1000
//003BDSUB S1. S2. D.      003B 8600 8600 8000 8000 800A 8000 8000 8000 8602 8600 8000 8000 SUBD D0 K100 D1
//003CMULS1. S2. D.      003C 8600 8600 8602 8600 8600 8800MUL D0 D1 D1000
//003DDMUL S1. S2. D.      003D 8600 8600 8000 8000 800A 8000 8000 8000 8602 8600 8000 8000 MULD D0 K100 D1
//003EDIVS1. S2. D.      003E 8600 8600 8602 8600 8600 8800DIV D0 D1 D1000
//003FDDIV S1. S2. D.      003F 8600 8600 8000 8000 800A 8000 8000 8000 8602 8600 8000 8000 DIVD D0 K100 D1
//0040INCD.                0040 8600 8400 INC C0
//0041DINC D.                0041 8600 8400 8000 8000 INCD C0
//0042DECD.                0042 8600 8200 INC T0
//0043DDEC D.                0043 8600 8200 8000 8000 DECD T0

//0060ZRST D1. D2.         0060 8600 8600 86C8 8600ZRST D0-D100
//0080SPDS.n.D.      0080 8400 8004 8064 8000 8600 8600 SPD X0 K100 D0
//0082PLSY S1. S2. D.      0082 8600 8600 8602 8600 8400 8005 PLSY D0 D1 Y0
//0084PWMS.n.D.      0084 8600 8600 8032 8000 8400 8005 PWMD0 K50 Y0
//0086PLSR S1. S2. S3. D.    0086 8600 8600 8064 8000 8600 8800 8400 8005 PLSR D0 K100 D1 Y0   
//008CABSD S1. S2. D. n.   008C 8658 8602 8600 8400 8400 8008 8040 8000 ABSD D300 C0 M0 K4
//008DDABSD S1. S2. D. n.    008D 8658 8602 8000 8000 8600 8400 8000 8000 8400 8008 8000 8000 8040 8000 8000 8000 DABSD D300 C0 M0 K4
//008EINCD S1. S2. D. n.   008E 8658 8602 8600 8400 8400 8008 8004 8000 INCD D300 C0 M0 K4

//0090TTMR D. n.             0090 8658 8602 8000 8000 TTMR D300 K0

//0092STMR S. m. D.          0092 8614 8200 8064 8000 8400 8008 STMR T10 M0

//0094ALTD.                0094 8400 8005ALT Y0

//00C0PID S1. S2. S3. D.   00C0 8600 86008602 8600 86C8 8600 862C 8601 PID D0 D1 D100 D150

//01C2LD   (M1036-M3071)   01C2 A800   LDM1036
//01C3LDI(M1036-M3071)   01C3 A801   LDI M1037
//01C4AND(M1036-M3071)   01C4 A802   AND M1038
//01C5ANI(M1036-M3071)   01C5 A803   ANI M1039
//01C6OR   (M1036-M3071)   01C6 A804   ORM1040
//01C7ORI(M1036-M3071)   01C7 A805   ORI M1041
//01C8
//01C9
//01CALDPS.                01CA 8000   LDPS0
//01CBLDFS.                01CB 8800   LDFM0
//01CCANDP S.                01CC A800   ANDP M1536
//01CDANDF S.                01CD 8F00   ANDF M8000
//01CEORPS.                01CE 8400   ORPX0
//01CFORFS.                01CF 8500   ORFY0


//01D0LD=S1. S2.         01D0 8600 8600 8602 8800LD=D0 D1001
//01D2LD>S1. S2.         01D2 8600 8600 8602 8800LD>D0 D1001
//01D4LD<S1. S2.         01D4 8600 8600 8602 8800LD<D0 D1001
//01D8LD<> S1. S2.         01D8 8600 8600 8602 8800LD<> D0 D1001
//01DALD<= S1. S2.         01DA 8600 8600 8602 8800LD<= D0 D1001
//01DCLD>= S1. S2.         01DC 8600 8600 8602 8800LD>= D0 D1001

//01E0AND=S1. S2.          01E0 8600 8600 8602 8800AND=D0 D1001
//01E2AND>S1. S2.          01E2 8600 8600 8602 8800AND>D0 D1001
//01E4AND<S1. S2.          01E4 8600 8600 8602 8800AND<D0 D1001
//01E8AND<> S1. S2.          01E8 8600 8600 8602 8800AND<> D0 D1001
//01EAAND<= S1. S2.          01EA 8600 8600 8602 8800AND<= D0 D1001
//01ECAND>= S1. S2.          01EC 8600 8600 8602 8800AND>= D0 D1001

//01F0OR=   S1. S2.         01F0 8600 8600 8602 8800OR=D0 D1001
//01F2OR>   S1. S2.         01F2 8600 8600 8602 8800OR>D0 D1001
//01F4OR<   S1. S2.         01F4 8600 8600 8602 8800OR<D0 D1001
//01F8OR<>S1. S2.         01F8 8600 8600 8602 8800OR<> D0 D1001
//01FAOR<=S1. S2.         01FA 8600 8600 8602 8800OR<= D0 D1001
//01FCOR>=S1. S2.         01FC 8600 8600 8602 8800OR>= D0 D1001

//0600_06FFOUT T (T0-T255)      0601 8001 8000OUT (T1-T255) K1
//0E00_0EFFOUT C (C0-C255)      0E01 8001 8000OUT (C1-C199) K1


//1028MOVPS. D.            1028 8464 88088614 8600 MOVP K4M100 D10
//1029DMOVP S. D.            1029 8464 8808 8000 8000 8600 8600 8000 8000 DMOVP K4M100 D0
//1094ALTPD.               1094 8400 8005ALTP Y0(线圈)

//2xxxLD    S.               2000 LD S0
//3xxxLDI   S.               3100 LDI S256
//4xxxAND   S.               4400 AND X0
//5xxxANI   S.               5500 ANI Y0
//6xxxOR    S.               6600 ORT0
//7xxxORI   S.               7800 ORI M0




//B000_B07FP0_P127

//CxxxOUT   D.               C900 OUT M256
//DxxxSET   D.               DA00 SET M512
//ExxxRST   D.               EB00 RST M768

//F000_F3E7STL   S0_S999               
//F7FFRET

//FFF8ANB
//FFF9ORB
//FFFAMPS
//FFFBMPR
//FFFCMPP
//FFFDINV
//FFFFNOP
////////////////////////////////////////////////

/*****************************************/
#define RAM8(x)    (*(u8*)(u32)(x))                                               //字节方式R/WRAM
#define RAM16(x)   (*(u16*)(u32)(x))                                       //半字方式R/WRAM
#define RAM32(x)   (*(u32*)(u32)(x))                                       //字方式R/WRAM


#define RAMS8(x)   (*(s8*)(u32)(x))
#define RAMS16(x)(*(s16*)(u32)(x))
#define RAMS32(x)(*(s32*)(u32)(x))
#define RAMS64(x)(*(s64*)(u32)(x))
/*****************************************/
#define IRAM       (u32)0x20000000
#define IBIT       (u32)0x22000000


#define RAM0       (u32)0x20000000
#define RAM1       (u32)0x20001000
#define RAM2       (u32)0x20002000
#define RAM3       (u32)0x20003000
#define RAM4       (u32)0x20004000
#define RAM5       (u32)0x20005000


///////////////////////////////////////////////////
#define _TMR      (u32)(0x00000A00)                        //1ms时基
#define _TMRF   (u32)(0x00000A02)
#define _D8000F   (u32)(0x00000A04)
#define _D8010F   (u32)(0x00000A06)                        //
#define _D8011F   (u32)(0x00000A08)
#define _D8012F   (u32)(0x00000A0A)


#define _M8011F   (u32)(0x00000A10)
#define _M8012F   (u32)(0x00000A12)
#define _M8013F   (u32)(0x00000A14)
#define _M8014F   (u32)(0x00000A16)

#define _PLCADD   (u32)(0x00000A20)          //程序地址寄存器
#define _PLC_SR          (u32)(0x00000A24)          //PLC状态
#define _PLC_MX          (u32)(0x00000A28)          //PLC小母线
#define _PLC_LD   (u32)(0x00000A2A)          //PLC当前执行状态
#define _PLC_MP   (u32)(0x00000A2C)          //PLC当前执行状态


#define _PLC_MXCNT (u32)(0x00000A30)//MC指令计数
#define _PLC_LDCNT (u32)(0x00000A34)//LD指令计数
#define _PLC_MPCNT (u32)(0x00000A38)//堆栈指令计数
#define _PLC_ORCNT (u32)(0x00000A3A)//堆栈指令计数



///////////////////////////////////////////////////

#define TMR      *(u16*)(u32)(IRAM+_TMR)
#define TMRF   *(u16*)(u32)(IRAM+_TMRF)
#define D8000F   *(u16*)(u32)(IRAM+_D8000F)
#define D8010F   *(u16*)(u32)(IRAM+_D8010F)
#define D8011F   *(u16*)(u32)(IRAM+_D8011F)
#define D8012F   *(u16*)(u32)(IRAM+_D8012F)
#define M8011F   *(u16*)(u32)(IRAM+_M8011F)
#define M8012F   *(u16*)(u32)(IRAM+_M8012F)
#define M8013F   *(u16*)(u32)(IRAM+_M8013F)
#define M8014F   *(u16*)(u32)(IRAM+_M8014F)

#define PLCADD       *(u32*)(u32)(IRAM+_PLCADD)
#define PLCSR       *(u16*)(u32)(IRAM+_PLC_SR)

#define PLC_MX       *(u32*)(u32)(IRAM+_PLC_MX)
#define PLC_LD       *(u32*)(u32)(IRAM+_PLC_LD)
#define PLC_MP       *(u32*)(u32)(IRAM+_PLC_MP)



#define MXCNT       *(vs32*)(u32)(IRAM+_PLC_MXCNT)
#define LDCNT       *(vs32*)(u32)(IRAM+_PLC_LDCNT)
#define MPCNT       *(vs32*)(u32)(IRAM+_PLC_MPCNT)
#define ORCNT       *(vs32*)(u32)(IRAM+_PLC_ORCNT)

///////////////////////////////////////////////
#define PC_RUN       *(u32*)(u32)(IBIT+_PLC_SR*32 + 4*0)
#define EX_RUN       *(u32*)(u32)(IBIT+_PLC_SR*32 + 4*1)
#define PC_DOW       *(u32*)(u32)(IBIT+_PLC_SR*32 + 4*2)
#define PC_ERR       *(u32*)(u32)(IBIT+_PLC_SR*32 + 4*3)

#define COM1_CMD   *(u32*)(u32)(IBIT+_PLC_SR*32 + 4*4)             
#define COM1_REDY    *(u32*)(u32)(IBIT+_PLC_SR*32 + 4*5)   //通信握手信号

#define ENDF         *(u32*)(u32)(IBIT+_PLC_SR*32 + 4*8)   //END指令标志
#define CERF               *(u32*)(u32)(IBIT+_PLC_SR*32 + 4*9)//指令错误

#define OUTF         *(u32*)(u32)(IBIT+_PLC_SR*32 + 4*10)//线圈标志
#define LDF          *(u32*)(u32)(IBIT+_PLC_SR*32 + 4*11)//取母线标志

#define FH         *(u32*)(u32)(IBIT+_PLC_SR*32 + 4*16)//符号位

#define LD0                       *(u32*)(u32)(IBIT+_PLC_LD*32 + 4*0)
#define LD1                       *(u32*)(u32)(IBIT+_PLC_LD*32 + 4*1)

#define MN0                       *(u32*)(u32)(IBIT+_PLC_MX*32 + 4*0)
#define MN1                       *(u32*)(u32)(IBIT+_PLC_MX*32 + 4*1)
#define MN2                       *(u32*)(u32)(IBIT+_PLC_MX*32 + 4*2)
#define MN3                       *(u32*)(u32)(IBIT+_PLC_MX*32 + 4*3)
#define MN4                       *(u32*)(u32)(IBIT+_PLC_MX*32 + 4*4)
#define MN5                       *(u32*)(u32)(IBIT+_PLC_MX*32 + 4*5)
#define MN6                       *(u32*)(u32)(IBIT+_PLC_MX*32 + 4*6)
#define MN7                       *(u32*)(u32)(IBIT+_PLC_MX*32 + 4*7)
#define MN8                       *(u32*)(u32)(IBIT+_PLC_MX*32 + 4*8)

#define MN1F                       *(u32*)(u32)(IBIT+_PLC_MX*32 + 4*16)
#define MN2F                       *(u32*)(u32)(IBIT+_PLC_MX*32 + 4*17)
#define MN3F                       *(u32*)(u32)(IBIT+_PLC_MX*32 + 4*18)
#define MN4F                       *(u32*)(u32)(IBIT+_PLC_MX*32 + 4*19)
#define MN5F                       *(u32*)(u32)(IBIT+_PLC_MX*32 + 4*20)
#define MN6F                       *(u32*)(u32)(IBIT+_PLC_MX*32 + 4*21)
#define MN7F                       *(u32*)(u32)(IBIT+_PLC_MX*32 + 4*22)
#define MN8F                       *(u32*)(u32)(IBIT+_PLC_MX*32 + 4*23)

///////////////////////////////////////////////


/*************************************************/
#define W0L               *(u16*)(u32)(0x20000B00)
#define W0H               *(u16*)(u32)(0x20000B02)
#define W1L               *(u16*)(u32)(0x20000B04)
#define W1H               *(u16*)(u32)(0x20000B06)
#define W2L               *(u16*)(u32)(0x20000B08)
#define W2H               *(u16*)(u32)(0x20000B0A)
#define W3L               *(u16*)(u32)(0x20000B0C)
#define W3H               *(u16*)(u32)(0x20000B0E)
#define W4L               *(u16*)(u32)(0x20000B10)
#define W4H               *(u16*)(u32)(0x20000B12)
#define W5L               *(u16*)(u32)(0x20000B14)
#define W5H               *(u16*)(u32)(0x20000B16)
#define W6L               *(u16*)(u32)(0x20000B18)
#define W6H               *(u16*)(u32)(0x20000B1A)
#define W7L               *(u16*)(u32)(0x20000B1C)
#define W7H               *(u16*)(u32)(0x20000B1E)

#define W0               *(u32*)(u32)(0x20000B00)
#define W1               *(u32*)(u32)(0x20000B04)
#define W2               *(u32*)(u32)(0x20000B08)
#define W3               *(u32*)(u32)(0x20000B0C)
#define W4               *(u32*)(u32)(0x20000B10)
#define W5               *(u32*)(u32)(0x20000B14)
#define W6               *(u32*)(u32)(0x20000B18)
#define W7               *(u32*)(u32)(0x20000B1C)

#define L0               *(u64*)(u32)(0x20000B20)
#define L2               *(u64*)(u32)(0x20000B28)
#define L4               *(u64*)(u32)(0x20000B30)
#define L6               *(u64*)(u32)(0x20000B38)

#define L0L               *(u32*)(u32)(0x20000B20)
#define L2L               *(u32*)(u32)(0x20000B28)
#define L4L               *(u32*)(u32)(0x20000B30)
#define L6L               *(u32*)(u32)(0x20000B38)

#define L0H               *(u32*)(u32)(0x20000B24)
#define L2H               *(u32*)(u32)(0x20000B2C)
#define L4H               *(u32*)(u32)(0x20000B34)
#define L6H               *(u32*)(u32)(0x20000B3C)

#define LS0               *(s64*)(u32)(0x20000B20)

#define LS2               *(s64*)(u32)(0x20000B28)

#define LS4               *(s64*)(u32)(0x20000B30)

#define LS6               *(s64*)(u32)(0x20000B38)


#define S0               *(s32*)(u32)(0x20000B20)
#define S1               *(s32*)(u32)(0x20000B24)
#define S2               *(s32*)(u32)(0x20000B28)
#define S3               *(s32*)(u32)(0x20000B2C)
#define S4               *(s32*)(u32)(0x20000B30)
#define S5               *(s32*)(u32)(0x20000B34)
#define S6               *(s32*)(u32)(0x20000B38)
#define S7               *(s32*)(u32)(0x20000B3C)

#define S0L               *(s16*)(u32)(0x20000B20)
#define S1L               *(s16*)(u32)(0x20000B24)
#define S2L               *(s16*)(u32)(0x20000B28)
#define S3L               *(s16*)(u32)(0x20000B2C)
#define S4L               *(s16*)(u32)(0x20000B30)
#define S5L               *(s16*)(u32)(0x20000B34)
#define S6L               *(s16*)(u32)(0x20000B38)
#define S7L               *(s16*)(u32)(0x20000B3C)

#define S0H               *(s16*)(u32)(0x20000B22)
#define S1H               *(s16*)(u32)(0x20000B26)
#define S2H               *(s16*)(u32)(0x20000B2A)
#define S3H               *(s16*)(u32)(0x20000B2E)
#define S4H               *(s16*)(u32)(0x20000B32)
#define S5H               *(s16*)(u32)(0x20000B36)
#define S6H               *(s16*)(u32)(0x20000B3A)
#define S7H               *(s16*)(u32)(0x20000B3E)


#define CD0               *(u32*)(u32)(0x20000B60)
#define CD1               *(u32*)(u32)(0x20000B64)
#define CD2               *(u32*)(u32)(0x20000B68)
#define CD3               *(u32*)(u32)(0x20000B6C)
#define CD4               *(u32*)(u32)(0x20000B70)
#define CD5               *(u32*)(u32)(0x20000B74)
#define CD6               *(u32*)(u32)(0x20000B78)
#define CD7               *(u32*)(u32)(0x20000B7C)

#define MD0      *(u64*)(u32)(0x20000B80)
#define MD1      *(u64*)(u32)(0x20000B88)
#define MD2      *(u64*)(u32)(0x20000B90)
#define MD3      *(u64*)(u32)(0x20000B98)


#define _RXCNT               (u32)(0x00000F00)
#define _CRC               (u32)(0x00000F04)
#define _CHR               (u32)(0x00000F08)
#define _CHT               (u32)(0x00000F08)
#define _AAAA               (u32)(0x00000F14)
#define _XX                       (u32)(0x00000F18)
#define _YY                       (u32)(0x00000F1C)
#define _IR0               (u32)(0x00000F20)
#define _IR1               (u32)(0x00000F24)
#define _IR2               (u32)(0x00000F28)
#define _IR3               (u32)(0x00000F2C)

#define _rxbuf       (u32)(0x00000F30)          //接收缓冲区
#define _rxsize      (u32)(0x00000F30+200)

#define rx_buf       (u32)(IRAM+_rxbuf)
#define rx_size      (u32)(IRAM+_rxsize)


#define RXCNT      *(u32*)(u32)(IRAM+_RXCNT)   //接收计数器
#define CRC          *(u8*)(u32)(IRAM+_CRC)             //和校验
#define CHR          *(u8*)(u32)(IRAM+_CHR)             //接收发送字符
#define CHT          *(u8*)(u32)(IRAM+_CHT)             //接收发送字符

#define AAAA         *(u32*)(u32)(IRAM+_AAAA)
#define XX         *(u32*)(u32)(IRAM+_XX)
#define YY         *(u32*)(u32)(IRAM+_XX)
#define IR0          *(u32*)(u32)(IRAM+_IR0)
#define IR1                     *(u32*)(u32)(IRAM+_IR1)
#define IR2                     *(u32*)(u32)(IRAM+_IR2)
#define IR3                     *(u32*)(u32)(IRAM+_IR3)










/************************内存分配*************************/

/************************内存映像地址**********************/
#define _PM0      (u32)(0x00001000)          //M0-M3071
#define _PM256                (u32)(0x00001020)
#define _PM512                (u32)(0x00001040)
#define _PM768                (u32)(0x00001060)
#define _PM1024                (u32)(0x00001080)
#define _PM1280                (u32)(0x000010A0)
#define _PM1536                (u32)(0x000010C0)
#define _PM1792                (u32)(0x000010E0)
#define _PM2048                (u32)(0x00001100)
#define _PM2304                (u32)(0x00001120)
#define _PM2560                (u32)(0x00001140)
#define _PM2816                (u32)(0x00001160)

#define _PY0      (u32)(0x00001180)                //Y
#define _PM8000   (u32)(0x000011C0)                //M8000-M8255
#define _PCF      (u32)(0x000011E0)                //计数器触点
#define _PTF      (u32)(0x00001200)                //定时器触点T0-T255
#define _PX0      (u32)(0x00001240)                //X
#define _PS0      (u32)(0x00001280)                //
#define _PS256      (u32)(0x000012A0)                //
#define _PS512      (u32)(0x000012C0)                //
#define _PS768      (u32)(0x000012E0)                //

#define _PCR      (u32)(0x000014E0)                //计数器线圈   CS0-CS255
#define _PTR      (u32)(0x00001500)                //定时器线圈   TS0-TS255

#define _PF0      (u32)(0x00001600)       //接点状态存储 F0-F7999        (存储地址2600-29FF)

#define _CC0      (u32)(0x00001A00)          //16位计数现在值
#define _CC200      (u32)(0x00001C00)                //32位计数现在值
#define _PD8000   (u32)(0x00001E00)          //D8000-D8255

#define _TCNT       (u32)(0x00002000)          //定时器现在值
#define _TFCNT      (u32)(0x00002200)          //定时计数

#define _RAMJKC   (u32)(0x00002400)                //监控命令
#define _RAMJKD   (u32)(0x00002790)                //监控值
///////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////
#define _PD0      (u32)(0x00004000)          //D0-D2048

//////////////////////位段映像地址///////////////////////////
#define _SM0         (u32)(_PM0*32)
#define _SM256       (u32)(_PM256*32)
#define _SM512       (u32)(_PM512*32)
#define _SM768       (u32)(_PM768*32)
#define _SM1024      (u32)(_PM1024*32)
#define _SM1280      (u32)(_PM1280*32)
#define _SM1536      (u32)(_PM1536*32)
#define _SM1792      (u32)(_PM1792*32)
#define _SM2048      (u32)(_PM2048*32)
#define _SM2304      (u32)(_PM2304*32)
#define _SM2560      (u32)(_PM2560*32)
#define _SM2816      (u32)(_PM2816*32)
#define _SY          (u32)(_PY0*32)
#define _SM8000      (u32)(_PM8000*32)
#define _SCF                  (u32)(_PCF*32)
#define _STF                  (u32)(_PTF*32)
#define _SX                  (u32)(_PX0*32)
#define _SS                       (u32)(_PS0*32)
#define _SCR               (u32)(_PCR*32)
#define _SS0               (u32)(_PS0*32)
#define _SS256               (u32)(_PS256*32)
#define _SS512               (u32)(_PS512*32)
#define _SS768               (u32)(_PS768*32)
#define _STR               (u32)(_PTR*32)
#define _SF0         (u32)(_PF0*32)

/****************************************************/
////////////////////////内存实际地址/////////////////////////
//内存地址
#define PM0      (u32)(IRAM +_PM0)                           //M0-M3071
#define PY0      (u32)(IRAM +_PY0)                           //
#define PM8000   (u32)(IRAM +_PM8000)                     //M8000-M8255
#define PCF      (u32)(IRAM +_PCF)                     //计数器触点
#define PTF      (u32)(IRAM +_PTF)                     //定时器触点T0-T255
#define PX0      (u32)(IRAM +_PX0)                     //
#define PS0      (u32)(IRAM +_PS0)                     //S0-S999
#define PCR      (u32)(IRAM +_PCR)                     //计数器线圈   CS0-CS255
#define PTR      (u32)(IRAM +_PTR)                     //定时器线圈   TS0-TS255

#define PF0      (u32)(IRAM +_PF0)                           //状态存储区

#define CC0      (u32)(IRAM +_CC0)                   //16位计数现在值
#define CC200      (u32)(IRAM +_CC200)             //32位计数现在值
#define PD8000   (u32)(IRAM +_PD8000)
#define TCNT       (u32)(IRAM +_TCNT)             //定时器现在值
#define TCNTF           (u32)(IRAM +_TFCNT)                   //定时计数

#define RAMJKC   (u32)(IRAM +_RAMJKC)             //监控命令
#define RAMJKD   (u32)(IRAM +_RAMJKD)             //监控值

#define TCNTD(x)   *(u16*)(TCNT+x*2)
#define TFCNTD(x)*(u16*)(TFCNT+x*2)

#define CCD0(x)    *(u16*)(CC0+x*2)
#define CCD200(x)*(u32*)(CC200+x*4)

////////////////////////////////////////////////////////

////////////////////////////////////////////////////////

#define PD0      (u32)(IRAM+_PD0)                   //D0-D2047

/******************位段地址*************************/
#define SM0          (u32)(IBIT+ _SM0)      //M0-M255
#define SM256      (u32)(IBIT+ _SM256)    //M256-M511      
#define SM512      (u32)(IBIT+ _SM512)          //M512-M767
#define SM768      (u32)(IBIT+ _SM768)          //M768-M1023
#define SM1024       (u32)(IBIT+ _SM1024)          //M1024-M1279
#define SM1280       (u32)(IBIT+ _SM1280)          //M1280-M1535
#define SM1536       (u32)(IBIT+ _SM1536)          //M1536-M1791
#define SM1792       (u32)(IBIT+ _SM1792)          //M1792-M2047
#define SM2048       (u32)(IBIT+ _SM2048)          //M2048-M2303
#define SM2304       (u32)(IBIT+ _SM2304)          //M2304-M2559
#define SM2560       (u32)(IBIT+ _SM2560)          //M2560-M2815
#define SM2816       (u32)(IBIT+ _SM2816)          //M2816-M3071
#define SY         (u32)(IBIT + _SY)              //Y000-Y007...Y260-Y267
#define SM8000       (u32)(IBIT + _SM8000)    //M8000-M8255
#define SCF          (u32)(IBIT + _SCF)              //C0-C255
#define STF          (u32)(IBIT + _STF)              //T0-T255
#define SX         (u32)(IBIT + _SX)          //X000-X007...X260-X267
#define SS0          (u32)(IBIT + _SS0)          //S0-S255
#define SS256      (u32)(IBIT + _SS256)          //S256-S511
#define SS512      (u32)(IBIT + _SS512)          //S512-S767
#define SS768      (u32)(IBIT + _SS768)          //S768-S1023

#define SCR          (u32)(IBIT + _SCR)          //CN0-CN255
#define STR          (u32)(IBIT + _STR)          //TN0-TN255
#define SF0                 (u32)(IBIT + _SF0)          //F0-F7999




#define FSM0(x)      *(u32*)(u32)(SM0+(x<<2))
#define FSM256(x)      *(u32*)(u32)(SM256+(x<<2))
#define FSM512(x)      *(u32*)(u32)(SM256+(x<<2))
#define FSM768(x)      *(u32*)(u32)(SM768+(x<<2))
#define FSM1024(x)   *(u32*)(u32)(SM1024+(x<<2))
#define FSM1280(x)   *(u32*)(u32)(SM1280+(x<<2))
#define FSM1536(x)   *(u32*)(u32)(SM1536+(x<<2))
#define FSM1792(x)   *(u32*)(u32)(SM1792+(x<<2))
#define FSM2048(x)   *(u32*)(u32)(SM2048+(x<<2))
#define FSM2304(x)   *(u32*)(u32)(SM2304+(x<<2))
#define FSM2560(x)   *(u32*)(u32)(SM2560+(x<<2))
#define FSM2816(x)   *(u32*)(u32)(SM2816+(x<<2))
#define FSY(x)         *(u32*)(u32)(SY+(x<<2))
#define FSM8000(x)   *(u32*)(u32)(SM8000+(x<<2))
#define FSCF(x)      *(u32*)(u32)(SCF+(x<<2))
#define FSTF(x)      *(u32*)(u32)(STF+(x<<2))
#define FSX(x)         *(u32*)(u32)(SX+(x<<2))
#define FSS0(x)      *(u32*)(u32)(SS0+(x<<2))
#define FSS256(x)      *(u32*)(u32)(SS256+(x<<2))
#define FSS512(x)      *(u32*)(u32)(SS512+(x<<2))
#define FSS768(x)      *(u32*)(u32)(SS768+(x<<2))
#define FSCR(x)      *(u32*)(u32)(SCR+(x<<2))
#define FSTR(x)      *(u32*)(u32)(STR+(x<<2))
#define FSF(x)                    *(u32*)(u32)(SF0+((x&0x00007FFF)<<2))

/***************M8000-M8255**************/
#define M8000        (*(u32*)(u32)(SM8000+0*4))
#define M8001        (*(u32*)(u32)(SM8000+1*4))
#define M8002        (*(u32*)(u32)(SM8000+2*4))
#define M8003        (*(u32*)(u32)(SM8000+3*4))
#define M8004        (*(u32*)(u32)(SM8000+4*4))
#define M8005        (*(u32*)(u32)(SM8000+5*4))
#define M8006        (*(u32*)(u32)(SM8000+6*4))
#define M8007        (*(u32*)(u32)(SM8000+7*4))
#define M8008        (*(u32*)(u32)(SM8000+8*4))
#define M8009        (*(u32*)(u32)(SM8000+9*4))
#define M8010        (*(u32*)(u32)(SM8000+10*4))
#define M8011        (*(u32*)(u32)(SM8000+11*4))
#define M8012        (*(u32*)(u32)(SM8000+12*4))
#define M8013        (*(u32*)(u32)(SM8000+13*4))
#define M8014        (*(u32*)(u32)(SM8000+14*4))
#define M8015        (*(u32*)(u32)(SM8000+15*4))
#define M8016        (*(u32*)(u32)(SM8000+16*4))
#define M8017        (*(u32*)(u32)(SM8000+17*4))
#define M8018        (*(u32*)(u32)(SM8000+18*4))
#define M8019        (*(u32*)(u32)(SM8000+19*4))
#define M8020        (*(u32*)(u32)(SM8000+20*4))
#define M8021        (*(u32*)(u32)(SM8000+21*4))
#define M8022        (*(u32*)(u32)(SM8000+22*4))
#define M8023        (*(u32*)(u32)(SM8000+23*4))
#define M8024        (*(u32*)(u32)(SM8000+24*4))
#define M8025        (*(u32*)(u32)(SM8000+25*4))
#define M8026        (*(u32*)(u32)(SM8000+26*4))
#define M8027        (*(u32*)(u32)(SM8000+27*4))
#define M8028        (*(u32*)(u32)(SM8000+28*4))
#define M8029        (*(u32*)(u32)(SM8000+29*4))
#define M8030        (*(u32*)(u32)(SM8000+30*4))
#define M8031        (*(u32*)(u32)(SM8000+31*4))
#define M8032        (*(u32*)(u32)(SM8000+32*4))
#define M8033        (*(u32*)(u32)(SM8000+33*4))
#define M8034        (*(u32*)(u32)(SM8000+34*4))
#define M8035        (*(u32*)(u32)(SM8000+35*4))
#define M8036        (*(u32*)(u32)(SM8000+36*4))
#define M8037        (*(u32*)(u32)(SM8000+37*4))
#define M8038        (*(u32*)(u32)(SM8000+38*4))
#define M8039        (*(u32*)(u32)(SM8000+39*4))
#define M8040        (*(u32*)(u32)(SM8000+40*4))
#define M8041        (*(u32*)(u32)(SM8000+41*4))
#define M8042        (*(u32*)(u32)(SM8000+42*4))
#define M8043        (*(u32*)(u32)(SM8000+43*4))
#define M8044        (*(u32*)(u32)(SM8000+44*4))
#define M8045        (*(u32*)(u32)(SM8000+45*4))
#define M8046        (*(u32*)(u32)(SM8000+46*4))
#define M8047        (*(u32*)(u32)(SM8000+47*4))
#define M8048        (*(u32*)(u32)(SM8000+48*4))
#define M8049        (*(u32*)(u32)(SM8000+49*4))
#define M8050        (*(u32*)(u32)(SM8000+50*4))
#define M8051        (*(u32*)(u32)(SM8000+51*4))
#define M8052        (*(u32*)(u32)(SM8000+52*4))
#define M8053        (*(u32*)(u32)(SM8000+53*4))
#define M8054        (*(u32*)(u32)(SM8000+54*4))
#define M8055        (*(u32*)(u32)(SM8000+55*4))
#define M8056        (*(u32*)(u32)(SM8000+56*4))
#define M8057        (*(u32*)(u32)(SM8000+57*4))
#define M8058        (*(u32*)(u32)(SM8000+58*4))
#define M8059        (*(u32*)(u32)(SM8000+59*4))
#define M8060        (*(u32*)(u32)(SM8000+60*4))
#define M8061        (*(u32*)(u32)(SM8000+61*4))
#define M8062        (*(u32*)(u32)(SM8000+62*4))
#define M8063        (*(u32*)(u32)(SM8000+63*4))
#define M8064        (*(u32*)(u32)(SM8000+64*4))
#define M8065        (*(u32*)(u32)(SM8000+65*4))
#define M8066        (*(u32*)(u32)(SM8000+66*4))
#define M8067        (*(u32*)(u32)(SM8000+67*4))
#define M8068        (*(u32*)(u32)(SM8000+68*4))
#define M8069        (*(u32*)(u32)(SM8000+69*4))
#define M8070        (*(u32*)(u32)(SM8000+70*4))
#define M8071        (*(u32*)(u32)(SM8000+71*4))
#define M8072        (*(u32*)(u32)(SM8000+72*4))
#define M8073        (*(u32*)(u32)(SM8000+73*4))
#define M8074        (*(u32*)(u32)(SM8000+74*4))
#define M8075        (*(u32*)(u32)(SM8000+75*4))
#define M8076        (*(u32*)(u32)(SM8000+76*4))
#define M8077        (*(u32*)(u32)(SM8000+77*4))
#define M8078        (*(u32*)(u32)(SM8000+78*4))
#define M8079        (*(u32*)(u32)(SM8000+79*4))
#define M8080        (*(u32*)(u32)(SM8000+80*4))
#define M8081        (*(u32*)(u32)(SM8000+81*4))
#define M8082        (*(u32*)(u32)(SM8000+82*4))
#define M8083        (*(u32*)(u32)(SM8000+83*4))
#define M8084        (*(u32*)(u32)(SM8000+84*4))
#define M8085        (*(u32*)(u32)(SM8000+85*4))
#define M8086        (*(u32*)(u32)(SM8000+86*4))
#define M8087        (*(u32*)(u32)(SM8000+87*4))
#define M8088        (*(u32*)(u32)(SM8000+88*4))
#define M8089        (*(u32*)(u32)(SM8000+89*4))
#define M8090        (*(u32*)(u32)(SM8000+90*4))
#define M8091        (*(u32*)(u32)(SM8000+91*4))
#define M8092        (*(u32*)(u32)(SM8000+92*4))
#define M8093        (*(u32*)(u32)(SM8000+93*4))
#define M8094        (*(u32*)(u32)(SM8000+94*4))
#define M8095        (*(u32*)(u32)(SM8000+95*4))
#define M8096        (*(u32*)(u32)(SM8000+96*4))
#define M8097        (*(u32*)(u32)(SM8000+97*4))
#define M8098        (*(u32*)(u32)(SM8000+98*4))
#define M8099        (*(u32*)(u32)(SM8000+99*4))
#define M8100        (*(u32*)(u32)(SM8000+100*4))
#define M8101        (*(u32*)(u32)(SM8000+101*4))
#define M8102        (*(u32*)(u32)(SM8000+102*4))
#define M8103        (*(u32*)(u32)(SM8000+103*4))
#define M8104        (*(u32*)(u32)(SM8000+104*4))
#define M8105        (*(u32*)(u32)(SM8000+105*4))
#define M8106        (*(u32*)(u32)(SM8000+106*4))
#define M8107        (*(u32*)(u32)(SM8000+107*4))
#define M8108        (*(u32*)(u32)(SM8000+108*4))
#define M8109        (*(u32*)(u32)(SM8000+109*4))
#define M8110        (*(u32*)(u32)(SM8000+110*4))
#define M8111        (*(u32*)(u32)(SM8000+111*4))
#define M8112        (*(u32*)(u32)(SM8000+112*4))
#define M8113        (*(u32*)(u32)(SM8000+113*4))
#define M8114        (*(u32*)(u32)(SM8000+114*4))
#define M8115        (*(u32*)(u32)(SM8000+115*4))
#define M8116        (*(u32*)(u32)(SM8000+116*4))
#define M8117        (*(u32*)(u32)(SM8000+117*4))
#define M8118        (*(u32*)(u32)(SM8000+118*4))
#define M8119        (*(u32*)(u32)(SM8000+119*4))
#define M8120        (*(u32*)(u32)(SM8000+120*4))
#define M8121        (*(u32*)(u32)(SM8000+121*4))
#define M8122        (*(u32*)(u32)(SM8000+122*4))
#define M8123        (*(u32*)(u32)(SM8000+123*4))
#define M8124        (*(u32*)(u32)(SM8000+124*4))
#define M8125        (*(u32*)(u32)(SM8000+125*4))
#define M8126        (*(u32*)(u32)(SM8000+126*4))
#define M8127        (*(u32*)(u32)(SM8000+127*4))
#define M8128        (*(u32*)(u32)(SM8000+128*4))
#define M8129        (*(u32*)(u32)(SM8000+129*4))
#define M8130        (*(u32*)(u32)(SM8000+130*4))
#define M8131        (*(u32*)(u32)(SM8000+131*4))
#define M8132        (*(u32*)(u32)(SM8000+132*4))
#define M8133        (*(u32*)(u32)(SM8000+133*4))
#define M8134        (*(u32*)(u32)(SM8000+134*4))
#define M8135        (*(u32*)(u32)(SM8000+135*4))
#define M8136        (*(u32*)(u32)(SM8000+136*4))
#define M8137        (*(u32*)(u32)(SM8000+137*4))
#define M8138        (*(u32*)(u32)(SM8000+138*4))
#define M8139        (*(u32*)(u32)(SM8000+139*4))
#define M8140        (*(u32*)(u32)(SM8000+140*4))
#define M8141        (*(u32*)(u32)(SM8000+141*4))
#define M8142        (*(u32*)(u32)(SM8000+142*4))
#define M8143        (*(u32*)(u32)(SM8000+143*4))
#define M8144        (*(u32*)(u32)(SM8000+144*4))
#define M8145        (*(u32*)(u32)(SM8000+145*4))
#define M8146        (*(u32*)(u32)(SM8000+146*4))
#define M8147        (*(u32*)(u32)(SM8000+147*4))
#define M8148        (*(u32*)(u32)(SM8000+148*4))
#define M8149        (*(u32*)(u32)(SM8000+149*4))
#define M8150        (*(u32*)(u32)(SM8000+150*4))
#define M8151        (*(u32*)(u32)(SM8000+151*4))
#define M8152        (*(u32*)(u32)(SM8000+152*4))
#define M8153        (*(u32*)(u32)(SM8000+153*4))
#define M8154        (*(u32*)(u32)(SM8000+154*4))
#define M8155        (*(u32*)(u32)(SM8000+155*4))
#define M8156        (*(u32*)(u32)(SM8000+156*4))
#define M8157        (*(u32*)(u32)(SM8000+157*4))
#define M8158        (*(u32*)(u32)(SM8000+158*4))
#define M8159        (*(u32*)(u32)(SM8000+159*4))
#define M8160        (*(u32*)(u32)(SM8000+160*4))
#define M8161        (*(u32*)(u32)(SM8000+161*4))
#define M8162        (*(u32*)(u32)(SM8000+162*4))
#define M8163        (*(u32*)(u32)(SM8000+163*4))
#define M8164        (*(u32*)(u32)(SM8000+164*4))
#define M8165        (*(u32*)(u32)(SM8000+165*4))
#define M8166        (*(u32*)(u32)(SM8000+166*4))
#define M8167        (*(u32*)(u32)(SM8000+167*4))
#define M8168        (*(u32*)(u32)(SM8000+168*4))
#define M8169        (*(u32*)(u32)(SM8000+169*4))
#define M8170        (*(u32*)(u32)(SM8000+170*4))
#define M8171        (*(u32*)(u32)(SM8000+171*4))
#define M8172        (*(u32*)(u32)(SM8000+172*4))
#define M8173        (*(u32*)(u32)(SM8000+173*4))
#define M8174        (*(u32*)(u32)(SM8000+174*4))
#define M8175        (*(u32*)(u32)(SM8000+175*4))
#define M8176        (*(u32*)(u32)(SM8000+176*4))
#define M8177        (*(u32*)(u32)(SM8000+177*4))
#define M8178        (*(u32*)(u32)(SM8000+178*4))
#define M8179        (*(u32*)(u32)(SM8000+179*4))
#define M8180        (*(u32*)(u32)(SM8000+180*4))
#define M8181        (*(u32*)(u32)(SM8000+181*4))
#define M8182        (*(u32*)(u32)(SM8000+182*4))
#define M8183        (*(u32*)(u32)(SM8000+183*4))
#define M8184        (*(u32*)(u32)(SM8000+184*4))
#define M8185        (*(u32*)(u32)(SM8000+185*4))
#define M8186        (*(u32*)(u32)(SM8000+186*4))
#define M8187        (*(u32*)(u32)(SM8000+187*4))
#define M8188        (*(u32*)(u32)(SM8000+188*4))
#define M8189        (*(u32*)(u32)(SM8000+189*4))
#define M8190        (*(u32*)(u32)(SM8000+190*4))
#define M8191        (*(u32*)(u32)(SM8000+191*4))
#define M8192        (*(u32*)(u32)(SM8000+192*4))
#define M8193        (*(u32*)(u32)(SM8000+193*4))
#define M8194        (*(u32*)(u32)(SM8000+194*4))
#define M8195        (*(u32*)(u32)(SM8000+195*4))
#define M8196        (*(u32*)(u32)(SM8000+196*4))
#define M8197        (*(u32*)(u32)(SM8000+197*4))
#define M8198        (*(u32*)(u32)(SM8000+198*4))
#define M8199        (*(u32*)(u32)(SM8000+199*4))
#define M8200        (*(u32*)(u32)(SM8000+200*4))
#define M8201        (*(u32*)(u32)(SM8000+201*4))
#define M8202        (*(u32*)(u32)(SM8000+202*4))
#define M8203        (*(u32*)(u32)(SM8000+203*4))
#define M8204        (*(u32*)(u32)(SM8000+204*4))
#define M8205        (*(u32*)(u32)(SM8000+205*4))
#define M8206        (*(u32*)(u32)(SM8000+206*4))
#define M8207        (*(u32*)(u32)(SM8000+207*4))
#define M8208        (*(u32*)(u32)(SM8000+208*4))
#define M8209        (*(u32*)(u32)(SM8000+209*4))
#define M8210        (*(u32*)(u32)(SM8000+210*4))
#define M8211        (*(u32*)(u32)(SM8000+211*4))
#define M8212        (*(u32*)(u32)(SM8000+212*4))
#define M8213        (*(u32*)(u32)(SM8000+213*4))
#define M8214        (*(u32*)(u32)(SM8000+214*4))
#define M8215        (*(u32*)(u32)(SM8000+215*4))
#define M8216        (*(u32*)(u32)(SM8000+216*4))
#define M8217        (*(u32*)(u32)(SM8000+217*4))
#define M8218        (*(u32*)(u32)(SM8000+218*4))
#define M8219        (*(u32*)(u32)(SM8000+219*4))
#define M8220        (*(u32*)(u32)(SM8000+220*4))
#define M8221        (*(u32*)(u32)(SM8000+221*4))
#define M8222        (*(u32*)(u32)(SM8000+222*4))
#define M8223        (*(u32*)(u32)(SM8000+223*4))
#define M8224        (*(u32*)(u32)(SM8000+224*4))
#define M8225        (*(u32*)(u32)(SM8000+225*4))
#define M8226        (*(u32*)(u32)(SM8000+226*4))
#define M8227        (*(u32*)(u32)(SM8000+227*4))
#define M8228        (*(u32*)(u32)(SM8000+228*4))
#define M8229        (*(u32*)(u32)(SM8000+229*4))
#define M8230        (*(u32*)(u32)(SM8000+230*4))
#define M8231        (*(u32*)(u32)(SM8000+231*4))
#define M8232        (*(u32*)(u32)(SM8000+232*4))
#define M8233        (*(u32*)(u32)(SM8000+233*4))
#define M8234        (*(u32*)(u32)(SM8000+234*4))
#define M8235        (*(u32*)(u32)(SM8000+235*4))
#define M8236        (*(u32*)(u32)(SM8000+236*4))
#define M8237        (*(u32*)(u32)(SM8000+237*4))
#define M8238        (*(u32*)(u32)(SM8000+238*4))
#define M8239        (*(u32*)(u32)(SM8000+239*4))
#define M8240        (*(u32*)(u32)(SM8000+240*4))
#define M8241        (*(u32*)(u32)(SM8000+241*4))
#define M8242        (*(u32*)(u32)(SM8000+242*4))
#define M8243        (*(u32*)(u32)(SM8000+243*4))
#define M8244        (*(u32*)(u32)(SM8000+244*4))
#define M8245        (*(u32*)(u32)(SM8000+245*4))
#define M8246        (*(u32*)(u32)(SM8000+246*4))
#define M8247        (*(u32*)(u32)(SM8000+247*4))
#define M8248        (*(u32*)(u32)(SM8000+248*4))
#define M8249        (*(u32*)(u32)(SM8000+249*4))
#define M8250        (*(u32*)(u32)(SM8000+250*4))
#define M8251        (*(u32*)(u32)(SM8000+251*4))
#define M8252        (*(u32*)(u32)(SM8000+252*4))
#define M8253        (*(u32*)(u32)(SM8000+253*4))
#define M8254        (*(u32*)(u32)(SM8000+254*4))
#define M8255        (*(u32*)(u32)(SM8000+255*4))

/*************D8000-D8255****************/   
#define D8000   (*(u16*)(u32)(PD8000+2*0))
#define D8001   (*(u16*)(u32)(PD8000+2*1))
#define D8002   (*(u16*)(u32)(PD8000+2*2))
#define D8003   (*(u16*)(u32)(PD8000+2*3))
#define D8004   (*(u16*)(u32)(PD8000+2*4))
#define D8005   (*(u16*)(u32)(PD8000+2*5))
#define D8006   (*(u16*)(u32)(PD8000+2*6))
#define D8007   (*(u16*)(u32)(PD8000+2*7))
#define D8008   (*(u16*)(u32)(PD8000+2*8))
#define D8009   (*(u16*)(u32)(PD8000+2*9))
#define D8010   (*(u16*)(u32)(PD8000+2*10))
#define D8011   (*(u16*)(u32)(PD8000+2*11))
#define D8012   (*(u16*)(u32)(PD8000+2*12))
#define D8013   (*(u16*)(u32)(PD8000+2*13))
#define D8014   (*(u16*)(u32)(PD8000+2*14))
#define D8015   (*(u16*)(u32)(PD8000+2*15))
#define D8016   (*(u16*)(u32)(PD8000+2*16))
#define D8017   (*(u16*)(u32)(PD8000+2*17))
#define D8018   (*(u16*)(u32)(PD8000+2*18))
#define D8019   (*(u16*)(u32)(PD8000+2*19))
#define D8020   (*(u16*)(u32)(PD8000+2*20))
#define D8021   (*(u16*)(u32)(PD8000+2*21))
#define D8022   (*(u16*)(u32)(PD8000+2*22))
#define D8023   (*(u16*)(u32)(PD8000+2*23))
#define D8024   (*(u16*)(u32)(PD8000+2*24))
#define D8025   (*(u16*)(u32)(PD8000+2*25))
#define D8026   (*(u16*)(u32)(PD8000+2*26))
#define D8027   (*(u16*)(u32)(PD8000+2*27))
#define D8028   (*(u16*)(u32)(PD8000+2*28))
#define D8029   (*(u16*)(u32)(PD8000+2*29))
#define D8030   (*(u16*)(u32)(PD8000+2*30))
#define D8031   (*(u16*)(u32)(PD8000+2*31))
#define D8032   (*(u16*)(u32)(PD8000+2*32))
#define D8033   (*(u16*)(u32)(PD8000+2*33))
#define D8034   (*(u16*)(u32)(PD8000+2*34))
#define D8035   (*(u16*)(u32)(PD8000+2*35))
#define D8036   (*(u16*)(u32)(PD8000+2*36))
#define D8037   (*(u16*)(u32)(PD8000+2*37))
#define D8038   (*(u16*)(u32)(PD8000+2*38))
#define D8039   (*(u16*)(u32)(PD8000+2*39))
#define D8040   (*(u16*)(u32)(PD8000+2*40))
#define D8041   (*(u16*)(u32)(PD8000+2*41))
#define D8042   (*(u16*)(u32)(PD8000+2*42))
#define D8043   (*(u16*)(u32)(PD8000+2*43))
#define D8044   (*(u16*)(u32)(PD8000+2*44))
#define D8045   (*(u16*)(u32)(PD8000+2*45))
#define D8046   (*(u16*)(u32)(PD8000+2*46))
#define D8047   (*(u16*)(u32)(PD8000+2*47))
#define D8048   (*(u16*)(u32)(PD8000+2*48))
#define D8049   (*(u16*)(u32)(PD8000+2*49))
#define D8050   (*(u16*)(u32)(PD8000+2*50))
#define D8051   (*(u16*)(u32)(PD8000+2*51))
#define D8052   (*(u16*)(u32)(PD8000+2*52))
#define D8053   (*(u16*)(u32)(PD8000+2*53))
#define D8054   (*(u16*)(u32)(PD8000+2*54))
#define D8055   (*(u16*)(u32)(PD8000+2*55))
#define D8056   (*(u16*)(u32)(PD8000+2*56))
#define D8057   (*(u16*)(u32)(PD8000+2*57))
#define D8058   (*(u16*)(u32)(PD8000+2*58))
#define D8059   (*(u16*)(u32)(PD8000+2*59))
#define D8060   (*(u16*)(u32)(PD8000+2*60))
#define D8061   (*(u16*)(u32)(PD8000+2*61))
#define D8062   (*(u16*)(u32)(PD8000+2*62))
#define D8063   (*(u16*)(u32)(PD8000+2*63))
#define D8064   (*(u16*)(u32)(PD8000+2*64))
#define D8065   (*(u16*)(u32)(PD8000+2*65))
#define D8066   (*(u16*)(u32)(PD8000+2*66))
#define D8067   (*(u16*)(u32)(PD8000+2*67))
#define D8068   (*(u16*)(u32)(PD8000+2*68))
#define D8069   (*(u16*)(u32)(PD8000+2*69))
#define D8070   (*(u16*)(u32)(PD8000+2*70))
#define D8071   (*(u16*)(u32)(PD8000+2*71))
#define D8072   (*(u16*)(u32)(PD8000+2*72))
#define D8073   (*(u16*)(u32)(PD8000+2*73))
#define D8074   (*(u16*)(u32)(PD8000+2*74))
#define D8075   (*(u16*)(u32)(PD8000+2*75))
#define D8076   (*(u16*)(u32)(PD8000+2*76))
#define D8077   (*(u16*)(u32)(PD8000+2*77))
#define D8078   (*(u16*)(u32)(PD8000+2*78))
#define D8079   (*(u16*)(u32)(PD8000+2*79))
#define D8080   (*(u16*)(u32)(PD8000+2*80))
#define D8081   (*(u16*)(u32)(PD8000+2*81))
#define D8082   (*(u16*)(u32)(PD8000+2*82))
#define D8083   (*(u16*)(u32)(PD8000+2*83))
#define D8084   (*(u16*)(u32)(PD8000+2*84))
#define D8085   (*(u16*)(u32)(PD8000+2*85))
#define D8086   (*(u16*)(u32)(PD8000+2*86))
#define D8087   (*(u16*)(u32)(PD8000+2*87))
#define D8088   (*(u16*)(u32)(PD8000+2*88))
#define D8089   (*(u16*)(u32)(PD8000+2*89))
#define D8090   (*(u16*)(u32)(PD8000+2*90))
#define D8091   (*(u16*)(u32)(PD8000+2*91))
#define D8092   (*(u16*)(u32)(PD8000+2*92))
#define D8093   (*(u16*)(u32)(PD8000+2*93))
#define D8094   (*(u16*)(u32)(PD8000+2*94))
#define D8095   (*(u16*)(u32)(PD8000+2*95))
#define D8096   (*(u16*)(u32)(PD8000+2*96))
#define D8097   (*(u16*)(u32)(PD8000+2*97))
#define D8098   (*(u16*)(u32)(PD8000+2*98))
#define D8099   (*(u16*)(u32)(PD8000+2*99))
#define D8100   (*(u16*)(u32)(PD8000+2*100))
#define D8101   (*(u16*)(u32)(PD8000+2*101))
#define D8102   (*(u16*)(u32)(PD8000+2*102))
#define D8103   (*(u16*)(u32)(PD8000+2*103))
#define D8104   (*(u16*)(u32)(PD8000+2*104))
#define D8105   (*(u16*)(u32)(PD8000+2*105))
#define D8106   (*(u16*)(u32)(PD8000+2*106))
#define D8107   (*(u16*)(u32)(PD8000+2*107))
#define D8108   (*(u16*)(u32)(PD8000+2*108))
#define D8109   (*(u16*)(u32)(PD8000+2*109))
#define D8110   (*(u16*)(u32)(PD8000+2*110))
#define D8111   (*(u16*)(u32)(PD8000+2*111))
#define D8112   (*(u16*)(u32)(PD8000+2*112))
#define D8113   (*(u16*)(u32)(PD8000+2*113))
#define D8114   (*(u16*)(u32)(PD8000+2*114))
#define D8115   (*(u16*)(u32)(PD8000+2*115))
#define D8116   (*(u16*)(u32)(PD8000+2*116))
#define D8117   (*(u16*)(u32)(PD8000+2*117))
#define D8118   (*(u16*)(u32)(PD8000+2*118))
#define D8119   (*(u16*)(u32)(PD8000+2*119))
#define D8120   (*(u16*)(u32)(PD8000+2*120))
#define D8121   (*(u16*)(u32)(PD8000+2*121))
#define D8122   (*(u16*)(u32)(PD8000+2*122))
#define D8123   (*(u16*)(u32)(PD8000+2*123))
#define D8124   (*(u16*)(u32)(PD8000+2*124))
#define D8125   (*(u16*)(u32)(PD8000+2*125))
#define D8126   (*(u16*)(u32)(PD8000+2*126))
#define D8127   (*(u16*)(u32)(PD8000+2*127))
#define D8128   (*(u16*)(u32)(PD8000+2*128))
#define D8129   (*(u16*)(u32)(PD8000+2*129))
#define D8130   (*(u16*)(u32)(PD8000+2*130))
#define D8131   (*(u16*)(u32)(PD8000+2*131))
#define D8132   (*(u16*)(u32)(PD8000+2*132))
#define D8133   (*(u16*)(u32)(PD8000+2*133))
#define D8134   (*(u16*)(u32)(PD8000+2*134))
#define D8135   (*(u16*)(u32)(PD8000+2*135))
#define D8136   (*(u16*)(u32)(PD8000+2*136))
#define D8137   (*(u16*)(u32)(PD8000+2*137))
#define D8138   (*(u16*)(u32)(PD8000+2*138))
#define D8139   (*(u16*)(u32)(PD8000+2*139))
#define D8140   (*(u16*)(u32)(PD8000+2*140))
#define D8141   (*(u16*)(u32)(PD8000+2*141))
#define D8142   (*(u16*)(u32)(PD8000+2*142))
#define D8143   (*(u16*)(u32)(PD8000+2*143))
#define D8144   (*(u16*)(u32)(PD8000+2*144))
#define D8145   (*(u16*)(u32)(PD8000+2*145))
#define D8146   (*(u16*)(u32)(PD8000+2*146))
#define D8147   (*(u16*)(u32)(PD8000+2*147))
#define D8148   (*(u16*)(u32)(PD8000+2*148))
#define D8149   (*(u16*)(u32)(PD8000+2*149))
#define D8150   (*(u16*)(u32)(PD8000+2*150))
#define D8151   (*(u16*)(u32)(PD8000+2*151))
#define D8152   (*(u16*)(u32)(PD8000+2*152))
#define D8153   (*(u16*)(u32)(PD8000+2*153))
#define D8154   (*(u16*)(u32)(PD8000+2*154))
#define D8155   (*(u16*)(u32)(PD8000+2*155))
#define D8156   (*(u16*)(u32)(PD8000+2*156))
#define D8157   (*(u16*)(u32)(PD8000+2*157))
#define D8158   (*(u16*)(u32)(PD8000+2*158))
#define D8159   (*(u16*)(u32)(PD8000+2*159))
#define D8160   (*(u16*)(u32)(PD8000+2*160))
#define D8161   (*(u16*)(u32)(PD8000+2*161))
#define D8162   (*(u16*)(u32)(PD8000+2*162))
#define D8163   (*(u16*)(u32)(PD8000+2*163))
#define D8164   (*(u16*)(u32)(PD8000+2*164))
#define D8165   (*(u16*)(u32)(PD8000+2*165))
#define D8166   (*(u16*)(u32)(PD8000+2*166))
#define D8167   (*(u16*)(u32)(PD8000+2*167))
#define D8168   (*(u16*)(u32)(PD8000+2*168))
#define D8169   (*(u16*)(u32)(PD8000+2*169))
#define D8170   (*(u16*)(u32)(PD8000+2*170))
#define D8171   (*(u16*)(u32)(PD8000+2*171))
#define D8172   (*(u16*)(u32)(PD8000+2*172))
#define D8173   (*(u16*)(u32)(PD8000+2*173))
#define D8174   (*(u16*)(u32)(PD8000+2*174))
#define D8175   (*(u16*)(u32)(PD8000+2*175))
#define D8176   (*(u16*)(u32)(PD8000+2*176))
#define D8177   (*(u16*)(u32)(PD8000+2*177))
#define D8178   (*(u16*)(u32)(PD8000+2*178))
#define D8179   (*(u16*)(u32)(PD8000+2*179))
#define D8180   (*(u16*)(u32)(PD8000+2*180))
#define D8181   (*(u16*)(u32)(PD8000+2*181))
#define D8182   (*(u16*)(u32)(PD8000+2*182))
#define D8183   (*(u16*)(u32)(PD8000+2*183))
#define D8184   (*(u16*)(u32)(PD8000+2*184))
#define D8185   (*(u16*)(u32)(PD8000+2*185))
#define D8186   (*(u16*)(u32)(PD8000+2*186))
#define D8187   (*(u16*)(u32)(PD8000+2*187))
#define D8188   (*(u16*)(u32)(PD8000+2*188))
#define D8189   (*(u16*)(u32)(PD8000+2*189))
#define D8190   (*(u16*)(u32)(PD8000+2*190))
#define D8191   (*(u16*)(u32)(PD8000+2*191))
#define D8192   (*(u16*)(u32)(PD8000+2*192))
#define D8193   (*(u16*)(u32)(PD8000+2*193))
#define D8194   (*(u16*)(u32)(PD8000+2*194))
#define D8195   (*(u16*)(u32)(PD8000+2*195))
#define D8196   (*(u16*)(u32)(PD8000+2*196))
#define D8197   (*(u16*)(u32)(PD8000+2*197))
#define D8198   (*(u16*)(u32)(PD8000+2*198))
#define D8199   (*(u16*)(u32)(PD8000+2*199))
#define D8200   (*(u16*)(u32)(PD8000+2*200))
#define D8201   (*(u16*)(u32)(PD8000+2*201))
#define D8202   (*(u16*)(u32)(PD8000+2*202))
#define D8203   (*(u16*)(u32)(PD8000+2*203))
#define D8204   (*(u16*)(u32)(PD8000+2*204))
#define D8205   (*(u16*)(u32)(PD8000+2*205))
#define D8206   (*(u16*)(u32)(PD8000+2*206))
#define D8207   (*(u16*)(u32)(PD8000+2*207))
#define D8208   (*(u16*)(u32)(PD8000+2*208))
#define D8209   (*(u16*)(u32)(PD8000+2*209))
#define D8210   (*(u16*)(u32)(PD8000+2*210))
#define D8211   (*(u16*)(u32)(PD8000+2*211))
#define D8212   (*(u16*)(u32)(PD8000+2*212))
#define D8213   (*(u16*)(u32)(PD8000+2*213))
#define D8214   (*(u16*)(u32)(PD8000+2*214))
#define D8215   (*(u16*)(u32)(PD8000+2*215))
#define D8216   (*(u16*)(u32)(PD8000+2*216))
#define D8217   (*(u16*)(u32)(PD8000+2*217))
#define D8218   (*(u16*)(u32)(PD8000+2*218))
#define D8219   (*(u16*)(u32)(PD8000+2*219))
#define D8220   (*(u16*)(u32)(PD8000+2*220))
#define D8221   (*(u16*)(u32)(PD8000+2*221))
#define D8222   (*(u16*)(u32)(PD8000+2*222))
#define D8223   (*(u16*)(u32)(PD8000+2*223))
#define D8224   (*(u16*)(u32)(PD8000+2*224))
#define D8225   (*(u16*)(u32)(PD8000+2*225))
#define D8226   (*(u16*)(u32)(PD8000+2*226))
#define D8227   (*(u16*)(u32)(PD8000+2*227))
#define D8228   (*(u16*)(u32)(PD8000+2*228))
#define D8229   (*(u16*)(u32)(PD8000+2*229))
#define D8230   (*(u16*)(u32)(PD8000+2*230))
#define D8231   (*(u16*)(u32)(PD8000+2*231))
#define D8232   (*(u16*)(u32)(PD8000+2*232))
#define D8233   (*(u16*)(u32)(PD8000+2*233))
#define D8234   (*(u16*)(u32)(PD8000+2*234))
#define D8235   (*(u16*)(u32)(PD8000+2*235))
#define D8236   (*(u16*)(u32)(PD8000+2*236))
#define D8237   (*(u16*)(u32)(PD8000+2*237))
#define D8238   (*(u16*)(u32)(PD8000+2*238))
#define D8239   (*(u16*)(u32)(PD8000+2*239))
#define D8240   (*(u16*)(u32)(PD8000+2*240))
#define D8241   (*(u16*)(u32)(PD8000+2*241))
#define D8242   (*(u16*)(u32)(PD8000+2*242))
#define D8243   (*(u16*)(u32)(PD8000+2*243))
#define D8244   (*(u16*)(u32)(PD8000+2*244))
#define D8245   (*(u16*)(u32)(PD8000+2*245))
#define D8246   (*(u16*)(u32)(PD8000+2*246))
#define D8247   (*(u16*)(u32)(PD8000+2*247))
#define D8248   (*(u16*)(u32)(PD8000+2*248))
#define D8249   (*(u16*)(u32)(PD8000+2*249))
#define D8250   (*(u16*)(u32)(PD8000+2*250))
#define D8251   (*(u16*)(u32)(PD8000+2*251))
#define D8252   (*(u16*)(u32)(PD8000+2*252))
#define D8253   (*(u16*)(u32)(PD8000+2*253))
#define D8254   (*(u16*)(u32)(PD8000+2*254))
#define D8255   (*(u16*)(u32)(PD8000+2*255))

xlian541426 发表于 2009-4-26 10:23:29

//通讯程序
uart1_scan()
{
if(COM1_REDY)
       {
                NVIC->Enable &= ~(1 << (USART1_IRQChannel & 0x1F));
                COM1_CMD = 1;
                if(RAM8(rx_buf+1)==0x30)if(RAM8(rx_buf+8)==ETX)       
                  {
                      if(RAM8(rx_buf+2)==0x30)
                                        { //2'0 0AAA XX'3'SS'
                                          //2'dd ... dd/3'SS'
                                                AAAA = RAM1 + (hex<<8)+(hex<<4)+ (hex);
                                                XX = AAAA + (hex<<4)+ (hex<<0);
                                                if(XX<RAM2)
                                                {
                                                  UART_SEND(STX);
                                                  CRC = 3;
                        for(;AAAA < XX;)
                                                        {       
                                                                CHT=asc[(RAM8(AAAA) & 0xF0)>>4];
                                                                CRC += CHT;
                                                                UART_SEND(CHT);
                                                                CHT=asc[(RAM8(AAAA) & 0x0F)];
                                                                CRC += CHT;
                                                                UART_SEND(CHT);
                                                                AAAA += 1;
                                                       }
                                                  UART_SEND(ETX);
                                                  UART_SEND(asc[(CRC&0xF0)>>4]);
                                                  UART_SEND(asc[(CRC&0x0F)>>0]);
                                                  COM1_CMD = 0;
                                                }
                                        }
                      if(RAM8(rx_buf+2)==0x31)
                                        { //2'0 1AAA XX'3'SS'
                                          //2'dd ... dd/3'SS'
                                                AAAA = RAM4 + (hex<<8)+(hex<<4)+ (hex);
                                                XX = AAAA + (hex<<4)+ (hex<<0);
                                                if(XX<RAM5)
                                                {
                                                  UART_SEND(STX);
                                                 CRC = 3;
                        for(;AAAA < XX;)
                                                          {       
                                                          if(AAAA < RAM5)
                                                                {
                                                                  CHT=asc[(RAM8(AAAA) & 0xF0)>>4];
                                                                  CRC += CHT;
                                                                  UART_SEND(CHT);
                                                                  CHT=asc[(RAM8(AAAA) & 0x0F)];
                                                                  CRC += CHT;
                                                                  UART_SEND(CHT);
                                                                }else{
                                                                     CRC += 0x30;
                                                                     UART_SEND(0x30);
                                                                           CRC += 0x30;
                                                                     UART_SEND(0x30);
                                                                     }
                                                           AAAA += 1;
                                                       }
                                                  UART_SEND(ETX);
                                                  UART_SEND(asc[(CRC&0xF0)>>4]);
                                                  UART_SEND(asc[(CRC&0x0F)>>0]);
                                                  COM1_CMD = 0;
                                                }
                                        }
                        }
      if(RAM8(rx_buf+1)==0x31)
                  {
                          if(RAM8(rx_buf+2)==0x30)
                                        { //2'1 0AAA XX DD ... DD'3'SS'
                                                AAAA =RAM1+(hex<<8)+(hex<<4)+ (hex<<0);
                                                XX   =AAAA+(hex<<4)+ (hex<<0);        
                                                if(XX<RAM2)
                                                {
                                                  IR0=rx_buf + 8;
                                                  for(;AAAA<XX;)
                                                        {
                                                                RAM8(AAAA)= (hex<<4)+(hex<<0);
                                                                IR0 += 2;
                                                                AAAA+=1;
                                                        }
                                                  UART_SEND(ACK);
                                                 COM1_CMD = 0;
                                                }
                                        }
            if(RAM8(rx_buf+2)==0x31)
                                        { //2'1 1AAA XX DD ... DD'3'SS'
                                                AAAA =RAM1+(hex<<8)+(hex<<4)+ (hex<<0);
                                                XX   =AAAA+(hex<<4)+ (hex<<0);
                                                if(XX<RAM5)
                                                {
                                                  IR0=rx_buf +8;
                                                  for(;AAAA<XX;)
                                                        {
                                                          if(AAAA<RAM5)       
                                                                   {
                                                                     RAM8(AAAA)= (hex<<4)+(hex<<0);
                                                                   }
                                                                IR0 += 2;
                                                                AAAA+=1;
                                                        }
                                                  UART_SEND(ACK);
                                                  COM1_CMD = 0;
                                                }
                                        }
                        }
         if(RAM8(rx_buf+1)==0x37)if(RAM8(rx_buf+6)==ETX)
                                        { //2'7 AAAA'3'SS'
                                                AAAA =(hex<<12)+(hex<<8)+(hex<<4)+ (hex<<0);
                                                RAM8(0x22020000+(AAAA<<2))=0;
                                                UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }
         if(RAM8(rx_buf+1)==0x38)if(RAM8(rx_buf+6)==ETX)
                                        { //2'8 AAAA'3'SS' //ACK
                                                AAAA =(hex<<12)+(hex<<8)+(hex<<4)+ (hex<<0);
                                                RAM8(0x22020000+(AAAA<<2))=1;
                                                UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }
               if(RAM8(rx_buf+1)==0x42)if(RAM8(rx_buf+2)==3)if(RAM8(rx_buf+3)==0x34)if(RAM8(rx_buf+4)==0x35)
                                        { //2'B'3'45'
                                                UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }
               if(RAM8(rx_buf+1)==0x45)
                  {
               if(RAM8(rx_buf+2)==0x30)if(RAM8(rx_buf+10)==ETX)
                              {
                                     if(RAM8(rx_buf+3)==0x30)
                                        {
                                            if(RAM8(rx_buf+4)==0x30)       
                                                    { //2'E0 00AAA XX'3'SS'
                                                            AAAA= RAM1+(hex<<8)+(hex<<4)+(hex);
                                                            XX = AAAA + (hex<<4)+(hex);
                                                            UART_SEND(STX);
                                                            CRC=3;
                                                            for(;AAAA<XX;)
                                                                   {
                                                                           CHT = asc[(RAM8(AAAA)&0xF0)>>4];
                                                                           CRC += CHT;
                                                                           UART_SEND(CHT);
                                                                           CHT = asc[(RAM8(AAAA)&0x0F)];
                                                                           CRC += CHT;
                                                                           UART_SEND(CHT);
                                                                           AAAA += 1;
                                                                   }
                                                           UART_SEND(ETX);
                                                           UART_SEND(asc[(CRC >>4)& 0x0F]);
                                                           UART_SEND(asc);
                                                           COM1_CMD = 0;
                                                   }
                           if(RAM8(rx_buf+4)==0x31)
                                          { //2'E0 01AAA XX'3'SS'
                                                  AAAA= RAM2+(hex<<8)+(hex<<4)+(hex);
                                                  XX = AAAA + (hex<<4)+(hex);
                                                  UART_SEND(STX);
                                                  CRC=3;
                                                  for(;AAAA<XX;)
                                                          {       
                                                                CHT = asc[(RAM8(AAAA)&0xF0)>>4];
                                                                CRC += CHT;
                                                                UART_SEND(CHT);
                                                                CHT = asc[(RAM8(AAAA)&0x0F)];
                                                                CRC += CHT;
                                                                UART_SEND(CHT);
                                                                AAAA += 1;
                                                             }
                                                  UART_SEND(ETX);
                                                  UART_SEND(asc[(CRC >>4)& 0x0F]);
                                                  UART_SEND(asc);
                                                  COM1_CMD = 0;
                                           }
                           if(RAM8(rx_buf+4)==0x32)
                                        { //2'E0 02AAA XX'3'SS'
                                                AAAA= RAM3+(hex<<8)+(hex<<4)+(hex);
                                                XX = AAAA + (hex<<4)+(hex);
                                                UART_SEND(STX);
                                                CRC=3;
                                                for(;AAAA<XX;)
                                                        {       
                                                                if(AAAA < 0x20003C00)
                                                                   {
                                                                     CHT = asc[(RAM8(AAAA)&0xF0)>>4];
                                                                     CRC += CHT;
                                                                     UART_SEND(CHT);
                                                                     CHT = asc[(RAM8(AAAA)&0x0F)];
                                                                     CRC += CHT;
                                                                     UART_SEND(CHR);
                                                                     AAAA += 1;
                                                                   }else{
                                                                     CRC += 0x30;
                                                                     UART_SEND(0x30);
                                                                           CRC += 0x30;
                                                                     UART_SEND(0x30);
                                                                     }
                                                                AAAA += 1;
                                                        }
                                                UART_SEND(ETX);
                                                UART_SEND(asc[(CRC >>4)& 0x0F]);
                                                UART_SEND(asc);
                                                COM1_CMD = 0;
                                        }
                         if(RAM8(rx_buf+4)==0x33)
                                        { //2'E0 03AAA XX'3'SS'
                                                AAAA= (hex<<8)+(hex<<4)+(hex);
                                                XX = AAAA + (hex<<4)+(hex);
                                                UART_SEND(STX);
                                                CRC=3;
                                                for(;AAAA<XX;)
                                                        {       
                                                                if(AAAA < XX)
                                                                   {
                                                                     CRC += 0x30;
                                                                     UART_SEND(0x30);
                                                                       CRC += 0x30;
                                                                     UART_SEND(0x30);
                                                                  }
                                                                AAAA += 1;
                                                        }
                                                UART_SEND(ETX);
                                                UART_SEND(asc[(CRC >>4)& 0x0F]);
                                                UART_SEND(asc);
                                                COM1_CMD = 0;
                                        }
                         if(RAM8(rx_buf+4)==0x34)
                                        { //2'E0 04AAA XX'3'SS'
                                                AAAA= RAM4+(hex<<8)+(hex<<4)+(hex);
                                                XX = AAAA + (hex<<4)+(hex);
                                                UART_SEND(STX);
                                                CRC=3;
                                                for(;AAAA<XX;)
                                                        {       
                                                                if(AAAA < RAM5)
                                                                   {
                                                                     CHT = asc[(RAM8(AAAA)&0xF0)>>4];
                                                                     CRC += CHT;
                                                                     UART_SEND(CHT);
                                                                     CHT = asc[(RAM8(AAAA)&0x0F)];
                                                                     CRC += CHT;
                                                                     UART_SEND(CHT);
                                                                     AAAA += 1;
                                                                   }else{
                                                                     CRC += 0x30;
                                                                     UART_SEND(0x30);
                                                                           CRC += 0x30;
                                                                     UART_SEND(0x30);
                                                                     }
                                                                AAAA += 1;
                                                        }
                                                UART_SEND(ETX);
                                                UART_SEND(asc[(CRC >>4)& 0x0F]);
                                                UART_SEND(asc);
                                                COM1_CMD = 0;
                                        }
                         if((RAM8(rx_buf+4)==0x35)||\
                                  (RAM8(rx_buf+4)==0x36)||\
                                        (RAM8(rx_buf+4)==0x37))
                                        { //2'E0 05AAA_07AAA XX'3'SS'
                                                AAAA= (hex<<8)+(hex<<4)+(hex);
                                                XX = AAAA + (hex<<4)+(hex);
                                                UART_SEND(STX);
                                                CRC=3;
                                                for(;AAAA<XX;)
                                                        {       
                                                                CRC += 0x30;
                                                                UART_SEND(0x30);
                                                                CRC += 0x30;
                                                                UART_SEND(0x30);
                                                                AAAA += 1;
                                                        }
                                                UART_SEND(ETX);
                                                UART_SEND(asc[(CRC >>4)& 0x0F]);
                                                UART_SEND(asc);
                                                COM1_CMD = 0;
                                        }
                                }
                   if(RAM8(rx_buf+3)==0x31)
                                        { //2'E0 1AAAA XX'3'SS'
                                                AAAA= 0x08010000+(hex<<12)+(hex<<8)+(hex<<4)+(hex);
                                                XX = (hex<<4)+(hex);
                                                if(AAAA<0x0801805C)
                                                {
                                                  IR0 = 0x20000E00 + (AAAA & 0x000000FF);
                                                  IR1 = IR0 + XX;
                                               }else{
                                                         IR0 = AAAA;
                                                               IR1 = IR0 + XX;
                                                     }

                                               UART_SEND(STX);
                                               CRC=3;
                                                for(;IR0<IR1;)
                                                        {       
                                                                CHT = asc[(RAM8(IR0)&0xF0)>>4];
                                                                CRC += CHT;
                                                                UART_SEND(CHT);
                                                                CHT = asc[(RAM8(IR0)&0x0F)];
                                                                CRC += CHT;
                                                                UART_SEND(CHT);
                                                                IR0 += 1;
                                                        }
                                                UART_SEND(ETX);
                                                UART_SEND(asc[(CRC >>4)& 0x0F]);
                                                UART_SEND(asc);
                                                COM1_CMD = 0;
                                        }
                        }
                if(RAM8(rx_buf+2)==0x31)if(RAM8(rx_buf+3)==0x30)
                  {
                     if(RAM8(rx_buf+4)==0x30)
                                        {//2'E10 0AAA XX DD ... DD'3'SS'
                                                AAAA = RAM1+(hex<<8)+(hex<<4)+(hex);
                                                XX = AAAA + (hex<<4)+(hex);
                                          IR0 = rx_buf +10;
                                                for(;AAAA<XX;)
                                                        {
                                                                RAM8(AAAA) = (hex<<4)+hex;
                                                                IR0 += 2;
                                                                AAAA += 1;
                                                        }
                        UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }
                      if(RAM8(rx_buf+4)==0x31)
                                        {//2'E10 1AAA XX DD ... DD'3'SS'
                                                AAAA = RAM2+(hex<<8)+(hex<<4)+(hex);
                                                XX = AAAA + (hex<<4)+(hex);
                                          IR0 = rx_buf +10;
                                                for(;AAAA<XX;)
                                                        {
                                                                RAM8(AAAA) = (hex<<4)+hex;
                                                                IR0 += 2;
                                                                AAAA += 1;
                                                        }
                        UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }
                  if(RAM8(rx_buf+4)==0x32)
                                        {//2'E10 2AAA XX DD ... DD'3'SS'
                                                AAAA = RAM3+(hex<<8)+(hex<<4)+(hex);
                                                XX = AAAA + (hex<<4)+(hex);
                                          IR0 = rx_buf +10;
                                                for(;AAAA<XX;)
                                                        {
                                                          if(AAAA<0x20003C00)
                                                                {
                                                                   RAM8(AAAA) = (hex<<4)+hex;
                                                                }
                                                                IR0 += 2;
                                                                AAAA += 1;
                                                        }
                        UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }
                   if(RAM8(rx_buf+4)==0x33)
                                        {//2'E10 3AAA XX DD ... DD'3'SS'
                                                UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }
                   if(RAM8(rx_buf+4)==0x34)
                                        {//2'E10 4AAA XX DD ... DD'3'SS'
                                                AAAA = RAM4+(hex<<8)+(hex<<4)+(hex);
                                                XX = AAAA + (hex<<4)+(hex);
                                          IR0 = rx_buf +10;
                                                for(;AAAA<XX;)
                                                        {
                                                          if(AAAA<RAM5)
                                                                {
                                                                   RAM8(AAAA) = (hex<<4)+hex;
                                                                }
                                                                IR0 += 2;
                                                                AAAA += 1;
                                                        }
                        UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }
                     if((RAM8(rx_buf+4)==0x35)||\
                          (RAM8(rx_buf+4)==0x36)||\
                                (RAM8(rx_buf+4)==0x37))
                                        {//2'E10 5AAA_7AAA XX DD ... DD'3'SS'
                                                AAAA = (hex<<8)+(hex<<4)+(hex);
                                                XX = AAAA + (hex<<4)+(hex);
                        UART_SEND(ACK);
                                        }
                        }
          if(RAM8(rx_buf+2)==0x31)if(RAM8(rx_buf+3)==0x31)
                                        {//2'E11 AAAA XX DD ... DD'3'SS'
                                                AAAA = 0x08010000+(hex<<12)+(hex<<8)+(hex<<4)+(hex);
                                                XX = (hex<<4)+(hex);
                                           if(AAAA==0x08018000)
                                              {
                                                  IR0 = 0x20000E08;
                                                        IR1 = 0x20000E30;
                                                        IR2 = rx_buf + 10 +16;
                                                        for(;IR0<IR1;)
                                                        {
                                                          RAM8(IR0)=(hex<<4)+(hex);
                                                          IR0 += 1;
                                                          IR2 += 2;
                                                        }
                                                  }
                                           if(AAAA==0x08018008)
                                              {
                                                  IR0 = 0x20000E08;
                                                        IR1 = 0x20000E10;
                                                        IR2 = rx_buf + 10;
                                                        for(;IR0<IR1;)
                                                        {
                                                          RAM8(IR0)=(hex<<4)+(hex);
                                                          IR0 += 1;
                                                          IR2 += 2;
                                                        }
                                                  }
                                           if(AAAA>= 0x0801805C)
                                                   {
                                                     PC_DOW = 1;
                                                     if(AAAA== 0x0801805C)
                                                           {
                                                           IR0 = 0x08018000;
                                                           for(;IR0<0x0801C000;)
                                                           {
                                                              FLASH_ErasePage(IR0);
                                                                    IR0 += 0x00000400;
                                                           }
                                                           }
                                                                IR1 = 0x20003C00;
                                                                IR2 = 0x20003C00 + XX;
                                                                IR3 = rx_buf + 10;
                                                                for( ;IR1<IR2;)
                                                                {
                                                                   RAM8(IR1) = (hex<<4)+(hex);
                                                           IR1 += 1;
                                                           IR3 += 2;
                                                               }

                                                               IR0 = AAAA;
                                                               IR1 = 0x20003C00;
                                                               IR2 = 0x20003C00 + XX;
                                                               for(;IR1<IR2;)
                                                               {
                                                                   FLASH_ProgramWord(IR0,RAM16(IR1));
                                                                   IR0+=2;
                                                                   IR1+=2;
                                                               }
                                                     }
                        UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }
          if(RAM8(rx_buf+2)==36)
                      {
                         if(RAM8(rx_buf+3)==30)
                                        { //2'E60'3'AE'
                                                UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }
               if(RAM8(rx_buf+3)==31)
                                        { //2'E61'3'AF'
                                                UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }                                                               
               if(RAM8(rx_buf+3)==32)
                                        {//2'E62'3'B0'
                                                IR0 = 0x40001000;
                                                IR1 = 0x40001600;
                                                for(;IR0<IR1;)
                                                        {
                                                                RAM32(IR0) = 0;
                                                                IR0 += 4;
                                                        }
                                                UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }                                                               
                if(RAM8(rx_buf+3)==33)
                                        { //2'E64'3'B1'
                                                UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }
                if(RAM8(rx_buf+3)==34)
                                        { //2'E63'3'B1'
                                                IR0 = RAM4;
                                                IR1 = RAM5;
                                                for(;IR0<IR1;)
                                                        {
                                                                RAM32(IR0) = 0;
                                                                IR0 += 4;
                                                        }
                                                UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }
                                }
          if(RAM8(rx_buf+2)==0x37)if(RAM8(rx_buf+7)==ETX)
                                        {//2'E7 AAAA'3'SS'
                                                AAAA =         (hex<<12)+(hex<<8)+(hex<<4)+(hex);
                                                RAM32(0x22020000+(AAAA<<2)) = 1;
                                                UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }                                                               
          if(RAM8(rx_buf+2)==0x38)if(RAM8(rx_buf+7)==ETX)
                                        {//2'E8 AAAA'3'SS'
                                                AAAA =         (hex<<12)+(hex<<8)+(hex<<4)+(hex);
                                                RAM32(0x22020000+(AAAA<<2)) = 0;
                                                UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }
                  if(RAM8(rx_buf+1)==0x41)if(RAM8(rx_buf+2)==0x30)
                     {
                           PC_DOW =0;
                           UART_SEND(ACK);
                           COM1_CMD = 0;
                       }
               }
           if(RAM8(rx_buf+1)==0x46)if(RAM8(rx_buf+10)==ETX)       
                {
                 if(RAM8(rx_buf+2)==0x30)
                                        {//2'F0M AAAA XX'3'SS'
                                          IR0 =hex;
                                                AAAA =         (hex<<12)+(hex<<8)+(hex<<4)+(hex);
                                                XX = (hex<<4)+(hex);
                                                UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }
                 if(RAM8(rx_buf+2)==0x31)
                                        {//2'F1M AAAA XX'3'SS'
                                          IR0 =hex;
                                                AAAA =         (hex<<12)+(hex<<8)+(hex<<4)+(hex);
                                                XX = (hex<<4)+(hex);
                                                UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }
                   }
                if(COM1_CMD)
                            {
                                                   UART_SEND(NCK);
                                                M8062 = 1;                   //PC/PP通信出错
                                    D8062 = 6205;                   //指令有误
                                                COM1_CMD = 0;
                                        }
      NVIC->Enable |= (1 << (USART1_IRQChannel & 0x1F));
                RXCNT = 0;
                COM1_REDY = 0;       
        }
}

JK_SCAN()
{
//扫描监控区

W0 = 0x20002790;
W1 = 0x20002404;
W2 = RAM16(0x20002400);
//字监控
for(;W2>0x8100;)
                {
                        if(RAM16(W1)<0x3000)
                        {
                       RAM16(W0) = RAM16(RAM1+RAM16(W1));
                        }
                        if(RAM16(W1)>= 0x3000)if(RAM16(W1)<0x4000)
                        {
                          RAM16(W0)=0;
                          M8062 = 1;                   //PC/PP通信出错
                          D8062 = 6205;                   //指令有误
                        }
                  if((RAM16(W1)>=0x4000)&&(RAM16(W1)<0x5000))
                        {
                          RAM16(W0) = RAM16(RAM0+RAM16(W1));
                        }
                        if(RAM16(W1)>=0x5000)if(RAM16(W1)<0x8000)
                        {
                          RAM16(W0)=0;
                          M8062 = 1;                   //PC/PP通信出错
                          D8062 = 6205;                   //指令有误
                        }
                        W0 += 2;
                        W1 += 2;
                        W2 -= 1;
          }
//位监控
W0 = (u32)(0x22000000 + ((W0&0x00003fff)<<5));                          
W2 =        RAM16(0x20002402);
for(;W2>0;)
           {
             RAM32(W0)=RAM32(0x22020000+((RAM16(W1)<<2)));
               W0 += 4;
               W1 += 2;
               W2 -= 1;
           }
}

xlian541426 发表于 2009-4-26 10:27:42

//PLC指令(未完)
SCAN_CODE2()
{
    PLCADD = PC;
    CD0 = RAM8(PLCADD+1);
        CD1 = RAM8(PLCADD);
    switch(CD0)
        {
       case 0x00:{
                    }break;
       case 0x01:{
                                          }break;
       case 0x02:{}break;
       case 0x03:{}break;
       case 0x04:{}break;
       case 0x05:{}break;
       case 0x06:{
                                       }break;
       case 0x07:{}break;
       case 0x08:{}break;
       case 0x09:{}break;
       case 0x0A:{}break;
       case 0x0B:{}break;
       case 0x0C:{}break;
       case 0x0D:{}break;
       case 0x0E:{
                                        }break;
       case 0x0F:{}break;

       case 0x10:{}break;
       case 0x11:{}break;
       case 0x12:{}break;
       case 0x13:{}break;
       case 0x14:{}break;
       case 0x15:{}break;
       case 0x16:{}break;
       case 0x17:{}break;
       case 0x18:{}break;
       case 0x19:{}break;
       case 0x1A:{}break;
       case 0x1B:{}break;
       case 0x1C:{}break;
       case 0x1D:{}break;
       case 0x1E:{}break;
       case 0x1F:{}break;

       case 0x20:{LDF=1;PLC_LD<<=1;LD0 = MN0 & RAM32(SS0+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x21:{LDF=1;PLC_LD<<=1;LD0 = MN0 & RAM32(SS256+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x22:{LDF=1;PLC_LD<<=1;LD0 = MN0 & RAM32(SS512+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x23:{LDF=1;PLC_LD<<=1;LD0 = MN0 & RAM32(SS768+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x24:{LDF=1;PLC_LD<<=1;LD0 = MN0 & RAM32(SX+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x25:{LDF=1;PLC_LD<<=1;LD0 = MN0 & RAM32(SY+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x26:{LDF=1;PLC_LD<<=1;LD0 = MN0 & RAM32(STF+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x27:{}break;
       case 0x28:{LDF=1;PLC_LD<<=1;LD0 = MN0 & RAM32(SM0+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x29:{LDF=1;PLC_LD<<=1;LD0 = MN0 & RAM32(SM256+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x2A:{LDF=1;PLC_LD<<=1;LD0 = MN0 & RAM32(SM512+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x2B:{LDF=1;PLC_LD<<=1;LD0 = MN0 & RAM32(SM768+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x2C:{LDF=1;PLC_LD<<=1;LD0 = MN0 & RAM32(SM1024+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x2D:{LDF=1;PLC_LD<<=1;LD0 = MN0 & RAM32(SM1280+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x2E:{LDF=1;PLC_LD<<=1;LD0 = MN0 & RAM32(SCF+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x2F:{LDF=1;PLC_LD<<=1;LD0 = MN0 & RAM32(SM8000+CD1*4);PLCADD+=2;LDCNT+=1;}break;

       case 0x30:{LDF=1;PLC_LD<<=1;LD0 = MN0 & !RAM32(SS0+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x31:{LDF=1;PLC_LD<<=1;LD0 = MN0 & !RAM32(SS256+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x32:{LDF=1;PLC_LD<<=1;LD0 = MN0 & !RAM32(SS512+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x33:{LDF=1;PLC_LD<<=1;LD0 = MN0 & !RAM32(SS768+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x34:{LDF=1;PLC_LD<<=1;LD0 = MN0 & !RAM32(SX+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x35:{LDF=1;PLC_LD<<=1;LD0 = MN0 & !RAM32(SY+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x36:{LDF=1;PLC_LD<<=1;LD0 = MN0 & !RAM32(STF+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x37:{}break;
       case 0x38:{LDF=1;PLC_LD<<=1;LD0 = MN0 & !RAM32(SM0+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x39:{LDF=1;PLC_LD<<=1;LD0 = MN0 & !RAM32(SM256+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x3A:{LDF=1;PLC_LD<<=1;LD0 = MN0 & !RAM32(SM512+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x3B:{LDF=1;PLC_LD<<=1;LD0 = MN0 & !RAM32(SM768+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x3C:{LDF=1;PLC_LD<<=1;LD0 = MN0 & !RAM32(SM1024+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x3D:{LDF=1;PLC_LD<<=1;LD0 = MN0 & !RAM32(SM1280+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x3E:{LDF=1;PLC_LD<<=1;LD0 = MN0 & !RAM32(SCF+CD1*4);PLCADD+=2;LDCNT+=1;}break;
       case 0x3F:{LDF=1;PLC_LD<<=1;LD0 = MN0 & !RAM32(SM8000+CD1*4);PLCADD+=2;LDCNT+=1;}break;

       case 0x40:{LD0 &= (MN0 &RAM32(SS0+CD1*4));PLCADD+=2;}break;
       case 0x41:{LD0 &= (MN0 &RAM32(SS256+CD1*4));PLCADD+=2;}break;
       case 0x42:{LD0 &= (MN0 &RAM32(SS512+CD1*4));PLCADD+=2;}break;
       case 0x43:{LD0 &= (MN0 &RAM32(SS768+CD1*4));PLCADD+=2;}break;
       case 0x44:{LD0 &= (MN0 &RAM32(SX+CD1*4));PLCADD+=2;}break;
       case 0x45:{LD0 &= (MN0 &RAM32(SY+CD1*4));PLCADD+=2;}break;
       case 0x46:{LD0 &= (MN0 &RAM32(STF+CD1*4));PLCADD+=2;}break;
       case 0x47:{}break;
       case 0x48:{LD0 &= (MN0 & RAM32(SM0+CD1*4));PLCADD+=2;}break;
       case 0x49:{LD0 &= (MN0 & RAM32(SM256+CD1*4));PLCADD+=2;}break;
       case 0x4A:{LD0 &= (MN0 & RAM32(SM512+CD1*4));PLCADD+=2;}break;
       case 0x4B:{LD0 &= (MN0 & RAM32(SM768+CD1*4));PLCADD+=2;}break;
       case 0x4C:{LD0 &= (MN0 & RAM32(SM1024+CD1*4));PLCADD+=2;}break;
       case 0x4D:{LD0 &= (MN0 & RAM32(SM1280+CD1*4));PLCADD+=2;}break;
       case 0x4E:{LD0 &= (MN0 & RAM32(SCF+CD1*4));PLCADD+=2;}break;
       case 0x4F:{LD0 &= (MN0 & RAM32(SM8000+CD1*4));PLCADD+=2;}break;
       
       case 0x50:{LD0 &= (MN0 & !RAM32(SS0+CD1*4));PLCADD+=2;}break;
       case 0x51:{LD0 &= (MN0 & !RAM32(SS256+CD1*4));PLCADD+=2;}break;
       case 0x52:{LD0 &= (MN0 & !RAM32(SS512+CD1*4));PLCADD+=2;}break;
       case 0x53:{LD0 &= (MN0 & !RAM32(SS768+CD1*4));PLCADD+=2;}break;
       case 0x54:{LD0 &= (MN0 & !RAM32(SX+CD1*4));PLCADD+=2;}break;
       case 0x55:{LD0 &= (MN0 & !RAM32(SY+CD1*4));PLCADD+=2;}break;
       case 0x56:{LD0 &= (MN0 & !RAM32(STF+CD1*4));PLCADD+=2;}break;
       case 0x57:{}break;
       case 0x58:{LD0 &= (MN0 & !RAM32(SM0+CD1*4));PLCADD+=2;}break;
       case 0x59:{LD0 &= (MN0 & !RAM32(SM256+CD1*4));PLCADD+=2;}break;
       case 0x5A:{LD0 &= (MN0 & !RAM32(SM512+CD1*4));PLCADD+=2;}break;
       case 0x5B:{LD0 &= (MN0 & !RAM32(SM768+CD1*4));PLCADD+=2;}break;
       case 0x5C:{LD0 &= (MN0 & !RAM32(SM1024+CD1*4));PLCADD+=2;}break;
       case 0x5D:{LD0 &= (MN0 & !RAM32(SM1280+CD1*4));PLCADD+=2;}break;
       case 0x5E:{LD0 &= (MN0 & !RAM32(SCF+CD1*4));PLCADD+=2;}break;
       case 0x5F:{LD0 &= (MN0 & !RAM32(SM8000+CD1*4));PLCADD+=2;}break;

       case 0x60:{LD0 |= (MN0 & RAM32(SS0+CD1*4));PLCADD+=2;}break;
       case 0x61:{LD0 |= (MN0 & RAM32(SS256+CD1*4));PLCADD+=2;}break;
       case 0x62:{LD0 |= (MN0 & RAM32(SS512+CD1*4));PLCADD+=2;}break;
       case 0x63:{LD0 |= (MN0 & RAM32(SS768+CD1*4));PLCADD+=2;}break;
       case 0x64:{LD0 |= (MN0 & RAM32(SX+CD1*4));PLCADD+=2;}break;
       case 0x65:{LD0 |= (MN0 & RAM32(SY+CD1*4));PLCADD+=2;}break;
       case 0x66:{LD0 |= (MN0 & RAM32(STF+CD1*4));PLCADD+=2;}break;
       case 0x67:{}break;
       case 0x68:{LD0 |= (MN0 & RAM32(SM0+CD1*4));PLCADD+=2;}break;
       case 0x69:{LD0 |= (MN0 & RAM32(SM256+CD1*4));PLCADD+=2;}break;
       case 0x6A:{LD0 |= (MN0 & RAM32(SM512+CD1*4));PLCADD+=2;}break;
       case 0x6B:{LD0 |= (MN0 & RAM32(SM768+CD1*4));PLCADD+=2;}break;
       case 0x6C:{LD0 |= (MN0 & RAM32(SM1024+CD1*4));PLCADD+=2;}break;
       case 0x6D:{LD0 |= (MN0 & RAM32(SM1280+CD1*4));PLCADD+=2;}break;
       case 0x6E:{LD0 |= (MN0 & RAM32(SCF+CD1*4));PLCADD+=2;}break;
       case 0x6F:{LD0 |= (MN0 & RAM32(SM8000+CD1*4));PLCADD+=2;}break;
       
       case 0x70:{LD0 |= (MN0 & !RAM32(SS0+CD1*4));PLCADD+=2;}break;
       case 0x71:{LD0 |= (MN0 & !RAM32(SS256+CD1*4));PLCADD+=2;}break;
       case 0x72:{LD0 |= (MN0 & !RAM32(SS512+CD1*4));PLCADD+=2;}break;
       case 0x73:{LD0 |= (MN0 & !RAM32(SS768+CD1*4));PLCADD+=2;}break;
       case 0x74:{LD0 |= (MN0 & !RAM32(SX+CD1*4));PLCADD+=2;}break;
       case 0x75:{LD0 |= (MN0 & !RAM32(SY+CD1*4));PLCADD+=2;}break;
       case 0x76:{LD0 |= (MN0 & !RAM32(STF+CD1*4));PLCADD+=2;}break;
       case 0x77:{}break;
       case 0x78:{LD0 |= (MN0 & !RAM32(SM0+CD1*4));PLCADD+=2;}break;
       case 0x79:{LD0 |= (MN0 & !RAM32(SM256+CD1*4));PLCADD+=2;}break;
       case 0x7A:{LD0 |= (MN0 & !RAM32(SM512+CD1*4));PLCADD+=2;}break;
       case 0x7B:{LD0 |= (MN0 & !RAM32(SM768+CD1*4));PLCADD+=2;}break;
       case 0x7C:{LD0 |= (MN0 & !RAM32(SM1024+CD1*4));PLCADD+=2;}break;
       case 0x7D:{LD0 |= (MN0 & !RAM32(SM1280+CD1*4));PLCADD+=2;}break;
       case 0x7E:{LD0 |= (MN0 & !RAM32(SCF+CD1*4));PLCADD+=2;}break;
       case 0x7F:{LD0 |= (MN0 & !RAM32(SM8000+CD1*4));PLCADD+=2;}break;

       case 0x80:{}break;
       case 0x81:{}break;
       case 0x82:{}break;
       case 0x83:{}break;
       case 0x84:{}break;
       case 0x85:{}break;
       case 0x86:{}break;
       case 0x87:{}break;
       case 0x88:{}break;
       case 0x89:{}break;
       case 0x8A:{}break;
       case 0x8B:{}break;
       case 0x8C:{}break;
       case 0x8D:{}break;
       case 0x8E:{}break;
       case 0x8F:{}break;

       case 0x90:{}break;
       case 0x91:{}break;
       case 0x92:{}break;
       case 0x93:{}break;
       case 0x94:{}break;
       case 0x95:{}break;
       case 0x96:{}break;
       case 0x97:{}break;
       case 0x98:{}break;
       case 0x99:{}break;
       case 0x9A:{}break;
       case 0x9B:{}break;
       case 0x9C:{}break;
       case 0x9D:{}break;
       case 0x9E:{}break;
       case 0x9F:{}break;

       case 0xA0:{}break;
       case 0xA1:{}break;
       case 0xA2:{}break;
       case 0xA3:{}break;
       case 0xA4:{}break;
       case 0xA5:{}break;
       case 0xA6:{}break;
       case 0xA7:{}break;
       case 0xA8:{}break;
       case 0xA9:{}break;
       case 0xAA:{}break;
       case 0xAB:{}break;
       case 0xAC:{}break;
       case 0xAD:{}break;
       case 0xAE:{}break;
       case 0xAF:{}break;

       case 0xB0:{}break;
       case 0xB1:{}break;
       case 0xB2:{}break;
       case 0xB3:{}break;
       case 0xB4:{}break;
       case 0xB5:{}break;
       case 0xB6:{}break;
       case 0xB7:{}break;
       case 0xB8:{}break;
       case 0xB9:{}break;
       case 0xBA:{}break;
       case 0xBB:{}break;
       case 0xBC:{}break;
       case 0xBD:{}break;
       case 0xBE:{}break;
       case 0xBF:{}break;

       case 0xC0:{}break;
       case 0xC1:{}break;
       case 0xC2:{}break;
       case 0xC3:{}break;
       case 0xC4:{}break;
       case 0xC5:{OUTF=1;RAM32(SY+CD1*4)=LD0;PLCADD+=2;}break;
       case 0xC6:{}break;
       case 0xC7:{}break;
       case 0xC8:{OUTF=1;RAM32(SM0+CD1*4)=LD0;PLCADD+=2;}break;
       case 0xC9:{OUTF=1;RAM32(SM256+CD1*4)=LD0;PLCADD+=2;}break;
       case 0xCA:{OUTF=1;RAM32(SM512+CD1*4)=LD0;PLCADD+=2;}break;
       case 0xCB:{OUTF=1;RAM32(SM768+CD1*4)=LD0;PLCADD+=2;}break;
       case 0xCC:{OUTF=1;RAM32(SM1024+CD1*4)=LD0;PLCADD+=2;}break;
       case 0xCD:{OUTF=1;RAM32(SM1280+CD1*4)=LD0;PLCADD+=2;}break;
       case 0xCE:{}break;
       case 0xCF:{OUTF=1;RAM32(SM8000+CD1*4)=LD0;PLCADD+=2;}break;

       case 0xD0:{}break;
       case 0xD1:{}break;
       case 0xD2:{}break;
       case 0xD3:{}break;
       case 0xD4:{}break;
       case 0xD5:{OUTF=1;RAM32(SY+CD1*4) |=LD0;PLCADD+=2;}break;
       case 0xD6:{}break;
       case 0xD7:{}break;
       case 0xD8:{OUTF=1;RAM32(SM0+CD1*4)|=LD0;PLCADD+=2;}break;
       case 0xD9:{OUTF=1;RAM32(SM256+CD1*4)|=LD0;PLCADD+=2;}break;
       case 0xDA:{OUTF=1;RAM32(SM512+CD1*4)|=LD0;PLCADD+=2;}break;
       case 0xDB:{OUTF=1;RAM32(SM768+CD1*4)|=LD0;PLCADD+=2;}break;
       case 0xDC:{OUTF=1;RAM32(SM1024+CD1*4)|=LD0;PLCADD+=2;}break;
       case 0xDD:{OUTF=1;RAM32(SM1280+CD1*4)|=LD0;PLCADD+=2;}break;
       case 0xDE:{}break;
       case 0xDF:{OUTF=1;RAM32(SM8000+CD1*4)|=LD0;PLCADD+=2;}break;

       case 0xE0:{}break;
       case 0xE1:{}break;
       case 0xE2:{}break;
       case 0xE3:{}break;
       case 0xE4:{}break;
       case 0xE5:{OUTF=1;RAM32(SY+CD1*4) &= !LD0;PLCADD+=2;}break;
       case 0xE6:{}break;
       case 0xE7:{}break;
       case 0xE8:{OUTF=1;RAM32(SM0+CD1*4) &=!LD0;PLCADD+=2;}break;
       case 0xE9:{OUTF=1;RAM32(SM256+CD1*4)&=!LD0;PLCADD+=2;}break;
       case 0xEA:{OUTF=1;RAM32(SM512+CD1*4)&=!LD0;PLCADD+=2;}break;
       case 0xEB:{OUTF=1;RAM32(SM768+CD1*4)&=!LD0;PLCADD+=2;}break;
       case 0xEC:{OUTF=1;RAM32(SM1024+CD1*4)&=!LD0;PLCADD+=2;}break;
       case 0xED:{OUTF=1;RAM32(SM1280+CD1*4)&=!LD0;PLCADD+=2;}break;
       case 0xEE:{}break;
       case 0xEF:{OUTF=1;RAM32(SM8000+CD1*4)&=!LD0;PLCADD+=2;}break;

       case 0xF0:{}break;
       case 0xF1:{}break;
       case 0xF2:{}break;
       case 0xF3:{}break;
       case 0xF4:{}break;
       case 0xF5:{}break;
       case 0xF6:{}break;
       case 0xF7:{}break;
       case 0xF8:{}break;
       case 0xF9:{}break;
       case 0xFA:{}break;
       case 0xFB:{}break;
       case 0xFC:{}break;
       case 0xFD:{}break;
       case 0xFE:{}break;
       case 0xFF:{
                   if(CD1==0xF8) {LD1 &= LD0;PLC_LD>>=1;LDCNT-=1;PLCADD+=2;}        //ANB
                               if(CD1==0xF9) {LD1 |= LD0;PLC_LD>>=1;LDCNT-=1;PLCADD+=2;}; //ORB
                               if(CD1==0xFA) {PLC_LD<<=1;LD0=LD1;LDCNT+=1; PLCADD += 2;}//MPS
                               if(CD1==0xFB) {LD0=LD1; PLCADD += 2;}                      //MRD
                               if(CD1==0xFC) {PLC_LD>>=1;LDCNT -= 1;PLCADD += 2;}         //MPP
                               if(CD1==0xFD) {LD0 = (!LD0) & MN0;PLCADD += 2;}            //INV
                   if(CD1==0xFF) {PLCADD+=2;}                                 //NOP
                    }break;
        default:{}break;
        }
        if(PLCADD>=0x0801BEDC)//没有END指令
        {
          ENDF = 0;
          PC   = 0x0801805C;
        }
        if((OUTF)&&(LDCNT==1))
        {
          LDCNT = 0;
        }
        if((LDF)&&(LDCNT==0))       
        {
           LDF = 0;
           OUTF = 0;
        }else{ //与母线连接指令未与母线连接,ANB\ORB\MPS\MPP指令关系出错
              }
        if(PC == PLCADD)
        {
          ENDF = 0;
        }else{
             PC = PLCADD;
              }
}

xlian541426 发表于 2009-4-26 10:29:03

//PLC初始数据(部分)
       RAM16(0x20000E00) = 0x0004;
       RAM16(0x20000E02) = 0x0000;
       RAM16(0x20000E04) = 0x0000;
       RAM16(0x20000E06) = 0x0000;

                                                  
       RAM16(0x20000E30) = 0x0800; //M断电保持开始地址
       RAM16(0x20000E32) = 0x0800; //M
       RAM16(0x20000E34) = 0x0000; //S断电保持开始地址
       RAM16(0x20000E36) = 0x0000; //S
       RAM16(0x20000E38) = 0x0E00; //C断电保持开始地址
       RAM16(0x20000E3A) = 0x0E00; //C
       RAM16(0x20000E3C) = 0x0EC8; //C断电保持开始地址
       RAM16(0x20000E3E) = 0x0EC8; //C
      RAM16(0x20000E40) = 0x0000; //D
       RAM16(0x20000E42) = 0x0000; //D断电保持开始地址
       RAM16(0x20000E44) = 0x0000;
       RAM16(0x20000E46) = 0x0000;
       RAM16(0x20000E48) = 0x0000;
       RAM16(0x20000E4A) = 0x0000; //文件寄存器
   RAM16(0x20000E4C) = 0x0000; //文件寄存器大小
       RAM16(0x20000E4E) = 0x0000; //注释
       RAM16(0x20000E50) = 0x0000; //注释大小
       RAM16(0x20000E52) = 0x0000;
       RAM16(0x20000E54) = 0x0000;
       RAM16(0x20000E56) = 0x0000;
       RAM16(0x20000E58) = 0x0000;
   RAM16(0x20000E5A) = 0x0000;

       D8000 = 200;                   //扫描时间
       D8001 = 24100;                   //型号版本
       D8101 = 24100;                   //型号版本
       D8002 = 0;                           //内存容量
       D8102 = 4;                           //内存容量
       D8003 = 0x0010;            //内存类型
       D8010 = 0;                           //扫描当前值
   D8011 = 0;                           //扫描最小时间(0.1MS)
       D8012 = 0;                           //扫描最长时间(0.1MS)

       M8035 = 0;                           //强制运行
       M8036 = 0;            //强制运行指令
       M8037 = 0;            //M8037 强制停止

cyxavr 发表于 2009-4-26 10:42:26

狂顶,楼主。好东西。迟快打个包上来吧。

ZRJ8951 发表于 2009-4-26 10:57:46

顶!

xlian541426 发表于 2009-4-26 10:59:30

因工作较忙,时间不够程序还不完整,还需加入未完成的指令、上电指令检查,输入输出板还没画好,编程口准备用PS2插座。
有兴趣的朋友一起来DIY实用型单芯片PLC,本款PLC为单芯片,一个422编程口,一个232/CAN个扩展口,12输入,12输出。
内部资源:M0_M3071,X0_X7,X10-X13,Y0-Y7,Y10-Y13,T0-T255(0.1ms),C0-C199(16位计数器),C200-C255(32位计数器)
P0-P63,N0-N7,D0-D999。
本款PLC定议为DX 100 24MR。本款PLC做完后准备做DX 200 ,加一块CPLD,SRAM实现三菱FX2N全系列资源,可扩展模块。

foshan_lcy 发表于 2009-4-26 11:11:25

很不错,特别是2楼的资料。很好的参考资料。

cyxavr 发表于 2009-4-26 11:12:49

先支持一下再说。有兴趣一起玩
QQ:229933133

xlian541426 发表于 2009-4-26 11:31:30

联系资料: 18928105948 
      18928105948@189.cn

xlian541426 发表于 2009-4-26 12:00:39

用2051制作的PLC(类PLC基于C语言,简易PLC基于FX1S)
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_439930.JPG
(原文件名:图片_0~1.JPG)

部份代码
#include    "intrins.h"
#include    "STRING.H"
#include    "ABSACC.H"
#include    "text2.h"
typedef                unsigned        char        byte;
typedef                unsigned        int                word;

#define           nop_nop_()

#define   FOSC12000000

#define   BUOD9600



#define   T5ms_rec(word)(65536-((FOSC*5)/(12*1000)))
#define   REC_LOADH(byte)(T5ms_rec/256)
#define   REC_LOADL(byte)(T5ms_rec%256)

#define   RECBUOD   (256-(((FOSC)/BUOD/32)/1))

#define   sofint_rst 0x30 /*软件复位*/

#define   WDT_Tim    0x3b/*22118400*200/393216000*/




#define v        ((unsigned char volatile pdata *) 0x000)

//2800-2fff 512*4=2048字节/4=512步
//内存区


#define D16 0x40      //

#define ram   ((unsigned char volatile pdata *) 0x00)
#define T   0x00      //16bit2byte           t0-t15
#define X   0x08          //I
#define TRF 0x10          //16bit2byte           tr0-tr15
#define Y   0x18          //O
#define C   0x20             //128bit 2byte           c0-c15
#define M80x28          //64bit   8byte           M8000-M80063
#define CRF 0x30          //128bit 2byte           cr0-cr15
#define M   0x40             //128bit 16byte   dr6-dr727
#define FR0x50      //128bit 16byte   f0-f127


#define dram((unsigned int volatile pdata *) 0x60)

/*
#define TV 0x60      //16 word32bytetv0-tv15
#define TP 0x80               //16 word32byte        tp0-tp15
#define CV 0xA0       //16 word32byte        cv0-cv15
#define CP 0xC0               //16 word32byte        cp0-cp15
#define D0xE0      //16 word32byted0-d15
*/
byte code ASC[]={"0123456789ABCDEF"};

byte code HEX[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
               0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                             0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                             0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,
                             0,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,
                             0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                             0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                             0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

#define s   ((unsigned char volatile idata *) 0x0b0)

sbit X0=P3^4;        //ON 0
sbit X1=P3^5;        //ON 0
sbit X2=P1^3;        //ON 0
sbit X3=P1^2;        //ON 0
sbit X4=P1^1;        //ON 0
sbit X5=P1^0;        //ON 0

sbit X10=P2^4;        //bcd 1       ON 0
sbit X11=P2^5;        //bcd 2       ON 0
sbit X12=P2^7;        //bcd 4       ON 0
sbit X13=P2^6;        //bcd 8       ON 0

sbit Y0=P1^4;        //0 ON
sbit Y1=P1^5;        //0 ON
sbit Y2=P1^6;        //0 ON
sbit Y3=P1^7;        //0 ON
sbit Y4=P2^0;        //0 ON
sbit Y5=P2^1;        //0 ON

sbit Y6=P2^2;        //音乐播放        0 播放 1 停止

sbit run_lamp=P3^7;

/*****************公共运算区*********************/
byte bdata m8 _at_ 0x20;
sbit M8000=m8^0;       //程序运行
sbit M8001=m8^1;       //程序清除
sbit M8002=m8^2;       //一扫描周期后ON
sbit M8003=m8^3;       //程序运行
sbit M8004=m8^4;       //等于标志(零标志)
sbit M8005=m8^5;       //大于标志(进位标志)
sbit M8006=m8^6;       //小于标志(借位标志)
sbit M8007=m8^7;       //内核占用标志位
/**************位运算占用4个字节*****************/
byte bdata br1 _at_ 0x21;/***输入,输出,中间运算位结果***/
byte bdata br2 _at_ 0x22;/***堆栈使用***/
sbit b0=br1^0;
sbit b1=br1^1;
sbit b2=br1^2;
sbit b3=br1^3;
sbit b4=br1^4;
sbit b5=br1^5;
sbit b6=br1^6;
sbit b7=br1^7;

sbit b10=br2^0;
sbit b11=br2^1;
sbit b12=br2^2;
sbit b13=br2^3;
sbit b14=br2^4;
sbit b15=br2^5;
sbit b16=br2^6;
sbit b17=br2^7;

/******************8个字节位运算**************************/
byte bdata dr1   _at_    0x23;           //位运算占用字节
byte bdata dr2   _at_    0x24;           //位运算占用字节


sbit sb0=dr1^0;
sbit sb1=dr1^1;
sbit sb2=dr1^2;
sbit sb3=dr1^3;
sbit sb4=dr1^4;
sbit sb5=dr1^5;
sbit sb6=dr1^6;
sbit sb7=dr1^7;

sbit sb8=dr2^0;
sbit sb9=dr2^1;
sbit sb10=dr2^2;
sbit sb11=dr2^3;
sbit sb12=dr2^4;
sbit sb13=dr2^5;
sbit sb14=dr2^6;
sbit sb15=dr2^7;
/*******************************************************/
/******************6个字节运算**************************/

byte bdata dr3   _at_    0x25;           //内核占用字节
byte bdata dr4   _at_    0x26;           //内核占用字节
byte bdata dr5   _at_    0x27;           //内核占用字节
byte bdata dr6   _at_    0x28;           //内核占用字节
byte bdata dr7   _at_    0x2a;           //内核占用字节
byte bdata dr8   _at_    0x3b;           //内核占用字节



/********************************************************/
byte dataT5MS      _at_    0x2c;   //5MS基本时钟
byte datapoint   _at_    0x2d;           //通讯数据存放指针
byte dataOAB       _at_    0x2e;           //块与块或计数用
byte dataMPPD      _at_    0x2f;           //堆栈计数7
byte dataPFSD      _at_    0x30;           //上升下降沿堆栈计数占用 1BYTE 256点
/*****************4个字****************************/
word bdata wr1            _at_   0x31;          //运算占用字
sbit wrb0 = wr1^0;
sbit wrb1 = wr1^1;
sbit wrb2 = wr1^2;
sbit wrb3 = wr1^3;
sbit wrb4 = wr1^4;
sbit wrb5 = wr1^5;
sbit wrb6 = wr1^6;
sbit wrb7 = wr1^7;
sbit wrb8 = wr1^8;
sbit wrb9 = wr1^9;
sbit wrb10 = wr1^10;
sbit wrb11 = wr1^11;
sbit wrb12 = wr1^12;
sbit wrb13 = wr1^13;
sbit wrb14 = wr1^14;
sbit wrb15 = wr1^15;
word data wr2            _at_    0x33;          //运算占用字            
word data T100MS         _at_    0x35;          //0.1S时基
word data prog         _at_    0x37;    //程序指针(0x2800_0x2fD0)
/***********************************************/

byte bdata dwHH          _at_    0x3c;
byte bdata dwH         _at_    0x3d;
byte bdata dwL         _at_    0x3e;
byte bdata dwLL          _at_    0x3f;
sbit dwb0 = dwLL^0;
sbit dwb1 = dwLL^1;
sbit dwb2 = dwLL^2;
sbit dwb3 = dwLL^3;
sbit dwb4 = dwLL^4;
sbit dwb5 = dwLL^5;
sbit dwb6 = dwLL^6;
sbit dwb7 = dwLL^7;
sbit dwb8 = dwL^0;
sbit dwb9 = dwL^1;
sbit dwb10 = dwL^2;
sbit dwb11 = dwL^3;
sbit dwb12 = dwL^4;
sbit dwb13 = dwL^5;
sbit dwb14 = dwL^6;
sbit dwb15 = dwL^7;
sbit dwb16 = dwH^0;
sbit dwb17 = dwH^1;
sbit dwb18 = dwH^2;
sbit dwb19 = dwH^3;
sbit dwb20 = dwH^4;
sbit dwb21 = dwH^5;
sbit dwb22 = dwH^6;
sbit dwb23 = dwH^7;
sbit dwb24 = dwHH^0;
sbit dwb25 = dwHH^1;
sbit dwb26 = dwHH^2;
sbit dwb27 = dwHH^3;
sbit dwb28 = dwHH^4;
sbit dwb29 = dwHH^5;
sbit dwb30 = dwHH^6;
sbit dwb31 = dwHH^7;
/*********************************************/
byte codeH_at_0x40;
byte codeL_at_0x41;
/*********************************************/

extern send(byte n);
extern plc_stop();
extern runinit();


/********************取代码*************************/
take_code()
{ byte i;
ISP_CONTR=0x80;
ISP_CMD =1;                     
for(i=0;i<4;i++)
{ISP_ADDRH=prog/256;
   ISP_ADDRL=prog%256;
       EA=0;
       ISP_TRIG=0x46;
   ISP_TRIG=0xb9;
   nop;
       s=HEX;
       EA=1;
       prog++;
        }
    ISP_CONTR=0;
        ISP_CMD=0;
        ISP_TRIG=0;
}




/************************输出位****************************/
/*
函数原型: out_bit
使用资源: dr6:
          dr7:
          dr1:
                  R7:
                  R5:
出口参数: 无
         
*/

out_bitc(byte addrB,byte addr,byte n)
{ dr6=addrB+addr/8;
dr7=addr%8;
dr1=ram;
if(dr7==0) sb0=n;
if(dr7==1) sb1=n;
if(dr7==2) sb2=n;
if(dr7==3) sb3=n;
if(dr7==4) sb4=n;
if(dr7==5) sb5=n;
if(dr7==6) sb6=n;
if(dr7==7) sb7=n;       
ram=dr1;
}
/************************取位状态****************************/
/*
函数原型: take_bit
入口参数: R7:
          R5:
          dr6: 位地址区,
                  dr7: 位地址
          dr1: 位地址
出口参数: CY
*/

bit take_bitc(byte addB,byte addr)
{
dr6=addB+addr/8;
dr7=addr%8;
dr1=ram;
if(dr7==0) return(sb0);
if(dr7==1) return(sb1);
if(dr7==2) return(sb2);
if(dr7==3) return(sb3);
if(dr7==4) return(sb4);
if(dr7==5) return(sb5);
if(dr7==6) return(sb6);
if(dr7==7) return(sb7);
}

/**********************取数据************************
使用资源: take_code(); 读取代码
dr1;
dr2:
dr3:
dr4:
dr5:
dr6:
dr7:
dwLL:
dwL:
dwH:
出口参数:dr2: 16位无符号整数高8位
         dr1: 16位无符号整数低8位
               CY:执行结果
****************************************************/
take_data()
{
take_code();
dr3=s*16+s;
dr4=(s*16+s)-0x80;
take_code();
dr5=s*16+s;
dr6=(s*16+s)-0x80;
if(dr4==0){if(dr6==0) {wr1=dr5*256+dr3;}}
else if(dr4==4){
                  if(dr5==4)   {dwLL=ram;dwL=ram;dwH=0;}
                  else if(dr5==5){dwLL=ram;dwL=ram;dwH=0;}
                                  else if(dr5==8){if(dr3<128)
                                                 { dwLL=ram[(M+dr3/8)];
                                                     if(dr3<120)
                                                                          {dwL=ram[(M+1+dr3/8)];
                                                                     if(dr3<112) dwH=ram[(M+1+dr3/8)];
                                                                          }
                                                                        }
                                                  }
                                  
                                  
                                   dr7=dr3%8;
                                   dr1=0;
                                   dr2=0;
                                   if(dr7==0){if(dr6==0) {wr1=0;}
                                                  if(dr6>=2) {wrb0=dwb0;wrb1=dwb1;wrb2=sb2;wrb3=dwb3;}
                                                              if(dr6>=4) {wrb4=dwb4;wrb5=dwb5;wrb6=dwb6;wrb7=dwb7;}
                                                              if(dr6>=6) {wrb8=dwb8;wrb9=dwb9;wrb10=dwb10;wrb11=dwb11;}
                                                              if(dr6>=8) {wrb12=dwb12;wrb13=dwb13;wrb14=sb14;wrb15=dwb15;}
                                            }
                                   else if(dr7==1){if(dr6==0) {wr1=0;}
                                                  if(dr6>=2) {wrb0=dwb1;wrb1=dwb2;wrb2=dwb3;wrb3=dwb4;}
                                                              if(dr6>=4) {wrb4=dwb5;wrb5=dwb6;wrb6=dwb7;wrb7=dwb8;}
                                                              if(dr6>=6) {wrb8=dwb9;wrb9=sb10;wrb10=dwb11;wrb11=dwb12;}
                                                              if(dr6>=8) {wrb12=dwb13;wrb13=dwb14;wrb14=dwb15;wrb15=dwb16;}
                                            }
                                   else if(dr7==2){if(dr6==0) {wr1=0;}
                                                  if(dr6>=2) {wrb0=dwb2;wrb1=dwb3;wrb2=dwb4;wrb3=dwb5;}
                                                              if(dr6>=4) {wrb4=dwb6;wrb5=dwb7;wrb6=dwb8;wrb7=dwb9;}
                                                              if(dr6>=6) {wrb8=dwb10;wrb9=dwb11;wrb10=dwb12;wrb11=dwb13;}
                                                              if(dr6>=8) {wrb12=dwb14;wrb13=dwb15;wrb14=dwb16;wrb15=dwb17;}
                                            }
                                   else if(dr7==3){if(dr6==0) {wr1=0;}
                                                  if(dr6>=2) {wrb0=dwb3;wrb1=dwb4;wrb2=dwb5;wrb3=dwb6;}
                                                              if(dr6>=4) {wrb4=dwb7;wrb5=dwb8;wrb6=dwb9;wrb7=dwb10;}
                                                              if(dr6>=6) {wrb8=dwb11;wrb9=dwb12;wrb10=dwb13;wrb11=dwb14;}
                                                              if(dr6>=8) {wrb12=dwb15;wrb13=dwb16;wrb14=dwb17;wrb15=dwb18;}
                                            }
                                   else if(dr7==4){if(dr6==0) {wr1=0;}
                                                  if(dr6>=2) {wrb0=dwb4;wrb1=dwb5;wrb2=dwb6;wrb3=dwb7;}
                                                              if(dr6>=4) {wrb4=dwb8;wrb5=dwb9;wrb6=dwb10;wrb7=dwb11;}
                                                              if(dr6>=6) {wrb8=dwb12;wrb9=dwb13;wrb10=dwb14;wrb11=dwb15;}
                                                              if(dr6>=8) {wrb12=dwb16;wrb13=dwb17;wrb14=dwb18;wrb15=dwb19;}
                                            }
                                   else if(dr7==5){if(dr6==0) {wr1=0;}
                                                  if(dr6>=2) {wrb0=dwb5;wrb1=dwb6;wrb2=dwb7;wrb3=dwb8;}
                                                              if(dr6>=4) {wrb4=dwb9;wrb5=dwb10;wrb6=dwb11;wrb7=dwb12;}
                                                              if(dr6>=6) {wrb8=dwb13;wrb9=dwb14;wrb10=dwb15;wrb11=dwb16;}
                                                              if(dr6>=8) {wrb12=dwb17;wrb13=dwb18;wrb14=dwb19;wrb15=dwb20;}
                                            }
                                   else if(dr7==6){if(dr6==0) {wr1=0;}
                                                  if(dr6>=2) {wrb0=dwb6;wrb1=dwb7;wrb2=dwb8;wrb3=dwb9;}
                                                              if(dr6>=4) {wrb4=dwb10;wrb5=dwb11;wrb6=dwb12;wrb7=dwb13;}
                                                              if(dr6>=6) {wrb8=dwb14;wrb9=dwb15;wrb10=dwb16;wrb11=dwb17;}
                                                              if(dr6>=8) {wrb12=dwb18;wrb13=dwb19;wrb14=dwb20;wrb15=dwb21;}
                                            }
                                   else if(dr7==7){if(dr6==0) {wr1=0;}
                                                  if(dr6>=2) {wrb0=dwb7;wrb1=dwb8;wrb2=dwb9;wrb3=dwb10;}
                                                              if(dr6>=4) {wrb4=dwb11;wrb5=dwb12;wrb6=dwb13;wrb7=dwb14;}
                                                              if(dr6>=6) {wrb8=dwb15;wrb9=dwb16;wrb10=dwb17;wrb11=dwb18;}
                                                              if(dr6>=8) {wrb12=dwb19;wrb13=dwb20;wrb14=dwb21;wrb15=dwb22;}
                                            }
                                                                    
               }
else if(dr4==6)
       {
          if(dr6==2){if(dr5==0){if(dr3<32)      {wr1=dram;}}}
                else if(dr6==4){if(dr5==0){if(dr3<32) {wr1=dram;}}}
                else if(dr6==6){if(dr5==0){if(dr3<32) {wr1=ram[(0xe0+dr3)/2];}}}
           }
}
/************************************************************
dr3:
dr6:
dr7:
wr1:
dw:
*************************************************************/
/*tz_bit()
{dr7=dr3%8;
if(dr7==0){if(dr6>=2){dwb0=wrb0;dwb1=wrb1;dwb2=wrb2;dwb3=wrb3;}
                       if(dr6>=4){dwb4=wrb4;dwb5=wrb5;dwb6=wrb6;dwb7=wrb7;}
                       if(dr6>=6){dwb8=wrb8;dwb9=wrb9;dwb10=wrb10;dwb3=wrb11;}
                       if(dr6>=2){dwb12=wrb12;dwb13=wrb13;dwb14=wrb14;dwb15=wrb15;}
                       }
else if(dr7==1){if(dr6>=2){dwb1=wrb0;dwb2=wrb1;dwb3=wrb2;dwb4=wrb3;}
                               if(dr6>=4){dwb5=wrb4;dwb6=wrb5;dwb7=wrb6;dwb8=wrb7;}
                               if(dr6>=6){dwb9=wrb8;dwb10=wrb9;dwb11=wrb10;dwb12=wrb11;}
                               if(dr6>=2){dwb13=wrb12;dwb14=wrb13;dwb15=wrb14;dwb16=wrb15;}
                               }
else if(dr7==2){if(dr6>=2){dwb2=wrb0;dwb3=wrb1;dwb4=wrb2;dwb5=wrb3;}
                               if(dr6>=4){dwb6=wrb4;dwb7=wrb5;dwb8=wrb6;dwb9=wrb7;}
                               if(dr6>=6){dwb10=wrb8;dwb11=wrb9;dwb12=wrb10;dwb13=wrb11;}
                               if(dr6>=2){dwb14=wrb12;dwb15=wrb13;dwb16=wrb14;dwb17=wrb15;}
                               }
else if(dr7==3){if(dr6>=2){dwb3=wrb0;dwb4=wrb1;dwb5=wrb2;dwb6=wrb3;}
                               if(dr6>=4){dwb7=wrb4;dwb8=wrb5;dwb9=wrb6;dwb10=wrb7;}
                               if(dr6>=6){dwb11=wrb8;dwb12=wrb9;dwb13=wrb10;dwb14=wrb11;}
                               if(dr6>=2){dwb15=wrb12;dwb16=wrb13;dwb17=wrb14;dwb18=wrb15;}
                               }
else if(dr7==4){if(dr6>=2){dwb4=wrb0;dwb5=wrb1;dwb6=wrb2;dwb7=wrb3;}
                               if(dr6>=4){dwb8=wrb4;dwb9=wrb5;dwb10=wrb6;dwb11=wrb7;}
                               if(dr6>=6){dwb12=wrb8;dwb13=wrb9;dwb14=wrb10;dwb15=wrb11;}
                               if(dr6>=2){dwb16=wrb12;dwb17=wrb13;dwb18=wrb14;dwb19=wrb15;}
                               }
else if(dr7==5){if(dr6>=2){dwb5=wrb0;dwb6=wrb1;dwb7=wrb2;dwb8=wrb3;}
                               if(dr6>=4){dwb9=wrb4;dwb10=wrb5;dwb11=wrb6;dwb12=wrb7;}
                               if(dr6>=6){dwb13=wrb8;dwb14=wrb9;dwb15=wrb10;dwb16=wrb11;}
                               if(dr6>=2){dwb17=wrb12;dwb18=wrb13;dwb19=wrb14;dwb20=wrb15;}
                               }
else if(dr7==6){if(dr6>=2){dwb6=wrb0;dwb7=wrb1;dwb8=wrb2;dwb9=wrb3;}
                               if(dr6>=4){dwb10=wrb4;dwb11=wrb5;dwb12=wrb6;dwb13=wrb7;}
                               if(dr6>=6){dwb14=wrb8;dwb15=wrb9;dwb16=wrb10;dwb17=wrb11;}
                               if(dr6>=2){dwb18=wrb12;dwb19=wrb13;dwb20=wrb14;dwb21=wrb15;}
                               }
else if(dr7==7){if(dr6>=2){dwb7=wrb0;dwb8=wrb1;dwb9=wrb2;dwb10=wrb3;}
                               if(dr6>=4){dwb11=wrb4;dwb12=wrb5;dwb13=wrb6;dwb14=wrb7;}
                               if(dr6>=6){dwb15=wrb8;dwb16=wrb9;dwb17=wrb10;dwb18=wrb11;}
                               if(dr6>=2){dwb19=wrb12;dwb20=wrb13;dwb21=wrb14;dwb22=wrb15;}
                               }
}


mov_data()
{
if(dr4==4)
       {if(dr5==5){dwLL=ram;dwL=ram;dwH=0;tz_bit();ram=dwLL;ram=dwL;}
          else if(dr5==8){if(dr3<128)
                       {dwLL=ram;
                                if(dr3<120)
                              {dwL=ram;
                                       if(dr3<112) dwH=ram;else dwH=0;
                                   }else dwL=0;
                                        tz_bit();
                                        ram=dwLL;
                                   if(dr3<120)
                                        {ram=dwL;
                                       if(dr3<112)
                                       {ram=dwH;}
                                  }
                        }}}
               
       else if(dr4==6)
                      {
                          if(dr6==2){if(dr5==0){if(dr3<32){dram=wr1;}else M8007=1;}}
                                else if(dr6==4){if(dr5==0){if(dr3<32){dram=wr1;}M8007=1;}}
                                else if(dr6==6){if(dr5==0){if(dr3<32){dram=wr1;}M8007=1;}}
                          }
}*/
/**************************************************************************
取数据寄存器地址
dr3:
dr4:
dr5:
dr6:
CY:
**************************************************************************/
/*bit take_addr()
{
take_code();
dr3=s*16+s;
dr4=s*16+s-0x80;
take_code();
dr5=s*16+s;
dr6=s*16+s-0x80;
if(dr4==6)
    {if(dr6==2)
       {if(dr5==0)if(dr3<32) {wr1=T+dr3/2;}       else M8007=1;}
       if(dr6==4)
       {if(dr5==0)if(dr3<32) {wr1=C+dr3/2;}       else M8007=1;}
       if(dr6==6)
           {if(dr5==0)if(dr3<32) {wr1=(0xe0+dr3)/2;}else M8007=1;}
        }
return(M8007);
}
*/

/***********************求输入位内存地址****************************
使用资源: dr4:
          dr3:
*******************************************************************/
in_bit_addr()
{
dr4=s*16+s;
if(s==4) {if(dr4<16){dr3=X;}}
if(s==5) {if(dr4<16){dr3=Y;}}
if(s==6) {if(dr4<16){dr3=T;}}
if(s==8) {if(dr4<128){dr3=M;}}
if(s==14){if(dr4<16){dr3=C;}}
if(s==15){if(dr4<64){dr3=M8;}}
}


/***********************求输出位内存地址****************************
使用资源: dr4:
          dr3:
*******************************************************************/
out_bit_addr()
{ dr4=s*16+s;
   if(s==5) {if(dr4<16){dr3=Y;}}
   if(s==8) {if(dr4<128){dr3=M;}}
}




/**********************************************/

//30 38 30 30 pls
//30 30 38 35 Y0
fun_pls()
{
   take_code();
   out_bit_addr();
   if(PFSD<128)
   {if(b0)
      {
          if(!take_bitc(FR,PFSD))
            {
            out_bitc(dr3,dr4,1);
            out_bitc(FR,PFSD,1);
            }else out_bitc(dr3,dr4,0);   
      }else {out_bitc(dr3,dr4,0);
               out_bitc(FR,PFSD,0);
            }
       }
   PFSD++;
}
//30 39 30 30 plf
//30 30 38 35 Y0
fun_plf()
{   
   take_code();
   out_bit_addr();
   if(PFSD<128)
   {if(!b0)
      {
          if(!take_bitc(FR,PFSD))
            {
            out_bitc(dr3,dr4,1);
            out_bitc(FR,PFSD,1);
            }else out_bitc(dr3,dr4,0);   
      }else {out_bitc(dr3,dr4,0);
               out_bitc(FR,PFSD,0);
            }
       }
   PFSD++;
}

//30 43 30 30 rst_ct
fun_rst_ct()
{
take_code();
dr3=s*16+s;
if(b0)
{
   if(s==6)
    {if(dr3<16)
          {
           out_bitc(T,dr3,0);
           out_bitc(TRF,dr3,0);
           dram=65535;
          }
          
        }
   else if(s==14)
    {if(dr3<16)
       {out_bitc(C,dr3,0);
          out_bitc(CRF,dr3,0);
          dram=0;
          }
        }
}
}



fun_out_t()
{
take_data();
dram=wr1;
if(codeL<16)
    {if(b0)
      {if(~take_bitc(TRF,codeL))
          {dram=T100MS;
         out_bitc(TRF,codeL,1);}
       if(~take_bitc(T,codeL))
         {if((T100MS-dram)>=dram){out_bitc(T,codeL,1);}
             else {out_bitc(T,codeL,0);}}
      }else {out_bitc(T,codeL,0);
             out_bitc(TRF,codeL,0);
             dram=T100MS;}
    }
}

fun_out_c()
{
take_data();
dram=wr1;
if(codeL<16)
{
    if(b0)
      {
      if(~take_bitc(CRF,codeL))
         {
             if(~take_bitc(C,codeL))
               {
               dram++;
               if(dram>=dram)
                  out_bitc(C,codeL,1);
                  else out_bitc(C,codeL,0);
               }
             out_bitc(CRF,codeL,1);
         }
      }else out_bitc(CRF,codeL,0);
}
send(codeL);
send(wr1/256);
send(wr1%256);
send(dram/256);
send(dram%256);
send(b0);
send(take_bitc(CRF,codeL));
send(take_bitc(CRF,codeL));
}

//alt
fun_alt()
{
take_code();
dr4=s*16+s;
take_code();
if(b0)
    {if(s==5)if(dr4<16){sb10=~take_bitc(Y,dr4);out_bitc(Y,dr4,sb10);}
   if(s==8)if(dr4<128){ sb10=~take_bitc(M,dr4);out_bitc(M,dr4,sb10);}
    }
}

fun_altp()
{   take_code();
    dr4=s*16+s;
    take_code();
    dr3=s;
        if(PFSD<128)
        {if(b0)
          {if(!take_bitc(FR,PFSD))
      {
         if(dr3==5)if(dr4<16){ sb10=~take_bitc(Y,dr4);out_bitc(Y,dr4,sb10);}
         if(dr3==8)if(dr4<128){sb10=~take_bitc(M,dr4);out_bitc(M,dr4,sb10);}
         out_bitc(FR,PFSD,1);
      }
      }else out_bitc(FR,PFSD,0);      
        }
        PFSD++;
}

fun_ldp()
{br1>>=1;
   take_code();
   dr4=s*16+s;
   in_bit_addr();
        if(PFSD<128)if(OAB<8)
        {if(take_bitc(dr3,dr4))
          {if(!take_bitc(FR,PFSD))
      {
         b0=1;
         out_bitc(FR,PFSD,1);
      }else{b0=0;}
      }else {out_bitc(FR,PFSD,0); b0=0; }      
        }
    OAB++;
        PFSD++;
}

fun_ldf()
{br1>>=1;
   take_code();
   dr4=s*16+s;
   in_bit_addr();
        if(PFSD<128)if(OAB<8)
        {if(!take_bitc(dr3,dr4))
          {if(!take_bitc(FR,PFSD))
      {
         b0=1;
         out_bitc(FR,PFSD,1);
      }else{b0=0;}
      }else {out_bitc(FR,PFSD,0); b0=0; }      
        }
    OAB++;
        PFSD++;   
}

fun_andp()
{
   take_code();
   dr4=s*16+s;
   in_bit_addr();
        if(PFSD<128)
        {if(take_bitc(dr3,dr4))
          {if(!take_bitc(FR,PFSD))
      {
         out_bitc(FR,PFSD,1);
      }else{b0=0;}
      }else {out_bitc(FR,PFSD,0); b0=0; }      
        }
        PFSD++;
}

fun_andf()
{
   take_code();
   dr4=s*16+s;
   in_bit_addr();
        if(PFSD<128)
        {if(!take_bitc(dr3,dr4))
          {if(!take_bitc(FR,PFSD))
      {
         out_bitc(FR,PFSD,1);
      }else{b0=0;}
      }else {out_bitc(FR,PFSD,0); b0=0; }      
        }
        PFSD++;
}

fun_orp()
{
   take_code();
   dr4=s*16+s;
   in_bit_addr();
        if(PFSD<128)
        {if(take_bitc(dr3,dr4))
          {if(!take_bitc(FR,PFSD))
      {
         b0=1;
         out_bitc(FR,PFSD,1);
      }
      }else {out_bitc(FR,PFSD,0);}      
        }
        PFSD++;
}

fun_orf()
{
   take_code();
   dr4=s*16+s;
   in_bit_addr();
        if(PFSD<128)
        {if(!take_bitc(dr3,dr4))
          {if(!take_bitc(FR,PFSD))
      {
         b0=1;
         out_bitc(FR,PFSD,1);
      }
      }else {out_bitc(FR,PFSD,0);}      
        }
        PFSD++;
}



cmd()
{
take_data();
wr2=wr1;
take_data();
if(wr2==wr1) {M8005=0;M8006=0;M8004=1;}
if(wr2>wr1){M8004=0;M8006=0;M8005=1;}
if(wr2<wr1){M8004=0;M8005=0;M8006=1;}
}

fun_ld0()
{
if(OAB<8)
{
br1<<=1;
cmd();
b0=M8004;
}
OAB++;
}

fun_ld2()
{
if(OAB<8)
{
br1<<=1;
cmd();
b0=M8005;
}
OAB++;
}

fun_ld4()
{
if(OAB<8)
{
br1<<=1;
cmd();
b0=M8006;
}
OAB++;
}

fun_ld8()
{
if(OAB<8)
{
br1<<=1;
cmd();
b0=~M8004;
}
OAB++;
}

fun_ld10()
{
if(OAB<8)
{
br1<<=1;
cmd();
b0=~M8005;
}
OAB++;
}

fun_ld12()
{
if(OAB<8)
{
br1<<=1;
cmd();
b0=~M8006;
}
OAB++;
}

fun_and0()
{
cmd();
b0&=M8004;
}

fun_and2()
{
cmd();
b0&=M8005;
}

fun_and4()
{
cmd();
b0&=M8006;
}

fun_and8()
{
cmd();
b0&=~M8004;
}

fun_and10()
{
cmd();
b0&=~M8005;
}

fun_and12()
{
cmd();
b0&=~M8006;
}

fun_or0()
{
cmd();
b0|=M8004;
}

fun_or2()
{
cmd();
b0|=M8005;
}

fun_or4()
{
cmd();
b0|=M8006;
}

fun_or8()
{
cmd();
b0|=~M8004;
}

fun_or10()
{
cmd();
b0|=~M8005;
}

fun_or12()
{
cmd();
b0|=M8006;
}


/*
fun_plsy()
{
}

fun_plsr()
{
}
*/
/*
fun_mov()
{
take_data();
wr1=dr2*256+dr1;
take_code();
dr3=s*16+s;
dr4=(s*16+s)-0x80;
take_code();
dr5=s*16+s;
dr6=(s*16+s)-0x80;
if(b0)if(~M8007)
{mov_data();}
}

fun_movp()
{
sb10=b0&&take_bitc(FR,PFSD);
take_data();
take_code();
dr3=s*16+s;
dr4=(s*16+s)-0x80;
take_code();
dr5=s*16+s;
dr6=(s*16+s)-0x80;
if(PFSD<128)
{if(sb10)if(~M8007) {mov_data();}
out_bitc(FR,PFSD,b0);
}
PFSD++;   
}

fun_inc()
{
if(b0)if(!take_addr())
{
   dram++;
}
}

fun_dec()
{
if(b0)if(!take_addr())
{
   dram--;
}
}

fun_add()
{
take_data();
wr2=wr1;
take_data();
wr2=wr2+wr1;
if(b0)if(!M8007)if(!take_addr())
{
    dram=wr2;
}
}

fun_sub()
{
take_data();
wr2=wr1;
take_data();
wr2=wr2-wr1;
if(b0)if(!M8007)if(!take_addr())
{
    dram=wr2;
}
}
*/
take_1()
{
switch(codeH)
{
   case 0x00:
   {
    if(codeL==0x08)             fun_pls();
    if(codeL==0x09)             fun_plf();
    if(codeL==0x0C)                 fun_rst_ct();
   
    if(codeL==0x0F)          M8003=1;
    //if(codeL==0x28)      fun_mov();

    //if(codeL==0x38)      fun_add();
    //if(codeL==0x3A)             fun_sub();

    //if(codeL==0x40)      fun_inc();
    //if(codeL==0x42)             fun_dec();

    if(codeL==0x94)      fun_alt();
   } break;
case 0x01:
{
   if(codeL==0xCA)             fun_ldp();
   else if(codeL==0xCB)      fun_ldf();       
   else if(codeL==0xCC)             fun_andp();
   else   if(codeL==0xCD)           fun_andf();
   else   if(codeL==0xCE)           fun_orp();
   else   if(codeL==0xCF)      fun_orf();
   
   else   if(codeL==0xD0)      fun_ld0();
   else   if(codeL==0xD2)      fun_ld2();
   else   if(codeL==0xD4)      fun_ld4();
   else   if(codeL==0xD8)      fun_ld8();
   else   if(codeL==0xDA)      fun_ld10();
   else   if(codeL==0xDC)      fun_ld12();

   else   if(codeL==0xE0)       fun_and0();
   else   if(codeL==0xE2)       fun_and2();
   else   if(codeL==0xE4)       fun_and4();
   else   if(codeL==0xE8)       fun_and8();
   else   if(codeL==0xEA)       fun_and10();
   else   if(codeL==0xEC)       fun_and12();

   else   if(codeL==0xF0)       fun_or0();
   else   if(codeL==0xF2)       fun_or2();
   else   if(codeL==0xF4)       fun_or4();
   else   if(codeL==0xF8)       fun_or8();
   else   if(codeL==0xFA)       fun_or10();
   else   if(codeL==0xFC)       fun_or12();
}break;
case 0x02: break;
case 0x03: break;
case 0x04: break;
case 0x05: break;
case 0x06: fun_out_t();break;
case 0x07: break;
case 0x08: break;
case 0x09: break;
case 0x0A: break;
case 0x0B: break;
case 0x0C: break;
case 0x0D: break;
case 0x0E: fun_out_c();break;
case 0x0F: break;

case 0x10:
{//if(codeL==0x28) fun_movp();
   if(codeL==0x94) fun_altp();}break;

case 0x11: break;
case 0x12: break;
case 0x13: break;
case 0x14: break;
case 0x15: break;
case 0x16: break;
case 0x17: break;
case 0x18: break;
case 0x19: break;
case 0x1A: break;
case 0x1B: break;
case 0x1C: break;
case 0x1D: break;
case 0x1E: break;
case 0x1F: break;
case 0x20: break;
case 0x21: break;
case 0x22: break;
case 0x23: break;
case 0x24:{if(OAB<8){br1<<=1;if(codeL<16)b0=take_bitc(X,codeL);}OAB++; } break;
case 0x25:{if(OAB<8){br1<<=1;if(codeL<16)b0=take_bitc(Y,codeL);}OAB++; } break;
case 0x26:{if(OAB<8){br1<<=1;if(codeL<16)b0=take_bitc(T,codeL);}OAB++; } break;
case 0x27: break;
case 0x28:{if(OAB<8){br1<<=1;if(codeL<128) b0=take_bitc(M,codeL);}OAB++; } break;
case 0x29: break;
case 0x2A: break;
case 0x2B: break;
case 0x2C: break;
case 0x2D: break;
case 0x2E:{if(OAB<8){br1<<=1;if(codeL<16)b0=take_bitc(C,codeL);}OAB++; }break;
case 0x2F:{if(OAB<8){br1<<=1;if(codeL<64)b0=take_bitc(M8,codeL);}OAB++; }break;

case 0x30:break;
case 0x31:break;
case 0x32:break;
case 0x33:break;
case 0x34:{if(OAB<8){br1<<=1;if(codeL<16)b0=~take_bitc(X,codeL);}OAB++; }break;
case 0x35:{if(OAB<8){br1<<=1;if(codeL<16)b0=~take_bitc(Y,codeL);}OAB++; }break;
case 0x36:{if(OAB<8){br1<<=1;if(codeL<16)b0=~take_bitc(T,codeL);}OAB++; }break;
case 0x37:break;
case 0x38:{if(OAB<8){br1<<=1;if(codeL<128) b0=~take_bitc(M,codeL);}OAB++; }break;
case 0x39:break;
case 0x3A:break;
case 0x3B:break;
case 0x3C:break;
case 0x3D:break;
case 0x3E:{if(OAB<8){br1<<=1;if(codeL<16)b0=~take_bitc(C,codeL);}OAB++; }break;
case 0x3F:{if(OAB<8){br1<<=1;if(codeL<64)b0=~take_bitc(M8,codeL);}OAB++; }break;

case 0x40:break;
case 0x41:break;
case 0x42:break;
case 0x43:break;
case 0x44:{if(codeL<16)b0&=take_bitc(X,codeL); } break;
case 0x45:{if(codeL<16)b0&=take_bitc(Y,codeL); }break;
case 0x46:{if(codeL<16)b0&=take_bitc(T,codeL); }break;
case 0x47:break;
case 0x48:{if(codeL<128) b0&=take_bitc(M,codeL);}break;
case 0x49:break;
case 0x4A:break;
case 0x4B:break;
case 0x4C:break;
case 0x4D:break;
case 0x4E:{if(codeL<16)b0&=take_bitc(C,codeL);}break;
case 0x4F:{if(codeL<64)b0&=take_bitc(M8,codeL);}break;
}
}
take_2()
{dr8=codeH+0xB0;
switch(dr8)
{
case 0x0:break;
case 0x1:break;
case 0x2:break;
case 0x3:break;
case 0x4:{if(codeL<16)b0&=~take_bitc(X,codeL);}break;
case 0x5:{if(codeL<16)b0&=~take_bitc(Y,codeL);}break;
case 0x6:{if(codeL<16)b0&=~take_bitc(T,codeL);}break;
case 0x7:break;
case 0x8:{if(codeL<128) b0&=~take_bitc(M,codeL); }break;
case 0x9:break;
case 0xA:break;
case 0xB:break;
case 0xC:break;
case 0xD:break;
case 0xE:{if(codeL<16)b0&=~take_bitc(C,codeL);}break;
case 0xF:{if(codeL<64)b0&=~take_bitc(M8,codeL);}break;
case 0x10:break;
case 0x11:break;
case 0x12:break;
case 0x13:break;
case 0x14:{if(codeL<16)b0|=take_bitc(X,codeL);}break;
case 0x15:{if(codeL<16)b0|=take_bitc(Y,codeL); }break;
case 0x16:{if(codeL<16)b0|=take_bitc(T,codeL); }break;
case 0x17:break;
case 0x18:{if(codeL<128) b0|=take_bitc(M,codeL); }break;
case 0x19:break;
case 0x1A:break;
case 0x1B:break;
case 0x1C:break;
case 0x1D:break;
case 0x1E:{if(codeL<16)b0|=take_bitc(C,codeL); }break;
case 0x1F:{if(codeL<64)b0|=take_bitc(M8,codeL); }break;

case 0x20:break;
case 0x21:break;
case 0x22:break;
case 0x23:break;
case 0x24:{if(codeL<16)b0|=~take_bitc(X,codeL); }break;
case 0x25:{if(codeL<16)b0|=~take_bitc(Y,codeL); }break;
case 0x26:{if(codeL<16)b0|=~take_bitc(T,codeL); }break;
case 0x27:break;
case 0x28:{if(codeL<128) b0|=~take_bitc(M,codeL); }break;
case 0x29:break;
case 0x2A:break;
case 0x2B:break;
case 0x2C:break;
case 0x2D:break;
case 0x2E:{if(codeL<16)b0|=~take_bitc(C,codeL); }break;
case 0x2F:{if(codeL<64)b0|=~take_bitc(M8,codeL); }break;
}
}

take_3()
{dr8=codeH+0x40;
switch(dr8)
{
case 0x0:break;
case 0x1:break;
case 0x2:break;
case 0x3:break;
case 0x4:break;
case 0x5:{if(codeL<16)out_bitc(Y,codeL,b0);}break;
case 0x6:break;
case 0x7:break;
case 0x8:{if(codeL<128) out_bitc(M,codeL,b0);}break;
case 0x9:break;
case 0xA:break;
case 0xB:break;
case 0xC:break;
case 0xD:break;
case 0xE:break;
case 0xF:break;

case 0x10:break;
case 0x11:break;
case 0x12:break;
case 0x13:break;
case 0x14:break;   
case 0x15: {if(codeL<16)if(b0) out_bitc(Y,codeL,1);}break;
case 0x16:break;
case 0x17: break;
case 0x18: {if(codeL<16)if(b0) out_bitc(M,codeL,1);}break;
case 0x19:break;
case 0x1A:break;
case 0x1B:break;
case 0x1C:break;
case 0x1D:break;
case 0x1E:break;
case 0x1F:break;

case 0x20:break;
case 0x21:break;
case 0x22:break;
case 0x23:break;
case 0x24:break;
case 0x25:{if(codeL<16)if(b0) out_bitc(Y,codeL,0);}break;
case 0x26:break;
case 0x27:break;
case 0x28:{if(codeL<16)if(b0) out_bitc(M,codeL,0);}break;
case 0x29:break;
case 0x2A:break;
case 0x2B:break;
case 0x2C:break;
case 0x2D:break;
case 0x2E:break;
case 0x2F:break;

case 0x30:break;
case 0x31:break;
case 0x32:break;
case 0x33:break;
case 0x34:break;
case 0x35:break;
case 0x36:break;
case 0x37:break;
case 0x38:break;
case 0x39:break;
case 0x3A:break;
case 0x3B:break;
case 0x3C:break;
case 0x3D:break;
case 0x3E:break;
case 0x3F:break;
   {
   if(codeL==0xF8){if(b0){br1>>=1;}else{br1>>=1;b0=0;}}//anb
   else if(codeL==0xF9){if(b0){br1>>=1;b0=1;}else{br1>>=1;}}//orb
   else if(codeL==0xFA){if(MPPD<8){br2<<=1;b10=b0;MPPD++;}}
   else if(codeL==0xFB){b0=b10;}
   else if(codeL==0xFC){if(MPPD>0){b0=b10;MPPD--;}}
   else if(codeL==0xFF){nop;nop;nop;nop;nop;} //nop
   } break;
}
}

/******************周期扫描****************************/
scan()
{
take_code();   //取指令
codeH=s*16+s;
codeL=s*16+s;
if(codeH<0x50) take_1();
else if(codeH>=0x50)if(codeH<0x80) take_2();
else if(codeH>=0xC0) take_3();
}

/*****************************/

stop_plc()
{
Y0=1;
Y1=1;
Y2=1;
Y3=1;
Y4=1;
Y5=1;
Y6=1;
run_lamp=1;
M8000=0;               //复位PLC运行位
TR0=0;
ET0=0;
plc_stop();
}

void com()
{
byte i;
//PLC型号版本
// _00E 02 02_6C
//02 30 30 45 30 32 30 32 03 36 43   
//_6266_D7        FX1N
//_F65E_F9        FX2N
if(v==0X30)if(v==0X30)if(v==0X45)if(v==0X30)
if(v==0X32)if(v==0X30)if(v==0X32)if(v==0X03)
if(v==0X36)if(v==0X43)
{
for(i=0;i<200;i++)v=0;
send(0X02);
send(0X36);
send(0X32);
send(0X36);
send(0X36);
send(0X03);
send(0X44);
send(0X37);

}

//_E01 8000 40_D5
//02 45 30 31 38 30 30 30 34 30 03 44 35       
//02 30 38 30 30 44 39 31 44 30 30 30 30 30 30 30 30 32 30 32 30 32 30 32 30 32
//    30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32
//    30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32
//    30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30
//    46 34 30 39 46 46 30
//    42 46 34 30 31 45 37
//    30 33 36 34 30 45 43
//    37 30 45 44 43 30 45
//    46 46 30 45 03 46 33
if(v==0X45)if(v==0X30)if(v==0X31)if(v==0X38)
if(v==0X30)if(v==0X30)if(v==0X30)if(v==0X34)
if(v==0X30)if(v==0X03)if(v==0X44)if(v==0X35)
{//固定通讯协议
for(i=0;i<200;i++)v=0;
send(0X02);
send(0X30);
send(0X38);
send(0X30);
send(0X30);
send(0X44);
send(0X39);
send(0X31);
send(0X44);
for(i=8;i>0;i--)
{send(0X30);}
for(i=40;i>0;i--)
{
   send(0X32);
   send(0X30);
}

send(0X46);
send(0X34);
send(0X30);
send(0X39);
send(0X46);
send(0X46);
send(0X30);

send(0X42);
send(0X46);
send(0X34);
send(0X30);
send(0X31);
send(0X45);
send(0X37);

send(0X30);
send(0X33);
send(0X36);
send(0X34);
send(0X30);
send(0X45);
send(0X43);

send(0X37);
send(0X30);
send(0X45);
send(0X44);
send(0X43);
send(0X30);
send(0X45);

send(0X46);
send(0X46);
send(0X30);
send(0X45);
send(0X03);
send(0X46);
send(0X33);
}

//_E0180401C_E9
//02 45 30 31 38 30 34 30 31 43 03 45 39
//02 39 30 30 31 46 45 30 33 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
//30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
//30 03 42 42
if(v==0X45)if(v==0X30)if(v==0X31)if(v==0X38)
if(v==0X30)if(v==0X34)if(v==0X30)if(v==0X31)
if(v==0X43)if(v==0X03)if(v==0X45)if(v==0X39)
{//固定通讯协议
for(i=0;i<200;i++)v=0;
send(0X02);
send(0X39);
send(0X30);
send(0X30);
send(0X31);
send(0X46);
send(0X45);
send(0X30);
send(0X33);

   for(i=48;i>0;i--)
    {send(0X30);}

send(0X03);
send(0X42);
send(0X42);
}
//PLC RUN/STOP_E00 01C0 01_DD
//02 45 30 30 30 31 43 30 30 31 03 44 44
if(v==0X45)if(v==0X30)if(v==0X30)if(v==0X30)
if(v==0X31)if(v==0X43)if(v==0X30)if(v==0X30)
if(v==0X31)if(v==0X03)if(v==0X44)if(v==0X44)
{//固定通讯协议
    for(i=0;i<200;i++)v=0;
        if(!M8000){
                send(0X02);
            send(0X30);
            send(0X41);
            send(0X03);
            send(0X37);
            send(0X34);
                          }else{ stop_plc();
                                 send(2);
                                       send(0X30);
                     send(0X39);
                     send(0X03);
                     send(0X36);
                     send(0X43);
                                }
}

//E00 0E06 02_E5
// 02 45 30 30 30 45 30 36 30 32 03 45 35
// 02 31 30 30 30 03 43 34//固定通讯协议
if(v==0X45)if(v==0X30)if(v==0X30)if(v==0X30)
if(v==0X45)if(v==0X30)if(v==0X36)if(v==0X30)
if(v==0X32)if(v==0X03)if(v==0X45)if(v==0X35)
{
for(i=0;i<200;i++)v=0;
send(0X02);
send(0X31);
send(0X30);
send(0X30);
send(0X30);
send(0X03);
send(0X43);
send(0X34);

}

//PLC密码        _E01 8008 08 _E1
//SEND:02 45 30 31 38 30 30 38 30 38 03 45 31
//ACK: 02 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 03 31 33        无密码
if(v==0X45)if(v==0X30)if(v==0X31)if(v==0X38)
if(v==0X30)if(v==0X30)if(v==0X38)if(v==0X30)
if(v==0X38)if(v==0X03)if(v==0X45)if(v==0X31)
{        //固定通讯协议
   for(i=0;i<200;i++)v=0;
   send(0X02);
   for(i=8;i>0;i--)
    {
   send(0X32);
   send(0X30);
    }
send(0X03);
send(0X31);
send(0X33);
}



//_E0180002E_E8
//SEND: 02 45 30 31 38 30 30 30 32 45 03 45 38
if(v==0X45)if(v==0X30)if(v==0X31)if(v==0X38)
if(v==0X30)if(v==0X30)if(v==0X30)if(v==0X32)
if(v==0X45)if(v==0X03)if(v==0X45)if(v==0X38)
{//固定通讯协议
for(i=0;i<200;i++)v=0;
send(0X02);
send(0X30);
send(0X38);
send(0X30);
send(0X30);
send(0X43);
send(0X35);
send(0X44);
send(0X43);
for(i=8;i>0;i--)
{send(0X30);}
for(i=38;i>0;i--)
{
   send(0X32);
   send(0X30);
}

send(0X03);
send(0X44);
send(0X36);

}

//E01 802E 2E _FF
if(v==0X45)if(v==0X30)if(v==0X31)if(v==0X38)
if(v==0X30)if(v==0X32)if(v==0X45)if(v==0X32)
if(v==0X45)if(v==0X03)if(v==0X46)if(v==0X46)
{//固定通讯协议
for(i=0;i<200;i++)v=0;
send(0X02);
send(0X32);
send(0X30);
send(0X32);
send(0X30);
send(0X46);
send(0X34);

send(0X30);
send(0X39);
send(0X46);
send(0X46);
send(0X30);
send(0X42);
send(0X46);
send(0X34);

send(0X30);
send(0X31);
send(0X45);
send(0X37);
send(0X30);
send(0X33);
send(0X36);
send(0X34);

send(0X30);
send(0X45);
send(0X43);
send(0X37);
send(0X30);
send(0X45);
send(0X44);
send(0X43);

send(0X30);
send(0X45);
send(0X46);
send(0X46);
send(0X30);
send(0X45);
send(0X39);
send(0X30);

send(0X30);
send(0X31);
send(0X46);
send(0X45);
send(0X30);
send(0X33);

for(i=48;i>0;i--)
{send(0X30);}
send(0X03);
send(0X45);
send(0X35);

}

//固定通讯码
//E7250E_5b
//02 45 37 32 35 30 45 03 35 42
//06
if(v==0x45)if(v==0x37)if(v==0x32)if(v==0x35)
if(v==0x30)if(v==0x45)if(v==0x03)if(v==0x35)if(v==0x42)
{
   for(i=0;i<200;i++)v=0;
   send(0X06);
}

//固定通讯码
//_E7760E_61
//02 45 37 37 36 30 45 03 36 31
if(v==0X45)if(v==0X37)if(v==0X37)if(v==0X36)
if(v==0X30)if(v==0X45)if(v==0X03)if(v==0X36)
if(v==0X31)
{
   for(i=0;i<200;i++)v=0;
   send(0X06);
}

/* 读取一段程序
SEND: 024530 3138 30 35    43   34 300345 44
STX      CMD        单元一                      字数        ETX       SUM
步数=字数/2(16位机一步占两个字,8位机一步占4个字节)
字节数=字数*2
805(基数)单元一
ACK: 02N个字节 03       两个校验码
*/
if(v==0X45)if(v==0X30)if(v==0X31)if(v==0X43)if(v==3)
                {
                  wr1=((HEX[(v)]*256+HEX[(v)]*16+HEX[(v)])-0x805)/4;//单元号 400 共8000步
                  dr8=(HEX[(v)]*16+HEX[(v)])*2;                        //字节数<128=(字数*2(一个单元最多64字))*2                              
                  wr2=0x2800+wr1*128;                                                                             //存储器首地址
                  for(i=0;i<200;i++)v=0;
                  send(2);
                  dr3=0;   
                  if(wr1<16){ ISP_CONTR=0x80;
                                          ISP_CMD =1;                     
                                      for(i=dr8;i>0;i--)
                                     {   ISP_ADDRH=wr2/256;
                                ISP_ADDRL=wr2%256;
                                                       ISP_TRIG=0x46;
                                ISP_TRIG=0xb9;
                                nop;
                                                       dr7=ISP_DATA;
                           send(dr7);
                                                     dr3=dr3+dr7;
                                                     wr2++;
                                           }
                        ISP_CONTR=0;
                                                ISP_CMD=0;
                                                ISP_TRIG=0;
                                   }
                                else{for(i=dr8;i>0;i--)
                                     {
                                          send(0x46);
                                          dr3=dr3+0x46;
                                     }}
              send(3);
                  dr3=dr3+3;
                  send(ASC);
                  send(ASC);
                }
/*
SEND: 02 45 31 31 38 30 35   43   3030       (字节) 03两个校验码
ACK:06                           单元号                (步数=字数/2)   步数*4
*/       
if(v==0x45)if(v==0x31)if(v==0x31)if(v==0x43)
{
        wr1=((HEX[(v)]*256+HEX[(v)]*16+HEX[(v)])-0x805)/4; //单元号 STC12C5410 2K字节,500步
        dr8=(HEX[(v)]*16+HEX[(v)])*2;                         //字节数<128=(字数*2(一个单元最多64字))*2                                              
        if(M8001)
      { M8001=0;
          dr3=0x28;//程序存储器0页地址        每页512字节
                ISP_CONTR=0x80;
      ISP_CMD =3;
      for(i=4;i>0;i--)
         { ISP_ADDRH = dr3;          //程序存储器页地址
             ISP_ADDRL = 0;
                       EA=0;
             ISP_TRIG=0x46;
             ISP_TRIG=0xb9;
             _nop_();
                       EA=1;
                       dr3+=2;
                   }ISP_CONTR=0;
                           ISP_CMD=0;
                           ISP_TRIG=0;
      }

                  if(wr1<16)
                     { wr2=0x2800+wr1*128;
                          
                           for(i=0;i<dr8;i++)
                             {   ISP_CONTR=0x80;
                                   ISP_CMD =2;
                                           dr4=v;
                     ISP_ADDRH=wr2/256;
                     ISP_ADDRL=wr2%256;
                                           EA=0;
                     ISP_DATA=dr4;
                     ISP_TRIG=0x46;
                     ISP_TRIG=0xb9;
                                           EA=1;
                                           wr2++;
                                           dr5++;
                   }
                                   ISP_CONTR=0;
                                   ISP_CMD=0;
                                   ISP_TRIG=0;
                     }
               for(i=0;i<200;i++)v=0;
               send(6);
          }
//_E00E1406_E8
// 02 45 30 30 30 45 31 34 30 36 03 45 38
// 02 30 41 30 30 30 41 30 30 30 41 30 30 03 37 36
       if(v==0x45)if(v==0x30)if(v==0x30)if(v==0x30)
             if(v==0x45)if(v==0x31)if(v==0x34)if(v==0x30)if(v==0x36)
                   if(v==03)
               {
                     for(i=0;i<200;i++)v=0;
                       send(2);
                       send(0x30);
                       send(0x41);
                       send(0x30);
                       send(0x30);
                       send(0x30);
                       send(0x41);
                       send(0x30);
                       send(0x30);
                       send(0x30);
                       send(0x41);
                       send(0x30);
                       send(0x30);
                       send(3);
                       send(0x37);
                       send(0x36);                  
               }

   
//_E8760E_62
//02 45 38 37 36 30 45 03 36 32
if(v==0X45)if(v==0X38)if(v==0X37)if(v==0X36)
if(v==0X30)if(v==0X45)if(v==0X03)if(v==0X36)
if(v==0X32)
{
   for(i=0;i<200;i++)v=0;
   send(0X06);   
}

//_B_45
//SEND:02 42 03 34 35       开始校验
//ACK:06
if(v==0x42)if(v==0x03)if(v==0x34)if(v==0x35)
                  {
                  for(i=0;i<200;i++)v=0;
                  send(6);
                        ISP_CONTR=sofint_rst;    //通讯结束软复位到应用程序区执行程序
                  }
}

shangxf 发表于 2009-4-26 12:13:38

不错

heky 发表于 2009-4-26 12:52:13

整理的好一点,有点PLC的意思了。起码比X工的好。赞一个。

chenxue 发表于 2009-4-26 13:00:43

兄弟,辛苦了!很不错!

zhangzq71 发表于 2009-4-26 13:02:19

请问有原理图吗?

qfmcu 发表于 2009-4-26 13:49:16

你好,问下,这两种都是用解释方法吗?stm32的速度快可以理解,51的是不是速度会慢呢?在实际应用中。

xlian541426 发表于 2009-4-26 18:09:07

两种都是解释型的。2051做的梯形图在几百步的话完全没问题,只要执行周期不超过100ms在不是特殊情况下应用完全可以。我的2051控制板在一些设备上应用已有两年的了。有段时间以PIC24H写了一点编译型的,但没写完,等有时间了整理下放上来吧。

xlian541426 发表于 2009-4-26 18:13:01

以上的通讯程序是以过验证的,STM32是在试验板上验证程序上传、下载、在线监控等功能,2051的是在控制板上应用。

shanyan 发表于 2009-4-26 18:25:06

牛人!我顶你!

zajia 发表于 2009-4-26 18:49:24

xlian541426 发表于 2009-4-27 18:38:59

三菱PLC编程口通讯协议说明:
STX  起始符(ASCII 02)
addr 地址(两个字节低字节在前)转换成为四字节ASCII码
bytes 字节数(1字节)转换成为两字节ASCII码
data  数据(1个字节转换成为两字节ASCII码)
ETX  结束符(ASCII 03)
SUM  和校验(1字节)(转换成为两字节ASCII码)

兼容FX0s,1s
STX '0' addr bytes ETX SUM  
STX '1' addr bytes data...data ETX SUM 

FX2n 
STX 'E00' addr bytes ETX SUM           //读PLC内存地址0x0000_0x7FFF
STX 'E01' addr bytes data...data ETX SUM    //写PLC内存地址0x0000_0x7FFF
STX 'E10' addr bytes ETX SUM          //读指令地址0x8000_0xFFFF
STX 'E11' addr bytes data...data ETX SUM   //写指令地址0x8000_0xFFFF

PLC监控及触摸屏通讯
STX '7' addr ETX SUM    //强制位
STX '8' addr ETX SUM  //强制位
STX 'E7' addr ETX SUM    //强制位
STX 'E8' addr ETX SUM  //强制位
PLC监控指令写入PLC内存地址0x1400开始 
读取PLC监控数据(位,字节,字)在PLC内存地址0x1790开始       

xlian541426 发表于 2009-4-27 18:44:16

以上内容是本人历时数个月研究出的结果,现在准备在软硬件全部完成后开源提供,有兴趣的朋友请联系:18928105948@189.cn

cgbabc 发表于 2009-4-27 20:14:02

不错,不错,支持一个

cyxavr 发表于 2009-4-27 21:09:22

我前两个星期还正在弄FX1S的,而且还有很多弄不明白的。你的现在一出,我惚 然 大悟啊。
唉,水平远远比不上楼主啊,只有向楼主学习啦。

songmengda 发表于 2009-4-28 10:41:15

绝对的强人,而且绝对的无私,我们其实大多数不是想商业化这个东西,因为你的工艺不行的,我们就是想做个,看看怎么实现的,就当高级玩具了,呵呵,
绝对的顶啊!
绝对的顶啊!
绝对的顶啊!
绝对的顶啊!
绝对的顶啊!

shanyan 发表于 2009-4-28 12:25:46

你能不能留个其它的邮箱,发邮件给你报错.说地址格式错误

xlian541426 发表于 2009-4-28 19:23:29

共同进步
欢迎探讨 8289490@zsnet.com
          18928105948@189.cn

theta 发表于 2009-4-30 17:34:48

牛人! 请接收我的敬意!!!

dotos 发表于 2009-5-1 01:08:36

的确是好东西 不过这样的源代码看起来不方便
不知楼主能否打包发上来?

qinyp 发表于 2009-5-1 20:37:30

这种好帖子不顶一下是不行的

hottest_boy 发表于 2009-5-4 20:48:07

谢谢分享。

qd118 发表于 2009-5-4 21:25:03

是我看到自制PLC最本质的东东,谢谢!

dragonx 发表于 2009-5-5 20:39:50

写出这些牛码,我还需要多久呢!楼主真能干!

qiaoqiang 发表于 2009-5-6 15:45:41

等樓主的東西好久了,哈哈

wisebaby 发表于 2009-5-15 14:21:48

【17楼】 yy888 许意义

的确不错.

我力求更好!

bkkman 发表于 2009-5-16 10:14:32

赞一个!顶一把!
确实是开源以来最好的贴子.

zsl602 发表于 2009-5-17 00:29:03

这种好帖子不顶一下是不行的!谢谢分享。

xlian541426 发表于 2009-5-17 10:13:11

IO板
点击此处下载 ourdev_445434.rar(文件大小:87K) (原文件名:PCB2.rar)

zhike200 发表于 2009-5-17 10:47:45

plc的资料开放的越来越多了,国内生产PLC也多了,但市场格局好象没什么变化。国际品牌依旧主流。

igoal 发表于 2009-5-17 12:14:47

格局不会那么容易改变的,现在搞国产PLC除非做特殊行业的定制服务,比如说船舶专用,军工专用,电力专用等等,否则没有前途的。

fugeone 发表于 2009-5-17 18:54:32

很OK啊,几时直接COPY楼主的板子,做一个试一试,呵呵。。。

介意不?

wenunit 发表于 2009-5-18 13:55:31

能写是牛,能公布更牛啊...

我基于STM32仿FX3U的PLC已进入应用阶段了,
编程和仿真用GX,下载用自己的程序,三菱的存储格式不适合单片机.

不过还是要佩服一下楼主,能公开这些东西!

terence-plc 发表于 2009-6-1 01:28:43

冒昧的问一下,楼主的用户程序准备放哪里.

bkkman 发表于 2009-6-1 10:11:13

【42楼】 igoal
格局不会那么容易改变的,现在搞国产PLC除非做特殊行业的定制服务,比如说船舶专用,军工专用,电力专用等等,否则没有前途的。


问题是在国内PLC无论性能、可靠性达到或超过国外的,要是在DIY中沾些露水小利,比便宜的话,永远没有前途。在一大群DIY PLC者中,总会有擎起民族工业的大旗的人。

ggddll 发表于 2009-6-6 22:46:17

好!真好!

jiangsudanyang 发表于 2009-6-10 11:08:47

我狂顶 真是太好了

ljgvictory 发表于 2009-6-11 12:27:54

mark

stefgq 发表于 2009-6-18 20:47:21

顶一下

maoxia007 发表于 2009-6-18 21:42:58

佩服佩服,学习中~~~

cqfeiyu 发表于 2009-7-11 22:04:27

佩服,狂顶

hjian508 发表于 2009-7-11 22:27:14

mark

cqfeiyu 发表于 2009-7-12 15:06:22

感觉楼主的CPU的IO利用率太低了,100个脚的CPU只用了PB0-15输入,PC0-15输出,其它的用作指示灯了
可不可以像商业PLC一样把输入按组1,组2...,输出也按组1,2,3...,每组公用一个COM,这样可以增加输入,输出点数,增加SPI接口,I2C接口,串口

xlian541426 发表于 2009-7-18 08:50:07

PLC开发套件还有最后5套,已付款的朋友在月底可以收到套件

xlian541426 发表于 2009-8-2 13:22:43

台湾的吕先生,请尽快将你的统编号或身份证号发给我,你的PLC套件在快递公司,等你的统编号或身份证号到了才能发货,否则发不了。

xlian541426 发表于 2009-8-4 23:01:05

收到套件的朋友将姓名发到18928105948@189.cn,索取源代码及开发环境。

xlian541426 发表于 2009-8-4 23:09:06

关注PLC开发套件的朋友,20套开发套件已被关注DIY PLC 的朋友购完,不再推出了,请各位关注PLC开发的朋支不要再发邮件过来了。已拿到PLC开发套件的朋友请关注后续开发,将在一段时间后将逐步完善指令代码,完善后的指令代码将发布在本论坛,请各位朋友自地下载更新指令解释程序。

sunmj 发表于 2009-8-21 10:34:08

到现在没收到源代码及开发环境,哪位大侠能帮帮我?
我的邮箱:sunmj@sohu.com

zhcool_521 发表于 2009-8-21 16:09:36

原理图呢?

myplc 发表于 2009-8-21 16:17:19

我有一套可转让,包括软硬件;QQ450734344

DUCH 发表于 2009-8-28 08:21:53

这个要学习

DUCH 发表于 2009-8-28 08:24:24

请问xlian541426,
基于STM32的PLC之CPU板的上位机软件可以用三菱的上位机软件吗?请回答,谢谢!

zhcool_521 发表于 2009-9-6 10:43:08

楼主咋不现身呢?发邮件也不回。。。。

xlian541426 发表于 2009-9-8 17:23:32

回复楼上的,最近没时间,上面那个东东是基于三菱开发环境的PLC.有事请发出件至18928105948@189.cn

zhcool_521 发表于 2009-9-8 18:38:21

我发过邮件,不知道 你看到没有?

fp008 发表于 2009-9-22 10:48:36

STM32的PLC还有套板买吗?

hokwah 发表于 2010-2-22 23:11:36

非常不错,不知稳定性方面怎样。可用才是硬道理!

zhcool_521 发表于 2010-4-21 10:13:47

这plc 还有套件买吗?

mylovemcu 发表于 2010-5-23 10:11:24

楼上:
    还有套件买么?我想买一套

mylovemcu 发表于 2010-5-23 11:14:55

那位有的,如果不用也可以转让给我

limaotaizi 发表于 2010-5-23 13:41:09

很好~~谢谢~~

mylovemcu 发表于 2010-6-6 11:09:38

那位有要转让的,可以转让给我,或者给小弟一份资料也可以,小弟就不胜感激了
电话:18962143280   EMAIL:jian-c@nsk.com

zhaobo 发表于 2010-9-17 23:41:41

都没动静了

sun8406 发表于 2010-9-28 11:00:11

牛,mark

liouravr 发表于 2010-11-15 14:26:49

很强悍...........

MA_J 发表于 2010-12-16 13:08:58

MARK

ljt8015 发表于 2010-12-16 13:36:41

有开发板出售不?

gpfrank 发表于 2011-1-19 14:39:14

MARK

fengwan008 发表于 2011-1-28 10:08:54

有没有人要转让QQ179892737

liangyurongde 发表于 2011-1-28 11:19:06

mark

wuyun66 发表于 2011-3-7 01:17:06

怎么不讨论了!

STM32_NXP 发表于 2011-3-9 12:28:04

还在继续吗?

szyszy 发表于 2011-3-17 11:35:04

mark

anxiangbo 发表于 2011-3-17 11:47:56

mark

wjhdocter 发表于 2011-3-19 15:31:54

mark 敬佩之情如长江之水源源不绝!!!

zhangjinxing 发表于 2011-8-19 12:17:34

mark

wg06041105 发表于 2011-9-8 18:59:35

回复【楼主位】xlian541426
-----------------------------------------------------------------------

楼主强悍!!

lyk07351 发表于 2011-12-3 15:55:57

很不错

wangcuiling 发表于 2012-1-4 15:16:47

我也用的是stm32做PLC,支持下

raosibin 发表于 2012-4-30 23:14:39

最近在了解PLC,标记

464839941xql 发表于 2012-5-17 11:59:47

高人!牛人!好人

liuruoshui 发表于 2012-6-10 10:18:06

绝对好贴!强顶!

szddg 发表于 2012-6-15 08:14:51

牛人               

fuliaokai 发表于 2012-6-15 08:41:46

这个帖子好长啊!!!

ivan283 发表于 2012-7-3 13:21:27

NB !好东西,必须顶!    除了CPU板应该还有其它的吧,楼主也请一并上传给俺们开开眼界

qq635274216 发表于 2012-7-11 15:50:28

绝对好贴啊

zhaoqingyu51 发表于 2012-7-25 10:20:26

mark,学习了。

foreng5908 发表于 2012-11-15 23:31:52

楼主的PLC是否商业化了?

judge 发表于 2012-12-17 15:07:15

谢谢楼主
页: [1] 2
查看完整版本: 基于STM32的PLC之CPU板划好了