《PC与数控机床通信系统---单片机软件设计(可编辑)》由会员分享,可在线阅读,更多相关《PC与数控机床通信系统---单片机软件设计(可编辑)(44页珍藏版)》请在金锄头文库上搜索。
1、PC与数控机床通信系统-单片机软件设计(可编辑)(文档可以直接使用,也可根据实际需要修改使用 ,可编辑推荐下载)PC与数控机床通信系统-单片机软件设计A PC与数控机床通信结点的程序流程图程序流程图B、PC与数控机床通信结点的程序源代码;指示性语句ADDRESSEQU 90H地址寄存器.ADDREG EQU 30H; 地址缓冲区 .ASCADDHEQU 31H;地址ASC码.ASCADDLEQU 32H;地址ASC码.RS485IOEQU 0B3H;RS485输入输出选择:0-选择输入,1-选择输出.RS485CEEQU 0B5H;RS485选择使能:1-有效.RS232CEEQU 0B4H;
2、RS232 选择使能 :1- 有效.START_BYTEEQU01H; 起始命令字SEND_BYTEEQU02H; 发送命令字.READ_BYTEEQU03H; 接收命令字 .; 错误命令字 .FINISH_BYTE EQU 17H; 结束命令字 .ODD BIT 0D0H ; 奇校验位 .ODD_BIT BIT 0E7H; 奇校验缓冲位 .TIMEHEQU 03HTIMELEQU 9BH; 定时常数 ,(60S).C_BITBIT 00H; 进位标志缓冲位 .A_BYTEEQU 33H; 累加器缓冲区 .DOGIN BIT 0B7H; 看门狗喂狗输入 .ORG 0000HAJMP MAINO
3、RG 000BHAJMP T0PRGORG 0100HMAIN:MOV SP,#50HACALL WATCHDOG ; 调看门狗喂狗子程序 .MOVP1,#0FFHMOVP3,#0FFHACALL COMRST; 串行口初始化 .MOVA,ADDRESS; 读地址 .AJMP PCPRG; 与 PC 机接口 .MAIN1:AJMP SCPRG; 与数控机床接口 .PCPRG:ACALL WATCHDOG; 调看门狗喂狗子程序 .SETB RS485IO;允许RS485输出.禁止RS485输入.CLRRS485CESETB RS232CE; 选择 RS232.ACALL DELAYACALL D
4、ELAYACALL DELAYACALL DELAYCLRRIPCWAIT: ACALL WATCHDOG; 调看门狗喂狗子程序 .; 读地址 .CJNE A,#00H,PCWAIT1 ; 检测地址是否改动 .SJMP PCWAIT2PCWAIT1:AJMP MAINPCWAIT2: JNB RI,PCWAIT ; 无接收数据 , 则循环等待 .CLRRIMOVA,SBUFSETBRS485IO允许RS485输出.禁止RS485输入.CLR RS232CESETB RS485CE; 选择 RS485.ACALL DELAYACALL DELAYACALL DELAYACALL DELAYACA
5、LL DELAYACALL DELAYACALL DELAYMOV SBUF,APCWAIT18: JNB TI,PCWAIT18 ; 发送未完 , 则循环等待 .CLRTICLRODD_BIT; 清除奇校验位 .CJNE A,#START_BYTE,PCPRG ; 判断是否为起始位 .SETB RS485IO;允许RS485输出.禁止RS485输入.CLRRS485CESETB RS232CE; 选择 RS232.ACALL DELAYCLRRIACALL TIMESET设置定时器 (60S).; 调看门狗喂狗子程序 .JNBRI,PCWAIT3; 无接收数据 , 则循环等待 .CLRRIM
6、OVASCADDH,SBUFPCWAIT4: ACALL WATCHDOG; 调看门狗喂狗子程序 .JNBRI,PCWAIT4; 无接收数据 , 则循环等待 .CLRRIMOVASCADDL,SBUF; 地址接收完毕 .ACALL TIMEOFF; 关定时器 .SETB RS485IO;允许RS485输出.禁止RS485输入.CLR RS232CESETB RS485CE; 选择 RS485.ACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYMOV SBUF,ASCADDHPCWAIT5:;
7、 发送未完PCWAIT6:; 发送未完JNB TI,PCWAIT5 则循环等待 .CLRTIMOVSBUF,ASCADDLJNB TI,PCWAIT6 则循环等待 .CLR TI; 地址发送完毕CLRRS485IO;允许RS485俞入.禁止RS485俞出.CLRRS232CESETB RS485CE; 选择 RS485.ACALL DELAY; 设置定时器 (60S).PCWAIT7:ACALLWATCHDOG; 调看门狗喂狗子程序 .JNBRI,PCWAIT7; 无接收数据 , 则循环等待 .CLRRIMOVA,SBUFACALLTIMEOFF; 关定时器 .CJNEA,ASCADDH,PC
8、ERRE1; 判断地址是否相等 .ACALLTIMESET; 设置定时器 (60S).PCWAIT8:ACALLWATCHDOG; 调看门狗喂狗子程序 .JNBRI,PCWAIT8; 地址相等 , 继续接收 .CLRRIACALLDELAYCLRRIACALLTIMESETMOVA,SBUFACALL TIMEOFF; 关定时器 .CJNE A,ASCADDL,PCERRE1 ; 判断地址是否相等 .AJMP PCCONTINU1; 地址相等 , 继续 .PCERRE1: SETB RS485IO;允许RS485输出.禁止RS485输入.CLRRS485CESETB RS232CE; 选择 R
9、S232.ACALL DELAYACALL DELAYACALL DELAYMOVA,#ERRE_BYTE; 发送错误命令字 .MOVC,ODDCPLCMOVODD_BIT,C加奇校验位 .MOVSBUF,APCWAIT9: JNB TI,PCWAIT9CLR TIAJMP PCPRG; 返回PCCONTINU1: SETB RS485IO;允许RS485输出.禁止RS485输入.CLRRS485CE; 地址相等 .SETB RS232CE; 选择 RS232.ACALL DELAYACALL DELAYACALL DELAYMOV SBUF,ASCADDH; 向 PC 机回发地址 .PCWA
10、IT10:JNB TI,PCWAIT10CLR TIMOV SBUF,ASCADDLPCWAIT11:JNBTI,PCWAIT11TICLR; 地址回发完毕 .ACALLDELAYCLRRIACALLTIMESET; 设置定时器 (60S).PCWAIT12:ACALL WATCHDOG; 调看门狗喂狗子程序 .JNBRI,PCWAIT12; 无接收数据 , 则循环等待 .RICLRMOVA,SBUFACALLTIMEOFF; 关定时器 .SETBRS485IO;允许RS485输出.禁止RS485输入.CLRRS232CESETBRS485CE; 选择 RS485.ACALLDELAYACAL
11、L DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYMOVSBUF,APCWAIT16: JNB ; 发送未完 , 则循环等待 .TI,PCWAIT16CLRTI; 数据发送完毕CLR; 清除奇校验位 .ODD_BITCJNE A,#SEND_BYTE,PCNEXT1判断是否为PC发送命令字.AJMP PCSENDPCNEXT1:否为PC接收命令字CJNE A,#READ_BYTE,PCERRE2判断是AJMP PCREADPCERRE2:SETB RS485IO;允许RS485输出.禁止RS485输
12、入.CLR RS485CESETB RS232CE ; 选择 RS232.ACALL DELAYACALL DELAYACALL DELAYMOV A,#ERRE_BYTE; 发送错误命令字 .MOVC,ODDCPLCMOVODD_BIT,C加奇校验位 .MOVSBUF,APCWAIT13:JNB TI,PCWAIT13CLR TIAJMP PCPRG ; 返回;PC 机发送数据到数控机床 .PCSEND: SETB RS485IO;允许RS485输出.禁止RS485输入.SETB RS232CE; 选择 RS232.ACALL DELAYACALL DELAYACALL DELAYCLR R
13、IACALL TIMESET; 设置定时器 (60S).PCWAIT14: ACALL WATCHDOG; 调看门狗喂狗子程序 .JNBRI,PCWAIT14; 无接收数据 , 则循环等待 .CLRRIMOVA,SBUFACALL TIMEOFF; 关定时器 .SETB RS485IO;允许RS485输出.禁止RS485输入.CLR RS232CESETBRS485CE; 选择 RS485.ACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYMOV SBUF,APCWAIT15: JNB TI,PCWAIT15; 发送未完 , 则循环等待 .CLRTI; 数据发送完毕 .CLRODD_BIT; 清除奇校验位 .CJNEA,#FINISH_BY