2727.智能车辙测试仪控制系统设计程序代码.doc
-
资源ID:3930238
资源大小:25.50KB
全文页数:5页
- 资源格式: DOC
下载积分:8金币
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
2727.智能车辙测试仪控制系统设计程序代码.doc
#include<absacc.h>#include<reg51.h>#define unchar unsigned char#define uint unsigned int#define ADCOM XBYTE0xff7c#define ADLO XBYTE0xff7F#define ADHI XBYTE0xff7dsfr p1=0x90;sfr p3=0xb0;sbit P10=p10;sbit P11=p11;sbit P12=p12;sbit P13=p13;sbit P14=p14;sbit P15=p15;sbit P16=p16;sbit P17=p17;sbit r=p37;sbit w=p36;char idata sendbuf15; char idata receivebuf3;char idata databuf22;void reset() /*小车复位程序*/ while(P13=0) P15=1; /*延时等待触到限位开关*/P15=0; /*曲柄滑块机构电机停止*/void senddata() /*单片机发送数据至PC子程序*/uint data i;unsigned int data sum=0;sendbuf0=0xff; /*设置识别的包头*/sendbuf1=(P1&0xf0)>>4; /*P1口值的情况赋给控制位*/sum=sendbuf1; for(i=2;i<14;i+) /*计算校验位的累加和*/ sum=sum+sendbufi; sendbuf14=sum&0x01; /*将累加值赋给待发送的位*/SBUF=sendbuf0; while(TI=0); /*等待发送完毕*/ TI=0;for(i=1;i<15;i+) /*发送数据包*/ SBUF=sendbufi; while(TI=0); /*等待发送完毕*/ TI=0; uint ad574() /*启动A/D转换*/unsigned int data i;unsigned int data j; unsigned int data k; r=0;w=0;P11=1;P12=1;ADCOM=0; /*启动转换*/k=2;for(i=0;i<2;i+) /*循环采集A574各通道信号*/ P12=!P12; for(j=0;j<2;j+) P11=!P11; while(P10=1); /*等待转换结束*/ sendbufk=(ADHI>>4); /*采集A/D转换的高八位中的前四位存入数组*/ sendbufk+1=(ADHI&0x0f); /*采集A/D转换的高八位中的后四位存入数组*/ sendbufk+2=(ADLO&0x0f); /*采集A/D转换的低四位*/ databufij=(uint)(ADHI<<4)+(ADLO&0x0f); k+=3; strat() /*开始测试*/ unsigned int data sum;P15=1; P16=1; /*照明设备开*/P17=1; /*风扇设备开*/while(1) ad574(); /*启动A/D转换*/ sum=databuf00+databuf01+databuf10; if(sum/3>2458) P14=0; /*判断温度是否大于60*/ else P14=1; /*启动电热丝*/ senddata(); /*关闭电热丝*/receive() /*接受子函数*/unsigned char data recei;unsigned char data a=0;recei=0;do while(RI=0); /*等待接收一帧完毕*/ RI=0; a=SBUF; if(a=0xff) /*判断是否为包头,握手*/ receivebuf0=a; for(recei=1;recei<3;recei+) /*开始接受数据包余下的数据*/ while(RI=0); /*等待接收一帧完毕*/ RI=0; /*接受中断标志清0*/ receivebufrecei=SBUF; recei=0; while(receivebuf1!=receivebuf2); /*检查校验位不符重新接收*/ keep() /*保温程序*/unsigned int data sum;P16=1; /*照明设备开*/P17=1; /*风扇设备开*/ while(1) ad574(); /*启动A/D转换*/ sum=databuf00+databuf01+databuf10; if(sum/3>2458) P14=0; /*判断温度是否大于60*/ else P14=1;startup() /*等待PC机发送启动信号*/while(receivebuf1!=3)receive(); /*等待开始信号*/keep(); /*开始保温*/main () reset(); /*小车回到其始位置*/TMOD=0x21; /*定时器1工作在方式2,定时器0工作在方式1*/TL1=0xfd; /*设置9600波特率*/TH1=0xfd; /*设置自动重新装入的初始值*/ TCON=0x01; /*设置外部中断1方式为下降沿触发*/SCON=0xd8; /*设置串行口工作在方式3*/ PCON=0x00; /*设置SMOD串行口波特率倍增位为0*/ IE=0x83; /*允许T/C0和外部中断0开放中断开放中断*/ IP=0x01; /*设置中断优先级*/TR1=1; /*启动定时器1*/ TL0=0x00; /*设置接受中断的时间*/TH0=0x00;TR0=1;startup(); stop() /*停止外部设备程序*/P14=0; /*关电热丝*/P15=0; /*关曲柄电机*/P16=0; /*关照明系统*/P17=0; /*关风扇*/blackout() interrupt 1 using 2 /*定时中断,使用3号寄存器组,接受PC指令*/receive(); /*调用接受程序*/switch (receivebuf1) case 1: stop(); /*停止外部设备*/ break; case 2: strat(); /*开始测试*/ break; case 3: keep(); /*开始保温*/ break; default: break; sos() interrupt 0 using 3 /*外部中断实现紧急情况下所有设备的停止*/P14=0; /*关电热丝*/P15=0; /*关曲柄电机*/P17=0; /*关风扇*/