搜索
bottom↓
回复: 111

基于STM32的PLC之CPU板划好了

[复制链接]

出0入0汤圆

发表于 2009-4-26 09:00:14 | 显示全部楼层 |阅读模式
点击此处下载 ourdev_439887.rar(文件大小:133K) (原文件名:PCB1.rar)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2009-4-26 10:01:18 | 显示全部楼层
这块板是用长河机箱的14-52壳体

出0入0汤圆

 楼主| 发表于 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硬件出错        STOP  D8061          
//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)定义出错
//6510  MC嵌套编号大小有误
//6511  中断输入和高速计数器输入重复
//M8066 STOP D8066
//6601  LD,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
//6603  MPS连续使用次数在13次以上
//6604  MPS,PRD,MPP关系出错
//6605  STL的连续使用次数在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
//6608  MC和MCR关系出错
//      MCR湍有编号
//      MC-MCR间有SRET,IRET,I(中断)
//6610  LD,LDI连续使用次数在9次以上
//6611  对LD,LDI指令而言,ANB,ORB指令数太多
//6612        对LD,LDI指令而言,ANB,ORB指令数太少
//6613        MPS连续使用次数在12次以上
//6614  无MPS
//6615  元MPP
//6616  MPS-MRD,MPP间的关系有错误
//6617  必须从总线开始的指令没有与总线连接(STL,RET,MCR,P,I,DI,EI,FOR,NEXT,SRET,IRET,FEND,END)
//6618  只能在主程中使用的指令出现在主程序之外(中断,子程序中)
//6619  FOR-NEXT间使用了(STL,RET,MC,MCR,I,IRET)
//6620        FOR-NEXT嵌套溢出
//6621  FOR-NEXT间关系错误
//6622  没有NEXT
//6623  没有MC
//6624  没有MCR
//6625  STL连续使用9次以上
//6626  STL-RET之间有(MC,MCR,I,IRET,SRET)
//6627  没有RET指令
//6628  在主程序中有不能用的指令(I,SRET,IRET)
//6629  无P,I
//6630  没用SRET,IRET
//6631  SRET位于不能使用的场合
//6632  FEND位于不能用的场合
//M8067 运算出错 RUN D8067
//6701  CJ,CALL没有跳转地址
//      在END指令后有标号
//      在FOR-NEXT间或子程序间有单独的标号
//6702  CALL嵌套次数在6次以上
//6703  中断的嵌套在3层以上
//6704  FOR-NEXT的嵌套次数在6次以上
//6705  应用指令的操作数在在目标元件外
//6706  应用指令的操作数地元件号范围和数据溢出
//6707  因设有设定文件寄存器参数而存取了文件寄存器
//6708  FORM/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
//0200  M512_M767
//0300        M768_M1023
//0400        M1024_M1279
//0500        M1280_M1535
//0600        M1536_M1791
//0700        M1792_M2047
//0800        M2048_M2303
//0900        M2304_M2559
//0A00  M2560_M2815
//0B00        M2816_M3071
//0C00  Y
//0D00
//0E00  M8000
//0F00  C0_C255
//1000  T0_T255
//1100
//1200  X
//1300
//1400  S0_S255
//1500  S256_S511
//1600  S512_SM767
//17E7  S798_S999
//1800
//2700
//2800
//3000
//////////////////////////////////////////////////
//0000 lit
//0001 daddr
//ZV02 lit+ZV
//ZV03 daddr+ZV
//00k4 kxbaddr           k=1...8
//ZVk5 kxbaddr+ZV  K=1...8
////////////////////////////////////////////////
//0000             NOP
//0001             FEND         
//0002 0000_17E7   LD  MYSCT       
//0003 0000_17E7   LDI MYSCT       
//0004 0000_17E7   AND MYSCT       
//0005 0000_17E7   ANI MYSCT
//0006 0000_17E7   OR  MYSCT
//0007 0000_17E7   ORI MYSCT
//0008 0000_17E7   LDP  XYMTC         
//0009 0000_17E7   LDF  XYMTC         
//000A 0000_17E7   ANP  XYMTC
//000B 0000_17E7   ANF  XYMTC           
//000C 0000_17E7   ORP  XYMTC   
//000D 0000_17E7   ORF  XYMTC                                                                                                                              4000_4FFE  RST 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





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

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

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

//000C  RST  C                 000C 8E01   RST C1
//      RST  T                 000C 8601   RST T1
//000D  RST  D                 000D 8600 8600  RST D0
//000F  END
            
//0010  CJ   P                 0010 8800 8000  CJ  P0
//                             0010 8804 8000  CJ  P2
//                             0010 8810 8000  CJ  P8
//0012  CALL P                 0012 8814 8000  CALL P10

//0014  SRET
//0016  IRET
//0018  EI
//001A  DI
//001C  FEND
//001E  WDT

//0020  FOR 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


//0028  MOV  S. 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
//                        
//0029  MOVD 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
//002A  SMOV                   002A 8602 8600 8004 8000 8002 8000 8604 8600 8003 8000 SMOV D1 K4 K2 D2 K3
//002C  CML                    002C 8600 8600 8400 8205 CML D0 K1Y0
//002D  DCML                   002D 8600 8600 8000 8000 8400 8205 8000 8000 DCML D0 K1Y0
//002E  BMOV                   002E 8600 8600 8614 8600 8005 8000  BMOV D0 D10 K5
//0030  FMOV                   0030 8000 8000 8600 8600 800A 8000  FMOV K0 D0 K10
//0031  DFMOV                  0031 8000 8000 8000 8000 8600 8600 8000 8000 800A 8000 8000 8000 DFMOV K0 D0 K10
//0038  ADD  S1. S2. D.        0038 8600 8600 8602 8600 8600 8800  ADD D0 D1 D1000
//0039  DADD S1. S2. D.        0039 8600 8600 8000 8000 800A 8000 8000 8000 8602 8600 8000 8000 ADDD D0 K100 D1
//003A  SUB  S1. S2. D.        003A 8600 8600 8602 8600 8600 8800  SUB D0 D1 D1000
//003B  DSUB S1. S2. D.        003B 8600 8600 8000 8000 800A 8000 8000 8000 8602 8600 8000 8000 SUBD D0 K100 D1
//003C  MUL  S1. S2. D.        003C 8600 8600 8602 8600 8600 8800  MUL D0 D1 D1000
//003D  DMUL S1. S2. D.        003D 8600 8600 8000 8000 800A 8000 8000 8000 8602 8600 8000 8000 MULD D0 K100 D1
//003E  DIV  S1. S2. D.        003E 8600 8600 8602 8600 8600 8800  DIV D0 D1 D1000
//003F  DDIV S1. S2. D.        003F 8600 8600 8000 8000 800A 8000 8000 8000 8602 8600 8000 8000 DIVD D0 K100 D1
//0040  INC  D.                0040 8600 8400 INC C0
//0041  DINC D.                0041 8600 8400 8000 8000 INCD C0
//0042  DEC  D.                0042 8600 8200 INC T0
//0043  DDEC D.                0043 8600 8200 8000 8000 DECD T0

//0060  ZRST D1. D2.           0060 8600 8600 86C8 8600  ZRST D0-D100
//0080  SPD  S.  n.  D.        0080 8400 8004 8064 8000 8600 8600 SPD X0 K100 D0
//0082  PLSY S1. S2. D.        0082 8600 8600 8602 8600 8400 8005 PLSY D0 D1 Y0
//0084  PWM  S.  n.  D.        0084 8600 8600 8032 8000 8400 8005 PWM  D0 K50 Y0
//0086  PLSR S1. S2. S3. D.    0086 8600 8600 8064 8000 8600 8800 8400 8005 PLSR D0 K100 D1 Y0   
//008C  ABSD S1. S2. D. n.     008C 8658 8602 8600 8400 8400 8008 8040 8000 ABSD D300 C0 M0 K4
//008D  DABSD 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
//008E  INCD S1. S2. D. n.     008E 8658 8602 8600 8400 8400 8008 8004 8000 INCD D300 C0 M0 K4

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

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

//0094  ALT  D.                0094 8400 8005  ALT Y0

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

//01C2  LD   (M1036-M3071)   01C2 A800   LD  M1036
//01C3  LDI  (M1036-M3071)   01C3 A801   LDI M1037
//01C4  AND  (M1036-M3071)   01C4 A802   AND M1038
//01C5  ANI  (M1036-M3071)   01C5 A803   ANI M1039
//01C6  OR   (M1036-M3071)   01C6 A804   OR  M1040
//01C7  ORI  (M1036-M3071)   01C7 A805   ORI M1041
//01C8
//01C9
//01CA  LDP  S.                01CA 8000   LDP  S0
//01CB  LDF  S.                01CB 8800   LDF  M0
//01CC  ANDP S.                01CC A800   ANDP M1536
//01CD  ANDF S.                01CD 8F00   ANDF M8000
//01CE  ORP  S.                01CE 8400   ORP  X0
//01CF  ORF  S.                01CF 8500   ORF  Y0


//01D0  LD=  S1. S2.           01D0 8600 8600 8602 8800  LD=  D0 D1001
//01D2  LD>  S1. S2.           01D2 8600 8600 8602 8800  LD>  D0 D1001
//01D4  LD<  S1. S2.           01D4 8600 8600 8602 8800  LD<  D0 D1001
//01D8  LD<> S1. S2.           01D8 8600 8600 8602 8800  LD<> D0 D1001
//01DA  LD<= S1. S2.           01DA 8600 8600 8602 8800  LD<= D0 D1001
//01DC  LD>= S1. S2.           01DC 8600 8600 8602 8800  LD>= D0 D1001

//01E0  AND=  S1. S2.          01E0 8600 8600 8602 8800  AND=  D0 D1001
//01E2  AND>  S1. S2.          01E2 8600 8600 8602 8800  AND>  D0 D1001
//01E4  AND<  S1. S2.          01E4 8600 8600 8602 8800  AND<  D0 D1001
//01E8  AND<> S1. S2.          01E8 8600 8600 8602 8800  AND<> D0 D1001
//01EA  AND<= S1. S2.          01EA 8600 8600 8602 8800  AND<= D0 D1001
//01EC  AND>= S1. S2.          01EC 8600 8600 8602 8800  AND>= D0 D1001

//01F0  OR=   S1. S2.           01F0 8600 8600 8602 8800  OR=  D0 D1001
//01F2  OR>   S1. S2.           01F2 8600 8600 8602 8800  OR>  D0 D1001
//01F4  OR<   S1. S2.           01F4 8600 8600 8602 8800  OR<  D0 D1001
//01F8  OR<>  S1. S2.           01F8 8600 8600 8602 8800  OR<> D0 D1001
//01FA  OR<=  S1. S2.           01FA 8600 8600 8602 8800  OR<= D0 D1001
//01FC  OR>=  S1. S2.           01FC 8600 8600 8602 8800  OR>= D0 D1001

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


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

//2xxx  LD    S.               2000 LD S0
//3xxx  LDI   S.               3100 LDI S256
//4xxx  AND   S.               4400 AND X0
//5xxx  ANI   S.               5500 ANI Y0
//6xxx  OR    S.               6600 OR  T0
//7xxx  ORI   S.               7800 ORI M0

  


//B000_B07F  P0_P127

//Cxxx  OUT   D.               C900 OUT M256
//Dxxx  SET   D.               DA00 SET M512
//Exxx  RST   D.               EB00 RST M768

//F000_F3E7  STL   S0_S999               
//F7FF  RET

//FFF8  ANB
//FFF9  ORB
//FFFA  MPS
//FFFB  MPR
//FFFC  MPP
//FFFD  INV  
//FFFF  NOP
////////////////////////////////////////////////

/*****************************************/
#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))

出0入0汤圆

 楼主| 发表于 2009-4-26 10:23:29 | 显示全部楼层
//通讯程序
uart1_scan()
{
  if(COM1_REDY)
         {
                NVIC->Enable[1] &= ~(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[RAM8(rx_buf+3)]<<8)+(hex[RAM8(rx_buf+4)]<<4)+ (hex[RAM8(rx_buf+5)]);
                                                XX = AAAA + (hex[RAM8(rx_buf+6)]<<4)+ (hex[RAM8(rx_buf+7)]<<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[RAM8(rx_buf+3)]<<8)+(hex[RAM8(rx_buf+4)]<<4)+ (hex[RAM8(rx_buf+5)]);
                                                XX = AAAA + (hex[RAM8(rx_buf+6)]<<4)+ (hex[RAM8(rx_buf+7)]<<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[RAM8(rx_buf+3)]<<8)+(hex[RAM8(rx_buf+4)]<<4)+ (hex[RAM8(rx_buf+5)]<<0);
                                                XX   =  AAAA+(hex[RAM8(rx_buf+6)]<<4)+ (hex[RAM8(rx_buf+7)]<<0);        
                                                if(XX<RAM2)
                                                {
                                                  IR0  =  rx_buf + 8;
                                                  for(;AAAA<XX;)
                                                        {
                                                                RAM8(AAAA)= (hex[RAM8(IR0)]<<4)+(hex[RAM8(IR0+1)]<<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[RAM8(rx_buf+3)]<<8)+(hex[RAM8(rx_buf+4)]<<4)+ (hex[RAM8(rx_buf+5)]<<0);
                                                XX   =  AAAA+(hex[RAM8(rx_buf+6)]<<4)+ (hex[RAM8(rx_buf+7)]<<0);
                                                if(XX<RAM5)
                                                {
                                                  IR0  =  rx_buf +8;
                                                  for(;AAAA<XX;)
                                                        {
                                                            if(AAAA<RAM5)       
                                                                   {
                                                                     RAM8(AAAA)= (hex[RAM8(IR0)]<<4)+(hex[RAM8(IR0+1)]<<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[RAM8(rx_buf+4)]<<12)+(hex[RAM8(rx_buf+5)]<<8)+(hex[RAM8(rx_buf+2)]<<4)+ (hex[RAM8(rx_buf+3)]<<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[RAM8(rx_buf+4)]<<12)+(hex[RAM8(rx_buf+5)]<<8)+(hex[RAM8(rx_buf+2)]<<4)+ (hex[RAM8(rx_buf+3)]<<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[RAM8(rx_buf+5)]<<8)+(hex[RAM8(rx_buf+6)]<<4)+(hex[RAM8(rx_buf+7)]);
                                                            XX = AAAA + (hex[RAM8(rx_buf+8)]<<4)+(hex[RAM8(rx_buf+9)]);
                                                            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[CRC & 0x0F]);
                                                           COM1_CMD = 0;
                                                   }
                           if(RAM8(rx_buf+4)==0x31)
                                            { //2'E0 01AAA XX'3'SS'
                                                    AAAA= RAM2+(hex[RAM8(rx_buf+5)]<<8)+(hex[RAM8(rx_buf+6)]<<4)+(hex[RAM8(rx_buf+7)]);
                                                    XX = AAAA + (hex[RAM8(rx_buf+8)]<<4)+(hex[RAM8(rx_buf+9)]);
                                                    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[CRC & 0x0F]);
                                                    COM1_CMD = 0;
                                           }
                           if(RAM8(rx_buf+4)==0x32)
                                        { //2'E0 02AAA XX'3'SS'
                                                AAAA= RAM3+(hex[RAM8(rx_buf+5)]<<8)+(hex[RAM8(rx_buf+6)]<<4)+(hex[RAM8(rx_buf+7)]);
                                                XX = AAAA + (hex[RAM8(rx_buf+8)]<<4)+(hex[RAM8(rx_buf+9)]);
                                                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[CRC & 0x0F]);
                                                COM1_CMD = 0;
                                        }
                         if(RAM8(rx_buf+4)==0x33)
                                        { //2'E0 03AAA XX'3'SS'
                                                AAAA= (hex[RAM8(rx_buf+5)]<<8)+(hex[RAM8(rx_buf+6)]<<4)+(hex[RAM8(rx_buf+7)]);
                                                XX = AAAA + (hex[RAM8(rx_buf+8)]<<4)+(hex[RAM8(rx_buf+9)]);
                                                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[CRC & 0x0F]);
                                                COM1_CMD = 0;
                                        }
                         if(RAM8(rx_buf+4)==0x34)
                                        { //2'E0 04AAA XX'3'SS'
                                                AAAA= RAM4+(hex[RAM8(rx_buf+5)]<<8)+(hex[RAM8(rx_buf+6)]<<4)+(hex[RAM8(rx_buf+7)]);
                                                XX = AAAA + (hex[RAM8(rx_buf+8)]<<4)+(hex[RAM8(rx_buf+9)]);
                                                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[CRC & 0x0F]);
                                                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[RAM8(rx_buf+5)]<<8)+(hex[RAM8(rx_buf+6)]<<4)+(hex[RAM8(rx_buf+7)]);
                                                XX = AAAA + (hex[RAM8(rx_buf+8)]<<4)+(hex[RAM8(rx_buf+9)]);
                                                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[CRC & 0x0F]);
                                                COM1_CMD = 0;
                                        }
                                }
                   if(RAM8(rx_buf+3)==0x31)
                                        { //2'E0 1AAAA XX'3'SS'
                                                AAAA= 0x08010000+(hex[RAM8(rx_buf+4)]<<12)+(hex[RAM8(rx_buf+5)]<<8)+(hex[RAM8(rx_buf+6)]<<4)+(hex[RAM8(rx_buf+7)]);
                                                XX = (hex[RAM8(rx_buf+8)]<<4)+(hex[RAM8(rx_buf+9)]);
                                                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[CRC & 0x0F]);
                                                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[RAM8(rx_buf+5)]<<8)+(hex[RAM8(rx_buf+6)]<<4)+(hex[RAM8(rx_buf+7)]);
                                                XX = AAAA + (hex[RAM8(rx_buf+8)]<<4)+(hex[RAM8(rx_buf+9)]);
                                            IR0 = rx_buf +10;
                                                for(;AAAA<XX;)
                                                        {
                                                                RAM8(AAAA) = (hex[RAM8(IR0)]<<4)+hex[RAM8(IR0+1)];
                                                                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[RAM8(rx_buf+5)]<<8)+(hex[RAM8(rx_buf+6)]<<4)+(hex[RAM8(rx_buf+7)]);
                                                XX = AAAA + (hex[RAM8(rx_buf+8)]<<4)+(hex[RAM8(rx_buf+9)]);
                                            IR0 = rx_buf +10;
                                                for(;AAAA<XX;)
                                                        {
                                                                RAM8(AAAA) = (hex[RAM8(IR0)]<<4)+hex[RAM8(IR0+1)];
                                                                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[RAM8(rx_buf+5)]<<8)+(hex[RAM8(rx_buf+6)]<<4)+(hex[RAM8(rx_buf+7)]);
                                                XX = AAAA + (hex[RAM8(rx_buf+8)]<<4)+(hex[RAM8(rx_buf+9)]);
                                            IR0 = rx_buf +10;
                                                for(;AAAA<XX;)
                                                        {
                                                            if(AAAA<0x20003C00)
                                                                {
                                                                   RAM8(AAAA) = (hex[RAM8(IR0)]<<4)+hex[RAM8(IR0+1)];
                                                                }
                                                                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[RAM8(rx_buf+5)]<<8)+(hex[RAM8(rx_buf+6)]<<4)+(hex[RAM8(rx_buf+7)]);
                                                XX = AAAA + (hex[RAM8(rx_buf+8)]<<4)+(hex[RAM8(rx_buf+9)]);
                                            IR0 = rx_buf +10;
                                                for(;AAAA<XX;)
                                                        {
                                                            if(AAAA<RAM5)
                                                                {
                                                                   RAM8(AAAA) = (hex[RAM8(IR0)]<<4)+hex[RAM8(IR0+1)];
                                                                }
                                                                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[RAM8(rx_buf+5)]<<8)+(hex[RAM8(rx_buf+6)]<<4)+(hex[RAM8(rx_buf+7)]);
                                                XX = AAAA + (hex[RAM8(rx_buf+8)]<<4)+(hex[RAM8(rx_buf+9)]);
                        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[RAM8(rx_buf+4)]<<12)+(hex[RAM8(rx_buf+5)]<<8)+(hex[RAM8(rx_buf+6)]<<4)+(hex[RAM8(rx_buf+7)]);
                                                XX = (hex[RAM8(rx_buf+8)]<<4)+(hex[RAM8(rx_buf+9)]);
                                           if(AAAA==0x08018000)
                                              {
                                                    IR0 = 0x20000E08;
                                                        IR1 = 0x20000E30;
                                                        IR2 = rx_buf + 10 +16;
                                                        for(;IR0<IR1;)
                                                        {
                                                          RAM8(IR0)=(hex[RAM8(IR2)]<<4)+(hex[RAM8(IR2+1)]);
                                                          IR0 += 1;
                                                          IR2 += 2;
                                                        }
                                                  }
                                           if(AAAA==0x08018008)
                                              {
                                                    IR0 = 0x20000E08;
                                                        IR1 = 0x20000E10;
                                                        IR2 = rx_buf + 10;
                                                        for(;IR0<IR1;)
                                                        {
                                                          RAM8(IR0)=(hex[RAM8(IR2)]<<4)+(hex[RAM8(IR2+1)]);
                                                          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[RAM8(IR3)]<<4)+(hex[RAM8(IR3+1)]);
                                                           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[RAM8(rx_buf+5)]<<12)+(hex[RAM8(rx_buf+6)]<<8)+(hex[RAM8(rx_buf+3)]<<4)+(hex[RAM8(rx_buf+4)]);
                                                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[RAM8(rx_buf+5)]<<12)+(hex[RAM8(rx_buf+6)]<<8)+(hex[RAM8(rx_buf+3)]<<4)+(hex[RAM8(rx_buf+4)]);
                                                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'F0  M AAAA XX'3'SS'
                                            IR0 =hex[RAM8(rx_buf + 3)];
                                                AAAA =         (hex[RAM8(rx_buf+4)]<<12)+(hex[RAM8(rx_buf+5)]<<8)+(hex[RAM8(rx_buf+6)]<<4)+(hex[RAM8(rx_buf+7)]);
                                                XX = (hex[RAM8(rx_buf+8)]<<4)+(hex[RAM8(rx_buf+9)]);
                                                UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }
                 if(RAM8(rx_buf+2)==0x31)
                                        {//2'F1  M AAAA XX'3'SS'
                                            IR0 =hex[RAM8(rx_buf + 3)];
                                                AAAA =         (hex[RAM8(rx_buf+4)]<<12)+(hex[RAM8(rx_buf+5)]<<8)+(hex[RAM8(rx_buf+6)]<<4)+(hex[RAM8(rx_buf+7)]);
                                                XX = (hex[RAM8(rx_buf+8)]<<4)+(hex[RAM8(rx_buf+9)]);
                                                UART_SEND(ACK);
                                                COM1_CMD = 0;
                                        }
                   }
                if(COM1_CMD)
                            {
                                                   UART_SEND(NCK);
                                                M8062 = 1;                   //PC/PP通信出错
                                    D8062 = 6205;                   //指令有误
                                                COM1_CMD = 0;
                                        }
        NVIC->Enable[1] |= (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;
           }
}

出0入0汤圆

 楼主| 发表于 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;
              }
}

出0入0汤圆

 楼主| 发表于 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 强制停止

出0入0汤圆

发表于 2009-4-26 10:42:26 | 显示全部楼层
狂顶,楼主。好东西。迟快打个包上来吧。

出0入0汤圆

发表于 2009-4-26 10:57:46 | 显示全部楼层
顶!

出0入0汤圆

 楼主| 发表于 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全系列资源,可扩展模块。

出0入0汤圆

发表于 2009-4-26 11:11:25 | 显示全部楼层
很不错,特别是2楼的资料。很好的参考资料。

出0入0汤圆

发表于 2009-4-26 11:12:49 | 显示全部楼层
先支持一下再说。有兴趣一起玩
QQ:229933133

出0入0汤圆

 楼主| 发表于 2009-4-26 11:31:30 | 显示全部楼层
联系资料: 18928105948 
      18928105948@189.cn

出0入0汤圆

 楼主| 发表于 2009-4-26 12:00:39 | 显示全部楼层
用2051制作的PLC(类PLC基于C语言,简易PLC基于FX1S)

(原文件名:图片_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     FOSC  12000000

#define     BUOD  9600



#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      //16bit  2byte           t0-t15
#define X   0x08          //I
#define TRF 0x10          //16bit  2byte           tr0-tr15
#define Y   0x18          //O
#define C   0x20             //128bit 2byte           c0-c15
#define M8  0x28          //64bit   8byte           M8000-M80063
#define CRF 0x30          //128bit 2byte           cr0-cr15
#define M   0x40             //128bit 16byte   dr6-dr727
#define FR  0x50      //128bit 16byte   f0-f127


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

/*
#define TV 0x60      //16 word  32byte  tv0-tv15
#define TP 0x80                 //16 word  32byte        tp0-tp15
#define CV 0xA0           //16 word  32byte        cv0-cv15
#define CP 0xC0                 //16 word  32byte        cp0-cp15
#define D  0xE0      //16 word  32byte  d0-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 data  T5MS      _at_    0x2c;     //5MS基本时钟
byte data  point     _at_    0x2d;           //通讯数据存放指针
byte data  OAB       _at_    0x2e;           //块与块或计数用
byte data  MPPD      _at_    0x2f;           //堆栈计数  7
byte data  PFSD      _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[ISP_DATA];
         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[dr6];
  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[dr6]=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[dr6];
  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[0]*16+s[1];
  dr4=(s[2]*16+s[3])-0x80;
  take_code();
  dr5=s[0]*16+s[1];
  dr6=(s[2]*16+s[3])-0x80;
  if(dr4==0){if(dr6==0) {wr1=dr5*256+dr3;}}
  else if(dr4==4){
                  if(dr5==4)     {dwLL=ram[X];dwL=ram[X+1];dwH=0;}
                  else if(dr5==5){dwLL=ram[Y];dwL=ram[Y+1];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[T+dr3/2];}}}
                else if(dr6==4){if(dr5==0){if(dr3<32) {wr1=dram[C+dr3/2];}}}
                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[Y];dwL=ram[Y+1];dwH=0;tz_bit();ram[Y]=dwLL;ram[Y+1]=dwL;}
            else if(dr5==8){if(dr3<128)
                         {dwLL=ram[M+dr3/8];
                                if(dr3<120)
                              {dwL=ram[M+dr3/8+1];
                                         if(dr3<112) dwH=ram[M+dr3/8+2];else dwH=0;
                                   }else dwL=0;
                                        tz_bit();
                                        ram[M+dr3/8]=dwLL;
                                   if(dr3<120)
                                        {ram[M+1+dr3/8]=dwL;
                                         if(dr3<112)
                                         {ram[M+2+dr3/8]=dwH;}
                                    }
                        }}}
               
         else if(dr4==6)
                      {
                            if(dr6==2){if(dr5==0){if(dr3<32){dram[T+dr3/2]=wr1;}else M8007=1;}}
                                else if(dr6==4){if(dr5==0){if(dr3<32){dram[C+dr3/2]=wr1;}M8007=1;}}
                                else if(dr6==6){if(dr5==0){if(dr3<32){dram[0xe0+dr3/2]=wr1;}M8007=1;}}
                          }
}*/
/**************************************************************************
取数据寄存器地址
dr3:
dr4:
dr5:
dr6:
CY:
**************************************************************************/
/*bit take_addr()
{
take_code();
dr3=s[0]*16+s[1];
dr4=s[2]*16+s[1]-0x80;
take_code();
dr5=s[0]*16+s[1];
dr6=s[2]*16+s[1]-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[0]*16+s[1];
  if(s[3]==4) {if(dr4<16){dr3=X;}}
  if(s[3]==5) {if(dr4<16){dr3=Y;}}
  if(s[3]==6) {if(dr4<16){dr3=T;}}
  if(s[3]==8) {if(dr4<128){dr3=M;}}
  if(s[3]==14){if(dr4<16){dr3=C;}}
  if(s[3]==15){if(dr4<64){dr3=M8;}}
}


/***********************求输出位内存地址****************************
使用资源: dr4:
          dr3:
*******************************************************************/
out_bit_addr()
{ dr4=s[0]*16+s[1];
   if(s[3]==5) {if(dr4<16){dr3=Y;}}
   if(s[3]==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[0]*16+s[1];
  if(b0)
  {
   if(s[3]==6)
    {if(dr3<16)
          {
           out_bitc(T,dr3,0);
           out_bitc(TRF,dr3,0);
           dram[T+dr3]=65535;
          }
          
        }
   else if(s[3]==14)
    {if(dr3<16)
         {out_bitc(C,dr3,0);
          out_bitc(CRF,dr3,0);
          dram[C+dr3]=0;
          }
        }
  }
}



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

fun_out_c()
{
take_data();
dram[CRF+codeL]=wr1;  
if(codeL<16)
  {
    if(b0)
      {
        if(~take_bitc(CRF,codeL))
           {
             if(~take_bitc(C,codeL))
               {
                 dram[C+codeL]++;
                 if(dram[C+codeL]>=dram[CRF+codeL])
                    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[C+codeL]/256);
  send(dram[C+codeL]%256);
  send(b0);
  send(take_bitc(CRF,codeL));
  send(take_bitc(CRF,codeL));
}

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

fun_altp()
{   take_code();
    dr4=s[0]*16+s[1];
    take_code();
    dr3=s[1];
        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[0]*16+s[1];
   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[0]*16+s[1];
   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[0]*16+s[1];
   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[0]*16+s[1];
   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[0]*16+s[1];
   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[0]*16+s[1];
   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[0]*16+s[1];
dr4=(s[2]*16+s[3])-0x80;
take_code();
dr5=s[0]*16+s[1];
dr6=(s[2]*16+s[3])-0x80;
if(b0)if(~M8007)
  {mov_data();}
}

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

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

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

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

fun_sub()
{
  take_data();
  wr2=wr1;
  take_data();
  wr2=wr2-wr1;
  if(b0)if(!M8007)if(!take_addr())
  {
    dram[wr1]=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[2]*16+s[3];
codeL=s[0]*16+s[1];
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[1]==0X30)if(v[2]==0X30)if(v[3]==0X45)if(v[4]==0X30)
if(v[5]==0X32)if(v[6]==0X30)if(v[7]==0X32)if(v[8]==0X03)
if(v[9]==0X36)if(v[10]==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[1]==0X45)if(v[2]==0X30)if(v[3]==0X31)if(v[4]==0X38)
if(v[5]==0X30)if(v[6]==0X30)if(v[7]==0X30)if(v[8]==0X34)
if(v[9]==0X30)if(v[10]==0X03)if(v[11]==0X44)if(v[12]==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[1]==0X45)if(v[2]==0X30)if(v[3]==0X31)if(v[4]==0X38)
if(v[5]==0X30)if(v[6]==0X34)if(v[7]==0X30)if(v[8]==0X31)
if(v[9]==0X43)if(v[10]==0X03)if(v[11]==0X45)if(v[12]==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[1]==0X45)if(v[2]==0X30)if(v[3]==0X30)if(v[4]==0X30)
if(v[5]==0X31)if(v[6]==0X43)if(v[7]==0X30)if(v[8]==0X30)
if(v[9]==0X31)if(v[10]==0X03)if(v[11]==0X44)if(v[12]==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[1]==0X45)if(v[2]==0X30)if(v[3]==0X30)if(v[4]==0X30)
if(v[5]==0X45)if(v[6]==0X30)if(v[7]==0X36)if(v[8]==0X30)
if(v[9]==0X32)if(v[10]==0X03)if(v[11]==0X45)if(v[12]==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[1]==0X45)if(v[2]==0X30)if(v[3]==0X31)if(v[4]==0X38)
if(v[5]==0X30)if(v[6]==0X30)if(v[7]==0X38)if(v[8]==0X30)
if(v[9]==0X38)if(v[10]==0X03)if(v[11]==0X45)if(v[12]==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[1]==0X45)if(v[2]==0X30)if(v[3]==0X31)if(v[4]==0X38)
if(v[5]==0X30)if(v[6]==0X30)if(v[7]==0X30)if(v[8]==0X32)
if(v[9]==0X45)if(v[10]==0X03)if(v[11]==0X45)if(v[12]==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[1]==0X45)if(v[2]==0X30)if(v[3]==0X31)if(v[4]==0X38)
if(v[5]==0X30)if(v[6]==0X32)if(v[7]==0X45)if(v[8]==0X32)
if(v[9]==0X45)if(v[10]==0X03)if(v[11]==0X46)if(v[12]==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[1]==0x45)if(v[2]==0x37)if(v[3]==0x32)if(v[4]==0x35)
  if(v[5]==0x30)if(v[6]==0x45)if(v[7]==0x03)if(v[8]==0x35)if(v[9]==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[1]==0X45)if(v[2]==0X37)if(v[3]==0X37)if(v[4]==0X36)
if(v[5]==0X30)if(v[6]==0X45)if(v[7]==0X03)if(v[8]==0X36)
if(v[9]==0X31)
{
   for(i=0;i<200;i++)v=0;
   send(0X06);  
}

/* 读取一段程序
SEND: 02  45  30 31  38 30 35    43   34 30  03  45 44
STX      CMD        单元一                      字数        ETX         SUM
步数=字数/2(16位机一步占两个字,8位机一步占4个字节)
字节数=字数*2
805(基数)单元一
ACK: 02  N个字节 03         两个校验码
*/
if(v[1]==0X45)if(v[2]==0X30)if(v[3]==0X31)if(v[7]==0X43)if(v[10]==3)
                {
                  wr1=((HEX[(v[4])]*256+HEX[(v[5])]*16+HEX[(v[6])])-0x805)/4;  //单元号 400 共8000步
                  dr8=(HEX[(v[8])]*16+HEX[(v[9])])*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[dr3/16]);
                  send(ASC[dr3%16]);
                }
/*
SEND: 02 45 31 31 38 30 35   43   30  30       (字节) 03  两个校验码
ACK:06                           单元号                (步数=字数/2)   步数*4
*/       
if(v[1]==0x45)if(v[2]==0x31)if(v[3]==0x31)if(v[7]==0x43)
{
        wr1=((HEX[(v[4])]*256+HEX[(v[5])]*16+HEX[(v[6])])-0x805)/4; //单元号 STC12C5410 2K字节,500步
        dr8=(HEX[(v[8])]*16+HEX[(v[9])])*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[10+i];
                       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[1]==0x45)if(v[2]==0x30)if(v[3]==0x30)if(v[4]==0x30)
             if(v[5]==0x45)if(v[6]==0x31)if(v[7]==0x34)if(v[8]==0x30)if(v[9]==0x36)
                   if(v[10]==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[1]==0X45)if(v[2]==0X38)if(v[3]==0X37)if(v[4]==0X36)
if(v[5]==0X30)if(v[6]==0X45)if(v[7]==0X03)if(v[8]==0X36)
if(v[9]==0X32)
{
   for(i=0;i<200;i++)v=0;
   send(0X06);   
}

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

出0入0汤圆

发表于 2009-4-26 12:13:38 | 显示全部楼层
不错

出0入0汤圆

发表于 2009-4-26 12:52:13 | 显示全部楼层
整理的好一点,有点PLC的意思了。起码比X工的好。赞一个。

出0入0汤圆

发表于 2009-4-26 13:00:43 | 显示全部楼层
兄弟,辛苦了!很不错!

出0入0汤圆

发表于 2009-4-26 13:02:19 | 显示全部楼层
请问有原理图吗?

出0入0汤圆

发表于 2009-4-26 13:49:16 | 显示全部楼层
[xlian541426 ]你好,问下,这两种都是用解释方法吗?stm32的速度快可以理解,51的是不是速度会慢呢?在实际应用中。

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2009-4-26 18:13:01 | 显示全部楼层
以上的通讯程序是以过验证的,STM32是在试验板上验证程序上传、下载、在线监控等功能,2051的是在控制板上应用。

出0入0汤圆

发表于 2009-4-26 18:25:06 | 显示全部楼层
牛人!我顶你!

出0入0汤圆

发表于 2009-4-26 18:49:24 | 显示全部楼层

出0入0汤圆

 楼主| 发表于 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开始       

出0入0汤圆

 楼主| 发表于 2009-4-27 18:44:16 | 显示全部楼层
以上内容是本人历时数个月研究出的结果,现在准备在软硬件全部完成后开源提供,有兴趣的朋友请联系:18928105948@189.cn

出0入0汤圆

发表于 2009-4-27 20:14:02 | 显示全部楼层
不错,不错,支持一个

出0入0汤圆

发表于 2009-4-27 21:09:22 | 显示全部楼层
我前两个星期还正在弄FX1S的,而且还有很多弄不明白的。你的现在一出,我惚 然 大悟啊。
唉,水平远远比不上楼主啊,只有向楼主学习啦。

出0入0汤圆

发表于 2009-4-28 10:41:15 | 显示全部楼层
绝对的强人,而且绝对的无私,我们其实大多数不是想商业化这个东西,因为你的工艺不行的,我们就是想做个,看看怎么实现的,就当高级玩具了,呵呵,
绝对的顶啊!
绝对的顶啊!
绝对的顶啊!
绝对的顶啊!
绝对的顶啊!

出0入0汤圆

发表于 2009-4-28 12:25:46 | 显示全部楼层
你能不能留个其它的邮箱,发邮件给你报错.说地址格式错误

出0入0汤圆

 楼主| 发表于 2009-4-28 19:23:29 | 显示全部楼层
共同进步
欢迎探讨 8289490@zsnet.com
          18928105948@189.cn

出0入0汤圆

发表于 2009-4-30 17:34:48 | 显示全部楼层
牛人! 请接收我的敬意!!!

出0入0汤圆

发表于 2009-5-1 01:08:36 | 显示全部楼层
的确是好东西 不过这样的源代码看起来不方便
不知楼主能否打包发上来?

出0入0汤圆

发表于 2009-5-1 20:37:30 | 显示全部楼层
这种好帖子不顶一下是不行的

出0入0汤圆

发表于 2009-5-4 20:48:07 | 显示全部楼层
谢谢分享。

出0入0汤圆

发表于 2009-5-4 21:25:03 | 显示全部楼层
是我看到自制PLC最本质的东东,谢谢!

出0入0汤圆

发表于 2009-5-5 20:39:50 | 显示全部楼层
写出这些牛码,我还需要多久呢!楼主真能干!

出0入0汤圆

发表于 2009-5-6 15:45:41 | 显示全部楼层
等樓主的東西好久了,哈哈

出0入0汤圆

发表于 2009-5-15 14:21:48 | 显示全部楼层
【17楼】 yy888 许意义

的确不错.

我力求更好!

出0入0汤圆

发表于 2009-5-16 10:14:32 | 显示全部楼层
赞一个!顶一把!
确实是开源以来最好的贴子.

出0入0汤圆

发表于 2009-5-17 00:29:03 | 显示全部楼层
这种好帖子不顶一下是不行的!谢谢分享。

出0入0汤圆

 楼主| 发表于 2009-5-17 10:13:11 | 显示全部楼层
IO板
点击此处下载 ourdev_445434.rar(文件大小:87K) (原文件名:PCB2.rar)

出0入0汤圆

发表于 2009-5-17 10:47:45 | 显示全部楼层
plc的资料开放的越来越多了,国内生产PLC也多了,但市场格局好象没什么变化。国际品牌依旧主流。

出0入0汤圆

发表于 2009-5-17 12:14:47 | 显示全部楼层
格局不会那么容易改变的,现在搞国产PLC除非做特殊行业的定制服务,比如说船舶专用,军工专用,电力专用等等,否则没有前途的。

出0入0汤圆

发表于 2009-5-17 18:54:32 | 显示全部楼层
很OK啊,几时直接COPY楼主的板子,做一个试一试,呵呵。。。

介意不?

出0入0汤圆

发表于 2009-5-18 13:55:31 | 显示全部楼层
能写是牛,能公布更牛啊...

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

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

出0入0汤圆

发表于 2009-6-1 01:28:43 | 显示全部楼层
冒昧的问一下,楼主的用户程序准备放哪里.

出0入0汤圆

发表于 2009-6-1 10:11:13 | 显示全部楼层
【42楼】 igoal
格局不会那么容易改变的,现在搞国产PLC除非做特殊行业的定制服务,比如说船舶专用,军工专用,电力专用等等,否则没有前途的。


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

出0入0汤圆

发表于 2009-6-6 22:46:17 | 显示全部楼层
好!真好!

出0入0汤圆

发表于 2009-6-10 11:08:47 | 显示全部楼层
我狂顶 真是太好了

出0入0汤圆

发表于 2009-6-11 12:27:54 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-6-18 20:47:21 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2009-6-18 21:42:58 | 显示全部楼层
佩服佩服,学习中~~~

出0入0汤圆

发表于 2009-7-11 22:04:27 | 显示全部楼层
佩服,狂顶

出0入0汤圆

发表于 2009-7-11 22:27:14 | 显示全部楼层
mark

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2009-7-18 08:50:07 | 显示全部楼层
PLC开发套件还有最后5套,已付款的朋友在月底可以收到套件

出0入0汤圆

 楼主| 发表于 2009-8-2 13:22:43 | 显示全部楼层
台湾的吕先生,请尽快将你的统编号或身份证号发给我,你的PLC套件在快递公司,等你的统编号或身份证号到了才能发货,否则发不了。

出0入0汤圆

 楼主| 发表于 2009-8-4 23:01:05 | 显示全部楼层
收到套件的朋友将姓名发到18928105948@189.cn,索取源代码及开发环境。

出0入0汤圆

 楼主| 发表于 2009-8-4 23:09:06 | 显示全部楼层
关注PLC开发套件的朋友,20套开发套件已被关注DIY PLC 的朋友购完,不再推出了,请各位关注PLC开发的朋支不要再发邮件过来了。已拿到PLC开发套件的朋友请关注后续开发,将在一段时间后将逐步完善指令代码,完善后的指令代码将发布在本论坛,请各位朋友自地下载更新指令解释程序。

出0入0汤圆

发表于 2009-8-21 10:34:08 | 显示全部楼层
到现在没收到源代码及开发环境,哪位大侠能帮帮我?
我的邮箱:sunmj@sohu.com

出0入0汤圆

发表于 2009-8-21 16:09:36 | 显示全部楼层
原理图呢?

出0入0汤圆

发表于 2009-8-21 16:17:19 | 显示全部楼层
我有一套可转让,包括软硬件;QQ450734344

出0入0汤圆

发表于 2009-8-28 08:21:53 | 显示全部楼层
这个要学习

出0入0汤圆

发表于 2009-8-28 08:24:24 | 显示全部楼层
请问xlian541426,
基于STM32的PLC之CPU板的上位机软件可以用三菱的上位机软件吗?  请回答,谢谢!

出0入0汤圆

发表于 2009-9-6 10:43:08 | 显示全部楼层
楼主咋不现身呢?发邮件也不回。。。。

出0入0汤圆

 楼主| 发表于 2009-9-8 17:23:32 | 显示全部楼层
回复楼上的,最近没时间,上面那个东东是基于三菱开发环境的PLC.有事请发出件至18928105948@189.cn

出0入0汤圆

发表于 2009-9-8 18:38:21 | 显示全部楼层
我发过邮件,不知道 你看到没有?

出0入0汤圆

发表于 2009-9-22 10:48:36 | 显示全部楼层
STM32的PLC还有套板买吗?

出0入0汤圆

发表于 2010-2-22 23:11:36 | 显示全部楼层
非常不错,不知稳定性方面怎样。可用才是硬道理!

出0入0汤圆

发表于 2010-4-21 10:13:47 | 显示全部楼层
这plc 还有套件买吗?

出0入0汤圆

发表于 2010-5-23 10:11:24 | 显示全部楼层
楼上:
    还有套件买么?我想买一套

出0入0汤圆

发表于 2010-5-23 11:14:55 | 显示全部楼层
那位有的,如果不用也可以转让给我

出0入0汤圆

发表于 2010-5-23 13:41:09 | 显示全部楼层
很好~~谢谢~~

出0入0汤圆

发表于 2010-6-6 11:09:38 | 显示全部楼层
那位有要转让的,可以转让给我,或者给小弟一份资料也可以,小弟就不胜感激了
电话:18962143280   EMAIL:jian-c@nsk.com

出0入0汤圆

发表于 2010-9-17 23:41:41 | 显示全部楼层
都没动静了

出0入0汤圆

发表于 2010-9-28 11:00:11 | 显示全部楼层
牛,mark

出0入0汤圆

发表于 2010-11-15 14:26:49 | 显示全部楼层
很强悍...........

出0入0汤圆

发表于 2010-12-16 13:08:58 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-12-16 13:36:41 | 显示全部楼层
有开发板出售不?

出0入0汤圆

发表于 2011-1-19 14:39:14 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-1-28 10:08:54 | 显示全部楼层
有没有人要转让  QQ179892737

出0入9汤圆

发表于 2011-1-28 11:19:06 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-7 01:17:06 | 显示全部楼层
怎么不讨论了!

出0入0汤圆

发表于 2011-3-9 12:28:04 | 显示全部楼层
还在继续吗?

出0入0汤圆

发表于 2011-3-17 11:35:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-17 11:47:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-19 15:31:54 | 显示全部楼层
mark 敬佩之情如长江之水源源不绝!!!

出0入0汤圆

发表于 2011-8-19 12:17:34 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-8 18:59:35 | 显示全部楼层
回复【楼主位】xlian541426
-----------------------------------------------------------------------

楼主强悍!!

出0入0汤圆

发表于 2011-12-3 15:55:57 | 显示全部楼层
很不错

出0入0汤圆

发表于 2012-1-4 15:16:47 | 显示全部楼层
我也用的是stm32做PLC,支持下

出0入0汤圆

发表于 2012-4-30 23:14:39 | 显示全部楼层
最近在了解PLC,标记

出0入0汤圆

发表于 2012-5-17 11:59:47 | 显示全部楼层
高人!牛人!好人

出0入16汤圆

发表于 2012-6-10 10:18:06 | 显示全部楼层
绝对好贴!强顶!

出0入0汤圆

发表于 2012-6-15 08:14:51 | 显示全部楼层
牛人               

出0入0汤圆

发表于 2012-6-15 08:41:46 | 显示全部楼层
这个帖子好长啊!!!

出0入0汤圆

发表于 2012-7-3 13:21:27 | 显示全部楼层
NB !好东西,必须顶!    除了CPU板应该还有其它的吧,楼主也请一并上传给俺们开开眼界

出0入0汤圆

发表于 2012-7-11 15:50:28 | 显示全部楼层
绝对好贴啊

出0入0汤圆

发表于 2012-7-25 10:20:26 | 显示全部楼层
mark,学习了。

出0入0汤圆

发表于 2012-11-15 23:31:52 | 显示全部楼层
楼主的PLC是否商业化了?

出0入0汤圆

发表于 2012-12-17 15:07:15 | 显示全部楼层
谢谢楼主
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 09:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表