课程设计说明书
第14页
现的故障,元器件的安装位置出错或引脚插错都可能导致电路短路或实现不了电路应有的功能,甚至烧坏元器件。为方便调试,用信号发生器产生的1KHz的正弦信号送给LM358整形电路,调试直到可以输出矩形脉冲信号为止,该整形电路调试即可完成。然后以此信号为测试信号送给单片机系统,进行测量、显示等其他功能的调试。 5.2 软件调试
测量系统与PC机连接时一定要先连接串行通信电缆,然后再将其电源线插入USB接口;拆除时先断开其电源,再断开串行通信电缆,否则极易损坏PC机的串口。
在进行软件编程调试时需要用到单片机的集成开发环境MedWin V2.39 软件,编程时极易出现误输入或其他的一些语法错误,最重要的还有一些模块无语法错误却达不到预期的功能,都要经过调试才能排除。MedWin V2.39 软件具有很强大的编程调试功能,能够模拟仿真实际单片机的端口和内部功能部件的状态值。该软件中有硬件调试和软件调试功能,可以观察单片机内存单元对应的运行值,可以显示单片机端口、中断、定时器1、定时器2还有串口对应的运行值。可以单步调试也可以模块调试,最好的是可以对你所怀疑的语句模块设置断点。MedWinV2.39 具有的强大的编译调试功极大地方便了对软件部分的调试。在具体调试过程中,系统将各功能模块如数据处理程序、按键程序设计、中断服务子程序、LED显示程序分别分开进行调试,最后进行主程序的整体调试。编译无误后生成目标代码BIN文件 。
6 测试结果分析
设计基本完成题目中的各项要求,其中电机转速的测量比较精确,与实际转速相差10 转/分左右,精度在全量程范围内优于10转/分,存在一定的误差,经分析主要是由以下原因造成:
1)由于电机的转盘是采用塑料盘片磨制而成,高速旋转时容易打飘不稳,导致获得的脉冲信号频率与实际转速有一定的误差。
2) 中断处理的进入和中断处理程序都会有一定时间的误差,从而导致定时时间的误 差,这也是造成测量误差的一个因素。
3)在固定装置时,由于是手动操作,从而导致初始获得信号有一定的时差。
课程设计说明书
第15页
参 考 文 献
[1]何希才,薛永毅.传感器及其应用实例[M].北京:机械工业出版社,2004.1 [2]谭浩强.C程序设计(第二版)[M].北京:清华大学出版社,1999 [3]谢嘉奎,宣月清,冯军 . 电子线路[M].北京:高等教育出版社,2004 [4]康华光 .电子技术基础[M].北京:高等教育出版社,2004 [5]胡斌 . 图表细说电子元器件[M].北京:电子工业出版社,2004.5 [6][德]克劳斯·贝伊特.电子元件[M]. 北京:科学出版社,1999.8 [7] 施钰川.太阳能原理与技术[M].西安:西安交通大学出版社,2009.8
课程设计说明书
第16页
[8]余锡存,曹国华.单片机原理与接口技术[M] .西安:西安电子科技大学出版社,2000.7
附录
C语言程序:#include
#define uchar unsigned char #define uint unsigned int #define DataPort P1
sbit LATCH1=P2^0;//定义锁存使能端口 段锁存 sbit LATCH2=P2^1;// sbit PPP=P3^1; sbit zzz=P0^7;
课程设计说明书
第17页
unsigned char code
HEYAO_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char code
TempData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}; uchar dispbuf[8]={0,0,0,0,0,0,10,10}; uchar Temp[8]; uchar dispcount; uchar T0count; uchar timecount; bit flag;
unsigned long x;//timecount; void delay()
void Display(unsigned char FirstBit,unsigned char Num) {
static unsigned char i=0; do{
DataPort=0xff; //清空数据,防止有交替重影 LATCH1=1; //段锁存 LATCH1=0;
DataPort=HEYAO_WeiMa[i+FirstBit]; //取位码 LATCH2=1; //位锁存 LATCH2=0;
DataPort=Temp[i]; //取显示数据,段码 LATCH1=1; //段锁存 LATCH1=0; i++; if(i==Num) i=0; delay();
}while(PPP==1); } void main() { PPP=1;
TMOD=0x15;//TH1定时,模式1;TH0计数,模式1 TH0=0; TL0=0;
TH1=(65536-50000)/256;
TL1=(65536-50000)%6; ET0=1; ET1=1;//TH0,1溢出允许中断 EA=1;//允许中断 TR1=1; TR0=1;//开始计数 while(1) {
if(flag==1) { flag=0;
x=(TH0*256+TL0)*5; if(x>6000) { int i; for(i=0;i<30;i++) {
zzz=0; delay(); zzz=1; delay(); } }
Temp[0]= TempData[x]; Temp[1]= TempData[x0/10]; Temp[2
课程设计说明书
第18页
]=TempData[x/100]; Temp[3]=TempData[x/1000];
Display(0,4); timecount=0; T0count=0; TH0=0; TL0=0;
TH1=(65536-50000)/256; TL1=(65536-50000)%6; TR0=1; TR1=1; PPP=1; } } }
void t0(void) interrupt 1 { T0count++; }
void t1(void) interrupt 3 using 0 { TH1=(65536-50000)/256;
TL1=(65536-50000)%6; timecount++; if(timecount==20) {
TR0=0; TR1=0; timecount=0; flag=1; } } void delay() { int i; for (i=0;i<125;i++) { _nop_(); } }