
1·1单片机的设计
1·1·1单片机S52的简单介绍
在这次的实习中我们使用的是S52单片机的焊接,虽然我们平时学的是51系列单片机的原理和应用。使用S52单片机,可进行51单片机的学习实验以及实际项目的开发。
S52开发板的模块特点:双路电源模块:提供全板各模块电源,专为A/D和D/A单元模块提供一路稳定的参考电源;单片机核心系统模块:实验板的核心,全部引脚均由双排插针引出,便于引脚的复用;LED指示灯模块:8位LED高亮指示灯,可做跑灯、信号提示等实验; 蜂鸣器、继电器控制模块:可作报警、大负载的开关控制实验;按键输入模块:4位按键,可作按键输入实验;光藕隔离输入输出模块:可做霍尔脉冲计数、直流电机等实验;数码管显示模块:4位共阳极数码管,可做各种数码管显示实验;锁存器模块:便于系统的扩展实验;模拟信号调理模块:电压输入、温度传感器输入信号的调理,可做为A/D的前级输入和理解运算放大器的应用原理;A/D转换模块:采用8路输入的8位并行A/D芯片ADC0809,可做相应的A/D实验;D/A转换模块:采用8位并行D/A芯片DAC0832,可做相应的D/A实验;UART模块:可做与PC机的各种通讯实验;液晶显示接口模块:可做段式液晶0804以及字符液晶1602实验;存储器模块:采用I2C总线的AT24C02,可做I2C和有关的存储实验; 实时时钟模块:采用飞利浦的PCF8563,可做相应实时时钟的实验;红外遥控模块:可做红外遥控器解码实验。
跟51系列的单片机一样,它有四十管脚,可分为三类:
电源及时钟引脚:VCC,Vss,XTAL1,XTAL2
控制引脚:PSEN,ALE,EA,RESET
I/O口引脚:P0,P1,P2,P3,为四个8为I/O口的外部引脚
图1 S52芯片管脚图
1·1·2单片机S52的原理图设计
在焊接之前我们进行了查阅资料,查阅了单片机S52的管脚图和它的开发电路图,并且先用了画图软件protel99SE进行了原理图的设计和分布,原理图如下:
图2 S52单机开发板
1·2 单片机的焊接与调试
1·2·1 焊接中遇到的问题
这次生产实习的焊接并不像想象中的那么容易,尽管我们之前有过一次认识实习的焊接,但单片机的开发焊接仍然是问题百出,我总结了三点:第一,过焊和虚焊现象,可能是人为原因,也可能是电烙铁的生锈导致我们在焊接一些小部件的时候老是不如人所愿,不是过焊就是虚焊,每次还得用吸锡器洗掉再次重新弄;第二,注意电解电容、发光二极管、蜂鸣器的正负极性不能接反、三者均是长的管脚接正极、短的管脚接负极,如接反轻则烧毁元气件,重则发生轻微爆炸;ISP插槽应该注意方向。缺口对应板子的外面、如果接反下载线将不能接好;数码管的焊接应该是有小数点的一侧在下面、接反影响数码管的显示;发光二极管要注意正负极性,长端为正极,短端为负极。板子上面有相应的图形形状,按照那个图形焊接;焊接元气件的过程之中焊接时间应在2-4秒;第三,焊接时间不宜过长,否则不仅会烧毁元气件、而且易使焊点容易脆裂;电阻焊接过程中注意相应的阻值对应,不要焊错,否则影响相应的电流大小。在焊接时也一定要注意焊接元件的顺序,基本上秉承着方便性原则,先焊接大部件,在焊接小部件,焊接元件管脚多时(双排40脚排针)要注意焊接工艺,尤其注意的是在焊接芯片插槽时切不可把芯片连到插槽上一同焊接,因为焊接时过热的温度会烧坏芯片,一定要把芯片插槽焊接完毕之后,再把芯片插到插槽中。
焊接完成的实品如图:
图3 开发板焊接实际图
1·2·2 S52单片机的调试程序
调试步骤:打开Kevil→Project→Atmel→ATS52,保存(若是汇编程序,后缀为.asm;若是C语言编程,后缀为.c),在USB驱动中,选择文件(后缀为.hex)→调入Flash→编辑器及接口用USBASP擦除→自动→结果
本实验程序是利用C语言进行编译实现的。由此可见,单片机尤其是S52系列在编辑程序上的灵活性和可操作性。汇编语言是单片机运行的主语言,但C语言的引入不仅丰富了单片机的编程语言,更是为单片机的学习者提供方便,可以说任何有编程基础的人都可以掌握简单的单片机程序。程序如下:
(1)让开发板中的一排发光二极管从左到右,在从右到左逐次闪亮
ORG 0000h
AJMP loop
ORG 0080h
loop:MOV P1,#0FFH
CLR P1.0
LCALL delay
CLR P1.1
LCALL delay
AJMP loop
delay:MOV R5,#20
d1:MOV R6,#20
d2:MOV R7,#248
DJNZ R7,$
DJNZ R6,d2
DJNZ R5,d1
RET
END
(2)从中间向两边逐次闪亮:
#include Sbit P10=P1^0; sbit K1=P3^2; sbit K3=P3^3; void main(void) { while(1) { if(!K1) {P10=0; } if(!K3) {P10=1; } } } 第二章 参观体会 那天在郑老师的带领下参观了天津仪表控制有限公司,公司规模虽然不是很大,但设备齐全,刚进去的时候就有公司的负责人马总亲自给我们讲解公司的历史和规模,建始于92年,所有自动控制设备是由日本引进,它所有的系统都集成于一个屏幕上,它是一个DCS体系结构,分别有四级:管理层,操作监视层,控制层和现场仪表层。并为为我们讲解了DCS系统,也就是俗称的分散型控制系统(distract control system)。这是国际上最流行的也是在此领域里最为有效的系统。该系统的可靠性与稳定性首屈一指,在一个自动化的厂房中,开系统可以自动检测温度,压力,流量等实际数据,并且可以根据实际情况自动进行调节,当然也可以允许手动调节,并且该系统可以配合FCS现场控制站,OPS操作员站,EOS工程师站,它们通过总线进行连接,FCS,OPS,EOS三者互相配合DCS系统,并且三者互相监督,更是保证了系统的稳定性与可靠性。 它整体的自动控制系挺令人震撼,所讲述的理论知识也都是我们所学的,比如说楼宇自动控制课,仪表方面的传感器技术,都是我们教学范围内所学的,最为吃惊的是那么庞大的控制界面竟是由C语言编程实现的,在感叹之余,我想要承认的是并不是学校学的东西用处不多,反而它渗透在生活,工作上的方方面面。 做后马总说的招聘人才方面说道:大部分公司不想要应届毕业生工作是有原因的,因为他们眼高手低,动手能力差。马总说他喜欢有一到两年工作经验的,这些经验的人在这两年里并不代表不断的跳槽换行,而是真正的在技术部门学到了一些拿手的技术,这个社会需要全才,通过这次参观,我受益匪浅,明白如何把自己培养成一个全面的人才。 我们牢记马总说的大学生招工时的稳定心态的重要性,以及我们在大学里学习目的的重要性。我们在大学里究竟学的是什么,是一种学习的方法,而我们来到了社会上学的是处世经验与工作本领。 第三章 单片机开发板的应用 3·1波形发生器的设计 3·1·1设计要求 设计一个由8051单片机构成的波形发生器,可控制输出锯齿波,方波,正弦波等波形。主要器件:单片机,D/A转换器0832,运算放大器741。 也就是利用先前已焊接的S52开发板进行外部连接扩展的自主开发电路。其具体功能就是利用S52上的芯片烧制程序后扩展到外部电路以实现方波,锯齿波,正弦波的输出。 焊接前的主要部件:DAC0832芯片,DAC0832芯片插槽,两个集成的741芯片,两个741芯片插槽,两个(R=7.5)的电阻,一个(R=15)的电阻,若干双口插线,若干普通焊线,一个焊接板。 3·1·2 DAC0832的介绍 主要芯片管脚图: 图4 数模转换芯片0832 1.DAC0832是双列直插式8位D/A转换器。能完成数字量输入到模拟量(电流)输出的转换。图1-1和图1-2分别为DAC0832的引脚图和内部结构图。其主要参数如下:分辨率为8位,转换时间为1μs,满量程误差为±1LSB,参考电压为(+10~-10)V,供电电源为(+5~+15)V,逻辑电平输入与TTL兼容。在DAC0832中有两级锁存器,第一级锁存器称为输入寄存器,它的允许锁存信号为ILE,第二级锁存器称为DAC寄存器,它的锁存信号也称为通道控制信号 /XFER。 各引脚的功能定义如下: (1)、DI7~DI0 :8位的数据输入端,DI7为最高位。 (2)、IOUT1 :模拟电流输出端1,当DAC寄存器中数据全为1时,输出电流最大,当 DAC寄存器中数据全为0时,输出电流为0。 (3)、IOUT2 :模拟电流输出端2, IOUT2与IOUT1的和为一个常数,即IOUT1+IOUT2=常数。 (4)、RFB :反馈电阻引出端,DAC0832内部已经有反馈电阻,所以 RFB端可以直接接到外部运算放大器的输出端,这样相当于将一个反馈电阻接在运算放大器的输出端和输入端之间。 (5)、VREF :参考电压输入端,此端可接一个正电压,也可接一个负电压,它决定0至255的数字量转化出来的模拟量电压值的幅度,VREF范围为(+10~-10)V。VREF端与D/A内部T形电阻网络相连。 (6)、Vcc :芯片供电电压,范围为(+5~ 15)V。 (7)、AGND :模拟量地,即模拟电路接地端。 (8)、DGND :数字量地。 2.uA741是高增益运算放大器,具有广泛的共同模式,差模信号范围和低失调电压调零能力与使用适当的电位。 图5 uA741 引脚图 引脚定义:1和5为偏置端(调零端),2为正向输入端,三为反向输入端,4接地,6为输出,7接电源,8为空脚。 焊接过程: (1)先把插槽固定在焊接板上,最好是安排好位置,以便于可以方便的焊接; (2)把芯片固定在插槽上,然后把电阻布局好; (3)开始插线焊线,这个是最关键的一步,为了焊接的时候不必要密密麻麻,我们应该把要连一块的线分出来,焊接到一块后单独引出一根线即可,这样做的目的是避免在做测试的时候线太多过于混乱而出错。 3·2 波形发生器的应用电路 波形发生器的设计是为了充分利用单片机开发板S52和DAC0832的输出功能。再画原理图的时候。要注意很多: 在应用99SE画图时,要防止线没连上,有断处;其次一些因教师特殊用途,如地引脚和电源引脚要把他们的性质分别改为Ground和Power。Protel 99SE的好用之处在于在他调用其坚实的方便。 图6 单片机和DAC0832输出连接图 说明:当ILE接高电平,、、和都接数字地时,DAC处于直通方式,8位数字量一旦到达DI7~DI0输入端,就立即加到8位D/A转换器,被转换成模拟量。例如在构成波形发生器的场合,就要用到这种方式,即把要产生基本波形的数据存在ROM中,连续取出送到DAC去转换成电压信号。 注意:在线路焊接过程中,需注意共地共电源,52单片机的40管脚要与0832的20,19,8管脚相连接5V,两块741片子的4管脚相连要接负。52单片机的20管脚和0832的3,10管脚相连共地。 图7 波形发生器实物图 3·3 调试 调试过程如第一章所述:打开Kevil→Project→Atmel→ATS52,保存(若是汇编程序,后缀为.asm;若是C语言编程,后缀为.c),在USB驱动中,选择文件→调入Flash→编辑器及接口用USBASP→自动→结果 3·3·1 调试程序 (1)方波程序 JUXING: MOV DPTR,#7FFFH LP:MOV A,R0 ;设置输出上限 MOVX @DPTR,A LCALL DEL_H ;调高电平延时程序 MOV A,R1 MOVX @DPTR,A LCALL DEL_L ;调低电平延时程序 RET (2)锯齿波程序 JUCHI: MOV DPTR,#7FFFH MOV A,#00H LOOP:MOVX @DPTR,A INC A; SJMP LOOP RET (3)在开发板上逐个按键输出波形 程序如下: #include sbit key2=P3^4; sbit key1=P3^3; sbit key0=P3^2; char flag; //波型输出标置变量 bit time; unsigned char i; int num ; void frequency() ; void delay(int z) //延时 z毫秒 { int x,y; for(x=z;x>0;x--) for(y=124;y>0;y--); } unsigned char sin(unsigned char x)//正弦波 { unsigned char code sin_tab[]={0x80, 0x83, 0x86, 0x, 0x8c, 0x8f, 0x92, 0x95, 0x98, 0x9c, 0x9f, 0xa2, 0xa5, 0xa8, 0xab, 0xae, //上半周 0xb0, 0xb3, 0xb6, 0xb9, 0xbc, 0xbf, 0xc1, 0xc4, 0xc7, 0xc9, 0xcc, 0xce, 0xd1, 0xd3, 0xd5, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xed, 0xef, 0xf0, 0xf2, 0xf3, 0xf4, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfc, 0xfd, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xfd, 0xfc, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf4, 0xf3, 0xf2, 0xf0, 0xef, 0xed, 0xec, 0xea, 0xe8, 0xe6, 0xe4, 0xe2, 0xe0, 0xde, 0xdc, 0xda, 0xd8, 0xd5, 0xd3, 0xd1, 0xce, 0xcc, 0xc9, 0xc7, 0xc4, 0xc1, 0xbf, 0xbc, 0xb9, 0xb6, 0xb3, 0xb0, 0xae, 0xab, 0xa8, 0xa5, 0xa2, 0x9f, 0x9c, 0x99, 0x96, 0x92, 0x8f, 0x8c, 0x, 0x86, 0x83, 0x80, 0x80, 0x7d, 0x7a, 0x76, 0x73, 0x70, 0x6d, 0x6a, 0x67, 0x, 0x61, 0x5e, 0x5b, 0x58, 0x55, 0x52, //下半周期 0x4f, 0x4c, 0x49, 0x46, 0x43, 0x41, 0x3e, 0x3b, 0x39, 0x36, 0x33, 0x31, 0x2e, 0x2c, 0x2a, 0x27, 0x25, 0x23, 0x21, 0x1f, 0x1d, 0x1b, 0x19, 0x17, 0x15, 0x14, 0x12, 0x10, 0x0f, 0x0d, 0x0c, 0x0b, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 ,0x09, 0x0b, 0x0c, 0x0d, 0x0f, 0x10, 0x12, 0x13, 0x15, 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x23, 0x25, 0x27, 0x2a, 0x2c, 0x2e, 0x30, 0x33, 0x35, 0x38, 0x3b, 0x3d, 0x3e, 0x40, 0x43, 0x46, 0x48, 0x4b, 0x4e, 0x51, 0x54, 0x57, 0x5a, 0x5d, 0x5f, 0x60, 0x63, 0x66, 0x69, 0x6b, 0x6d, 0x6f, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7e, 0x80}; return sin_tab[x]; } void DAC0832(unsigned char x) { P1=x; } void main() { char d; d=1; TMOD=0X02; num=10; TH0=256-num; //num用来控制采样一个点所用的时间 TL0=256-num; ET0=1; //按键接于外部中断0,与中断1 EA=1; TR0=1; flag=2; //开始时有输出 i=0; while(1) { if(key2==0) //按一下key3,d自加1 { delay(5); if(key2==0) { while(!key2); d++; if(d==21)//当d=21,d变为1 d=1; } } frequency() ; if(time==1) { time=0; if(i>255) i=0; else i=i+d; //设置采样间隔 switch(flag) //当按键1的为输出三角波,按键2时输出正弦波 { case 0:DAC0832(i);break;// 当flag=0时,锯齿波 case 1: if(i>127)// 当flag=1时,三角波 DAC0832(255-i); else DAC0832(i); break; case 2: DAC0832(sin(i)); //当flag=2时,正弦波 break; default: break; } } } } void time0() interrupt 1 { TH0=256-num; TL0=256-num; time=1; } void frequency() { if(key0==0) // //key0控制flag,频率选择 { delay(5) ; if(key0==0) //再次检测 { while(!key0); //等待按键释放 flag++; //按一下加1 if(flag==3) //大于2返回0 flag=0; } } if(key1==0) //检测P21是否按下 { delay(5) ; if(key1==0) //再次检测 { while(!key1); num=num+10; //按一下减10 if(num==250) //小于5,返回5 num=10; } } } 3·3·2波形输出 (1)示波器输出锯齿波: 图8 锯齿波 (2)示波器输出正弦波: 图9 正弦波 (3)示波器输出方波: 图10 方波 (4)示波器输出三角波: 图11 三角波 第四章 实习心得体会 通过这次实习我了解了许多东西,以前学本专业的时候老是不知道自己将来要干什么,这次实习要我认清了以后的一个发展方向,比如单片机这方面就是一个很好的领域。 这次实习不仅给了我们动手锻炼的机会,而且巩固了我们所学的理论知识。尤其是单片机S52的学习,可以跟课本上所学的51单片机相结合,这次的S52单片机开发板的开发以及其外接扩展电路信号发生器的设计都是自主性的。 接下来的编译环节,更是巩固了我们之前所学的知识,这次实习提供了更好的编程平台,既可以用C语言编写程序,也可以用汇编语言编写。有些调试程序用C语言编写容易实现,有些则不然。之后调试波形输出部分,更是锻炼了我们的耐心,示波器是一个比较灵敏的仪器,我们必须慢慢调试才能得到好的波形,好多线路并没有问题,但由于大家的信心和耐力不足,导致没能及时调处波形的大有人在。 而且每组元之间的配合更是关键的地方,在安装和焊接过程中,必须要组员之间的分工合作来完成,在波形发生器的焊接中更能体会到团队精神,只有组员之间的分工合理才会达到更好的效果。 这次实习时间充足,但它并不是把大家全部的时间用在实习教室,而是把许多时间给大家自由支配,在这次实习里,我们可以有充分的时间去网上查阅资料,来丰富知识。在查阅过程中,我们可以学到课本以外的知识。 这是我第二次实习,每次实习我都能有意外的收获,这次我熟悉使用电烙铁之余,还自己总结了一些焊接技巧,可以使自己在最短的时间里焊接出漂亮的开发板。我想说的是感谢老师给我们的这次实习机会,也感谢我的同学们的帮助,提高了自己动手能力,希望这种锻炼的机会可以更多
