摘 要
单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域的广泛应用。从上世纪80年代,由当时的4位、位单片机,发展到现在的32位300M的高速单片机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。它最早是被用在工业控制领域。
现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。 汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的总和,甚至比人类的数量还要多。
关键词:AT89C51、AD转换、串口通信
1
电气专业技师单片机研修
目 录
摘 要 ............................................................................................................................. 1
1 引 言 ....................................................................................................................... 3
2 单片机电路组成 ....................................................................................................... 4
2.1CPU ................................................................................................................... 4
2.2电源电路 ........................................................................................................ 4
2.3晶振电路 ........................................................................................................ 4
2.4复位电路 ........................................................................................................ 5
2.5 IO口 .............................................................................................................. 5
3 设计内容 ................................................................................................................... 6
3.1主要功能 ........................................................................................................ 6
3.2protel原理图纸 ............................................................................................ 7
3.3 PCB图纸 ........................................................................................................ 8
3.4仿真图纸 ........................................................................................................ 8
4 程序 ........................................................................................................................... 9
致 谢 ......................................................................................................................... 12
2
电气专业技师单片机研修
1 引 言
51单片机是对目前所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。
单片机品种繁多,就应用情况看,应用最广者当属Intel公司的MCS-51系列8位机。在Philips等公司推出新一代80C51系列单片机后,各种型号的80C51层出不穷。 MCS-51系列单片机是Intel公司在总结MCS-48系列单片机的基础上于20世纪80年代初推出的高档8位单片机。MCS-51系列的制成及发展与HMOS
工艺的发展密切相关 ,HMOS是高性能的NMOS工艺。而CMOS与HMOS工艺的结合则产生了C-HMOS工艺的产品,例如80C51、80C31等。这类产品既保持了HMOS高速和高封装密度的特点,又具有CMOS低功耗的优点。C-HMOS工艺的单片机具有掉电保护和冻结运行两种独特的处理方式。
3
电气专业技师单片机研修
2 单片机电路组成
单片机最小应用系统是指用最少的元件组成的可以工作的单片机系统。
MCS-51系列单片机最小应用系统结构。MCS-51系列单片机最小应用系统一般包括主控单片机芯片、电源电路、复位电路和晶振电路。
2.1CPU
单片机在单片机应用系统中,单片机是核心部件,能够自动完成用户赋予它的任务。
2.2电源电路
电源电路单片机是一种超大规模集成电路,在该集成电路内有成千上万个晶体管或场效应骨。因此,要使单片机正常运行,就必须为其提供能量,即为片内的晶体管或场效应管供给电源,使其能工作在相应的状态。
2.3晶振电路
晶振电路单片机是一种时序电路,必须为其提供脉冲信号才能正常工作。由于MCS-51系列单片机内部已集成了时钟电路,所以在使用时只要外接晶体振荡器和电容就可以产生脉冲信号。晶体振荡器和电容所组成的电路称为晶振电路。
4
电气专业技师单片机研修
2.4复位电路
复位电路: 单片机在启动运行时,都需要先复位,即是使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51系列单片机本身,一般不能自动进行复位,必须配合相应的外部电路才能实现。复位电路的作用就是使单片机在上电时能够复位或运行出错时进入复位状态。
2.5 IO口
输入输出口线插座: 单片机通过输入输出口线与外界交换信息。例如,单片机与外设的通讯就是通过输入输出口线实现的。单片机输入输出口线的驱动能力有限。驱动能力不足时.可以在口线上接驱动器。
5
电气专业技师单片机研修
3 设计内容
课程设计内容是利用单片机编写一个恒温控制电路,电路带有AD转换,串口通信等技术。
3.1主要功能
程序中带有串口显示,即把当前的实时温度定时的往电脑发送至电脑并显示。此功能主要用于实时记录温度便于存入档案中,所设定的时间是每10秒发送一次温度值。如果需要立即查看当前温度可以按下PCB板子上的中断按钮,单片机会立刻发送当前温度值。如果程序出错,温度值为错误信息时,单片机会发送错误信息“E1”给电脑。
程序不仅能够显示温度值,还可以调节温度值。可以通过电脑调节的温度值,通过串口发送至单片机。单片机会将所收到的温度设定值与当前的实时温度进行比较。当设定温度大于当前温度时,单片机会启动加热设备(电路中使用LED灯模拟),而但当前温度大于设定温度时,单片机则会关闭加热设备。从而实现一个简单的恒温控制模块。
6
电气专业技师单片机研修
3.2protel原理图纸
由于电脑中的数据为负逻辑,所以在实际应用中必须加入MAX3232来将串口的的数据取反。
7
电气专业技师单片机研修
3.3 PCB图纸
3.4仿真图纸
8
电气专业技师单片机研修
4 程序
#include<AT89X51.H>
sbit OE=P3^4;
sbit ALE=P3^5;
sbit ST=P3^6;
unsigned char adz=0,wdz=0,twz=0x35,jishu=0;//AD值 ,温度值 ,调温值 ,计时 code unsigned char rt_tab[]={188,186,184,181,179,177,174,172,170,167, //0-9
165,162,160,157,155,152,150,147,145,142, //10-19 140,137,135,132,130,128,125,123,120,118, //20-29 116,113,111,109,107,104,102,100,98,96, //30-39 94}; //40
unsigned char cbcw(unsigned char ad_val); //AD值温度值转换
void init(void)
{
IT1=1; //W1中断触发方式
IT0=1; //W0中断触发方式
TMOD=0X21;//T1方式2,T0方式1
SCON=0X50;//串口中断方式1 REN至1
PCON=0X80;//SMOD至1
TR1=1; //开T1定时器
TR0=1; //开T0定时器
ET0=1; //启动T0定时器
TH0=(65536-50000)/256;//50MS初值
TL0=(65536-50000)%256;//50MS初值
TH1=TL1=0XF3;//波特率4800
ES=1; // 开串口中断
EX1=1; //W1启动
EX0=1; //W0启动
EA=1; //总开关开启
P2_7=0; //关闭LED电源
}
void AD_init(void)
{
ST=0; //START上升沿复位
ST=1;
ALE=0; //ALE至0不读取通道
P2=(P2&0xf8);//加载通道0
ALE=1; //读取通道
ST=0; //STRAT下降沿启动
9
电气专业技师单片机研修
}
/***********外部中断0*************/
void INT0_ISD(void) interrupt 0
{
while(P3_2==0); //按键松手检测
AD_init(); //初始化并启动AD芯片 }
/***********定时器中断0*************/
void T0_ISD(void) interrupt 1
{
jishu++; //延时
if(jishu==40)
{
jishu=0;
IE0=1; //进入中断0
}
TH0=(65536-50000)/256; //符初值
TL0=(65536-50000)%256;
}
/***********外部中断1*************/
void INT1_ISD(void) interrupt 2
{
OE=1; //打开输出口OE
adz=P0; //读取数字量
OE=0; //关闭输出口OE
if(adz<=188&&adz>=94)
{
wdz=cbcw(adz); //数字量温度值转换
SBUF=wdz; //发送温度值
}
else
SBUF=0xe1; //发送错误信息
}
/***********数字量转换温度*************/
unsigned char cbcw(unsigned char ad_val)
{
unsigned char i=0,a,b;
while(ad_val<=rt_tab[i])
{
i++; //获取温度值
}
a=i/10; //16进制转换
10
电气专业技师单片机研修
b=i%10;
i=a*16+b;
return(i); //返回温度值
}
/***********串口中断*************/
void CK_ISD(void) interrupt 4
{
unsigned char twz1;
if(RI==1)
{
RI=0;
twz1=SBUF; //获取设定温度
if(twz1>=0x00&&twz1<=0x35) //判断是否有效数据
{
SBUF=twz1; //返回一个设定温度
twz=twz1;
}
else //发送错误信息
{
SBUF=0xe2;
} }
else
{
TI=0;
}
}
main() //主函数
{
init(); //初始化函数
AD_init(); //启动AD芯片
while(1)
{
if(wdz>twz) //判断温度值,启停加热设备(LED) {
P2_7=0; //开加热设备
}
if(wdz<twz)
{
P2_7=1; //关闭家人设备
}
}
}
11
电气专业技师单片机研修
致 谢
本人在学习计算机期间,得到X老师与C老师的精心指导。毛老师..............
12
第二篇:我的单片机学习之路
ǒ〃朋ヴ 20xx年04月10日 22:52 阅读(31) 分类:个人日记
今天一个同学对我说“ 我感觉我都落后了,我机子还装不好 ......” 然后就要退出学习。
碰到这个情况,我有些隐忍,今天就写下我的学习心得。
总是听到有人大喊:“我想学单片机”,“我要学单片机”,“如何入门啊?”,“你们怎么这么厉害,是怎样学的??”等等等等一系列的问题,实在是看多了也感到烦了。同时,我也为我的那些个同学们写写我个人的经历,仅供参考。
说到单片机的学习上了,很多人抱怨自己学校没有单片机课上,所以自己不会单片机。其实并不然,以我为例,我在大二上学期的时候开始接触单片机,那个时候,我什么都不知道,甚至连C语言都不会,更别谈汇编语言,单片机内部结构,单片机C语言编程了。那个时候,我只知道单片机是个很好玩的东西。后来?后来是完全的自学,自己研究走出来的,如果等到学校教一点所谓单片机,我该捡破烂去了!!所以对于我们这类非名校的学生而言,技术离不开自学。 偶然:
我的单片机起步于20xx年10月1日,一个很重要的日子,当时我正在看电视剧《雪豹》,呵呵,那个时候我跟着三维杨总的网络班学习,因为10月3号杨总开始考核我们在网络班学到了什么,其实,我是啥都没学到,考试的前5分钟,我还在看《雪豹》,看到精彩处就不想断了,结果那次考试成绩是23分,显然,我是淘汰者了。对了,我应该说说,我起初学习单片机的动机了,正如我的副标题“偶然”一样,我知道“单片机”这三个字,也是一个非常偶然的机会。20xx年8月底的一份《武汉晚报》上,看到了一篇报道,里面写道二师陈磊,因为学习单片机三学期挂了16门课程,连他学的单片机课程都挂了,他研究单片机可以三天三夜呆在实验室里面,后来做出了很大的成就,技术入股一个公司。看了这样的报道之后,让我感受最深的是单片机这东西居然能让一个人三天三夜不出实验室,于是乎,我开始慢慢了解什么是单片机。后来到学校后,闲来无事就在网上查查什么是单片机,然后了解到,要学单片机就必须买一块实验板,就这样我就在网上漫无目的的寻找单片机开发板方面的东西,就看到武汉一个卖实验板的网站,进去之后联系了一下,结果,他不是卖实验板的,那哥们为人很好(后来我称他“曹哥”)就向我介绍了他一个朋友在搞单片机培训,也有实验板
卖。这样我就欣喜若狂的得到了他给我的号码——杨总的号码。我就给杨总打电话啦,详聊之下,觉得很不错啊,就增加了学习的兴趣了。由于什么都不懂,也不知道从哪里学起,就在杨总的空间里面闲逛,看他写的日志,看他传的视频。日志中写道“要让中国的农民的能学会单片机”嘿嘿,我兴趣更加浓厚了,我至少比一个农民懂的东西多一点吧。巧合也在这里开始了,我在杨的空间里面看到了“陈磊”,因为对这个名字印象特深刻,就下意识地进去看了看,不看不知道,原来,我报纸上看到的陈磊就在这里,就在三维。
奋斗的开始:
可能我写的这故事索然无味,看不到一半,就看不下去了。但是,我真切地希望你能读完它,因为它可能对产生些许感悟。
我学习单片机也是从仿真开始的,当初对单片机一无所知,一个proteus仿真软件就装了4天,不怕大家好笑,我是装了又卸,卸了又装,迅雷上面都下了十几次了。每天晚上都是装到转钟,功夫不负有心人,经过四个转钟之后,我终于安装成功了。欣喜!!!上面讲过,我没事的时候就在杨的空间闲逛,那个时候,我把他空间放到了我的收藏夹里面,觉得里面到处都是宝。看多了之后就慢慢了解了有关单片机方面的知识了,记得,当时他里面讲解单片机是从汇编语言开始讲起的,我那时对汇编语言是一无所知的,没办法啊,背呗!我很用心的将里面所提到的指令一一记录下来,没事了就模仿一下,慢慢的,我就在keil里面编译了一个小程序——点亮一盏LED灯,在仿真上看到效果之后,当时的心情激动啊。慢慢的,我看到了延时子函数,就学会了让一盏LED灯闪烁起来,我很认真地将每一个子函数,每一个指令记下。后来就是交通灯实验啊,动态扫描啊 等。上面提到十一假期,当我看完《雪豹》之后,就开始认真地看起单片机知识了,把每一个程序都亲手编写一遍,大量阅读有关资料。都说单片机入门难啊 ,这样说,自然有它的道理了,不过,只要你坚持,一步一个脚印,就会有奇迹。 对单片机的学习中,有时候得到杨的肯定,但更多的时候是让他失望。期间,我拜访了杨,在他那里求得一块实验板,就是我现在用的这块。20xx年11月份,我一直在忙低碳宣传的活动,没多少时间顾及学习单片机,我给杨说,我活动结束之后就开始学,他第一次沉默。等等11月11日之后,我的活动圆满成功,把喜讯告知他时,他冷冷地说道:一个星期做不出红外感应出来,就叫我把东西送回去。我的那个去哦,红外是什么?我不知道,怎么感应?我不知道。我对这个题目完全是什么都不明白。当我询问他时,他再次沉默。我几近迷失了。在网上
查阅大量的资料,寻找大量的信息,终于找到了一点眉目了,然后再一个讲解中,我发现了红外线发送和接收,我就去问他,他才对我“嗯”了一声,我知道,这是他对我的肯定。眉目是有了,但是真正搭建起电路来就有很大的问题了,什么接收到红外线时有很大的电阻,相当于断路等等,一头雾水的。花了好几个晚上时间,终于整明白了是怎么一回事,怎么搭建电路,当然,我有求助唐同学。说道唐同学,我最佩服他了,我的单片机学习道路上,他可是占住了很大的作用,当然还有另一个引路人——何兄,是他带着我怎么用C语言来编程的。言归正传,在几个晚上的努力之下,终于把硬件搭建好了,剩下的就是编程问题了。前面讲到,何兄一直帮助我学习C语言编程,从零开始,一步一步地给我讲解。在这个程序上,何兄,和唐同学也给了我不少帮助,这里我真心感谢他们俩。经过有一个晚上的努力,程序也编好了。看效果!!哈哈,实现啦!!我手指档过一次,数码管计数一次,很神奇的感觉!!嘿嘿,做出这个我花了四天时间,比杨规定的一个星期还提前了,我高兴地把我的作品给杨看,他才开始和我讲话。 为此,我得出的结论就是——坚持!!,一步一个脚印,坚持会有奇迹!! 尝试成功:
在取得上面的成功之后,对我的单片机有了进一步的兴趣,我相继自学了C语言,定时器中断,外部中断,杨给我新的任务,要我写一个和北京时间同步的程序出了,我虽然是看了有关定时器中断,外部中断的资料,但是却不会用啊。就这样我模仿,我修改,终于在两天之内搞定了这个,说实话,那个时候,我虽然做出了效果,却对中断还不是很清楚。再就是看到唐同学解码了遥控器,并且还写了相关的论文,我好生羡慕啊,看了他的论文,看了他的程序,还是不知所云,管它的,先用了再说,就这样,我就把他的果实拿过来用了。嘿嘿,还不说,确实能够用了,我用遥控器控制了数码管的现实,用遥控器控制了单片机的计数。但是说到底,我对解码过程还是不知道。大二上学期,就在这样的情况下,不断寻找资料,不断模仿,不断改进,不断转化为自己的东西,就这样度过去了。 这段期间,我不断更新视频,用以记录我成长过程中的点点滴滴,8x8点阵,16x16点阵,自动售邮票机等等相继诞生了。第一次又科学家般得成就感。 真正的开始:
真正的开始始于20xx年1月13日,这天我背着电脑来到三维,开始了为期10天的集训。。。。。
来到这里,我结识了几个单片机爱好者,我觉得我的生涯是从这里开始的,这里我之所以称之为“生涯”,而是由前面的“兴趣”产生而来,“生涯”是将它作为我今后的全部,为之付出终身的,我不否认,我以后可能会从事其他行业,但是这种学习精神将会贯穿我生命的始终。
说回来,我时常沉迷于单片机的研究中,也经常省下点生活费跑跑电子市场,买些小元件回来,自己摆弄得好玩。好了,还是说回来,继续开始我在三维的日子,那段时间,被我称之为“真正的开始”,因为我是觉得这十天里,是将我前面所有学到的东西融会贯通。这里学习的是做项目,和我前面做的东西完全不同,但也不是没有联系,我敢说的是,我前面的基础做得还算满意,所以,这段时间的集训,进步也很快。因为项目里面会有很多个部分,而其中任意的一个部分都是由前面的基础演变而来,在前面的基础上加深了,如此众多的部分便成为了一个项目。实验得做,我觉得在开始阶段,很多东西都要亲身经历过才能积累经验的,单看书上说的是一回事,自己做起来又是另外一回事。在实践中,我学到的绝对不止是实验中的一个程序,更加地我学会了如何去解决问题和如何利用实验成果进入下一个更复杂的实验中。
不过想做的太多,时间却太少,那时候还是处于刚进门什么都想学的阶段。但不管时间够不够,做的多少得多少嘛,每天十五六个小时的写程序,调试硬件,结果现在手里就一大堆东西了,呵呵。
记得我做“可调恒温治疗仪”实验的时候,花费了我两个十五六个小时,现在将以这个实验为例,进行阐述。
我覚的要想做好这实验要注意一下几个知识点:
1、对DS18B20数字温度传感器的认识,了解它的技术性能描述、接线说明、主要数据部件的工作原理、DS18B20的初始化、存储器的性能、复位时序定义、写数据时序定义、读取数据时序定义等。
2、单片机内部定时器中断的应用,了解不同型号的芯片内部定时器的方式寄存器(选用适当的工作方式),控制寄存器(选用适当工作方式后的如何控制)。
3、对数码管的认识,了解实验板上的数码管的硬件特性,它的线路连接方式,以及程序中的数据如何在数码管上显示。
4、对动态扫描的掌握及其应用,明白其内部是如何扫描的,如何通过程序来控制数码管的动态扫描(要求数码管不能闪烁)。
5、对按键电路的应用,不同按键的按下控制不同的程序,以及一键多功能的应用。
6、最重要的就是对编写语言的熟练应用,笔者是以C语言编写程序来控制的。这里就需要对C语言的为定义、变量的定义、子程序的调用以及各种语句的应用的掌握了。
调试心得:
1、 对单一的温度采集时,根据不同单片机设置不同的初始化值。
2、 对一个四位数码管同时显示不同的数据,这里的四位数码管是现实倒计时时间、低两位显示设置温度值和采集到的当前温度值,这里的关键就是如何在同一个数组里面放入两组不断变化的不同数据。
期间,就是因为对芯片的认识不够,导致我的温度计在空气中测量是很正常的,一旦下水测试就出现了乱码,我一度认为是程序有问题,在那里做排列组合工作,一做就是一天,那的那个去哦,几近崩溃了!!!可还是没有结果,最后肖老师帮助调试,结果是少了一个上拉电阻的缘故,这就是我说说的对芯片的认识还不够,当时我用的P1端口,我就没意识到,STC12C5A08S2芯片里面,P1端口是没有上拉电阻的,当然这也给我上了宝贵的一课。
狂热:
20xx年的寒假就这样让我度过了近一半的时间。集训回来,我发现我的视野宽阔了不少,我的同学们啊,真是难得的一个寒假,疯狂的在游戏,电影,沉醉于除夕,春节的气氛中,那么我觉得这个寒假是虚度了,还亏损了不少电费。当然,我也快乐地玩了几天,其实回想起来,我应该把更多的时间下在技术研究上,这样的话我现在的技术应该会更好一些。因为工作后自己研究的时间就少很多了嘛。。。
说到这个寒假,学会的东西还真不少,主要是不玩游戏啊,就省下了很多很多时间了。我在不做实验的时候,基本时间都花在网上,找找资料,看看技术类的东西,从网上我得到了很多新信息,包括很多单片机的应用,重要的是这些应用远超越我自己做的那些小试验,小电路板。另一个方面,应用思维也很重要。举个例子:在我没有实际材料的情况下,我用proteus进行仿真实验,做了一个小游戏程序。当然正如我当初想的那样,并不仅仅是为了做游戏而做的,何况现在自己还没能力做游戏出来。寒假期间主要做的是贪吃蛇小游戏,当然我是想了解一下编程思想,它是怎么运动起来的,它是怎么转弯的,它是怎么食果子的等等诸如此类的问题。
不过很可惜,我到现在为止,手上没多少成品,也有很多想法没有实现。 升级:
一次和朋友聊天,从他那里得知了嵌入式,当然,我在而后的时间了解了一下嵌入式,觉得是一个非常有用的东东,就这样,我把我最后的私房钱也割舍出来了,在网上买了资料回来学习,想想前前后后,花在学习,买材料,买资料上面已有几千元了。
当然,我现在也开始看一些有关嵌入式的东西了,觉得这东东特难,花了上百个小时了,还是一头雾水,迷失了方向。路漫漫其修远兮,我仍然会在
高中时候,老师为了要我们努力应付高考,这样说过:你们应该在高中这段时间好好努力,当你们升上大学的时候就会觉得很幸福的了,因为比现在高中自由的多知道吗?所以想以后过快乐的大学生活,就应该现在好好努力上进,再拼搏多一些时间,你们就可以上大学了,自由了!!
于是一片期待中,我就上了大学,发现高中老师在骗人啊,大学原来还要努力复习,考试,不然重修要给钱的,很惨!!!但是我的初期的大学生活还是用来玩,后期才开始明白要学点东西。看到这里,各位还在读大学的兄弟姐妹们是否觉得这样的生活似曾相识??如果你们有同感的话,请你们马上结束这样的生活吧,不然,到你们在离开大学回首当年的时候,恐怕会追悔莫及,无比痛心!!
人生如白驹之过隙,忽然而已。大学4年间,你们都有好好地享受了吗?我觉得,大多数人都是认为大学生活是幸福的,愉快的。因为我们在这个个时间享受年轻的快乐,毫无拘束,不用承担任何社会责任,不用面对社会的压力,不用为生活而烦恼。说到这里,大家是否都有那么一点余味还在脑海中游荡,感觉到一股难得的轻松的快感?