双排直插式89c51单片机引脚图的引脚数是几个?

【图文】单片机AT89C51简介_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
单片机AT89C51简介
上传于||暂无简介
大小:2.92MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢51单片机时钟程序浅析
过年的时候,小鹏((*^__^*))写了一个基于51单片机的时钟程序,过年人很懒,没有仔细研究,如今拿出来研究一下。
STC&89C51是我最先接触的一款单片机,它是一款8位单片机,40引脚直插式封装(其他具体数据记不住了)。最开始学习51是从学习keil&4编译软件的使用开始的,学习如何新建工程,如何向工程添加源码文件,如何编译调试,如何保存文件等等,然后就是如何将程序烧入51。折腾老半天以后才开始学习单片机。
编写完一个时钟程序,应该可以说开始入门了,从菜鸟变成了一只愣小鸟。废话不多说,一起来分析分析吧。时钟程序包括三个模块,即时间处理模块、显示模块和按键检测处理模块。
时钟程序最核心的部分应该是中断这部分,也就是如何控制单片机实现时钟的功能。下面是小鹏的中断处理代码:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
TMOD=0X01;
TH0=()/256;
TL0=()%6;&
这段代码是对中断的初始处理,TMOD是中断模式寄存器,TH和TL分别是两个8位计数器,作为一个16位加一计数器的高8位和低8位,每一个机器周期计数器都会加一,直到溢出后向处理器发出中断申请。假如采用12M的晶振,一个机器周期是12个时钟周期,也就是1&s,要溢出一共需要加216-1次,则溢出需要65536&s,这样的定时对我来说不好控制,我们一般采取溢出一次50ms的时间。我们需要往TH和TL两个计数器装入初值,高八位应装入的值对256求商,即TH0=()/256,低八位应装入的值对256求余,即TL0=()%6。这样当程序产生了20次中断,将耗时1s。小鹏的程序装入的初值为()/256和()%6,是因为采用11.0592MHZ的晶振。ET和TR寄存器分别是中断开关及计数器开关,高电平开。
void&t0_time()&interrupt&1
TH0=()/256;
if&(num1==20)
上面这段代码便是中断处理函数,可以看到每次中断,num1变量会加1,等num1等于20时,即时间过去1秒时,sec变量(即秒钟)加1。如此,时钟便跑起来了!!
光是让时钟跑起来肯定是不行的,大家都知道一般的电子时钟都包含有时钟、日期、闹钟甚至温度计功能,所以程序还需要继续扩展。时间是采用60进制和24进制的,所以程序必须能处理时间进位的问题,下面来看看小鹏的处理代码:
if(sec==60){
&//时间运行进位
if&(min==60){
&&&hour++;
&&&if(hour==24){
&&if&(xq==8)
if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12){
if(day&31){
if(mon&12){
if(mon==4||mon==6||mon==9||mon==11){
if(day&30){
if(mon==2){
&//二月需要判断有几天
big_year();&
if&(flag==1){
& if(day&29){
& & day=1;
& & mon++;
if&(flag==0){
if&(day&28){
看到这么多if语句,估计谁都头大了,不过要实现时间进位问题这些都是必须的。分析可以明白这就是C语言里的if嵌套技术的应用,只是多了一点儿而已。首先,是当sec(秒)变量加到60时,min(分)变量加1,sec变量置零;当min变量加到60,hour(时)变量加1,min置零;以此类推,到day(天)变量加1,xq(星期)加1;接下来的处理就有点麻烦了,我们知道每个月的天数是不同的,2月份的天数还分是否闰年,所以需要分开处理。程序将1、3、5、7、8、10、12月份(31天)放在一起处理,4、6、9、12月份(30天)一起处理,2月份(28或者29天)单独处理。big_year()函数是一个判断闰年的函数,如果是闰年函数会将flag变量置为1,否则将flag置为0。下面是big_year()函数的定义:
void&big_year()
&//判断闰年函数
if(year%4==0&&year0!=0||year@0==0)
else&flag=0;
小鹏的上面程序有个小问题,就是月份加完了没有年份的处理,应该在每个mon++语句后加入下面的小段代码:
if(mon==13){
上面代码还涉及一个星期处理的问题,小鹏的处理比较简单,day变量加1,xq(星期)变量也加1,xq加到8时归零。这样处理肯定可以,当有个问题,当我们调整日期时,还要调整星期,有点麻烦。我们希望程序能够自己根据年月日判断是星期几,这样就不需要调整星期了。这里可以加一个函数实现上述功能,代码如下:
uchar&Week_Analyze()&
uchar&c,y;&
if(mon==1){
year=year-1;
if(mon==2){
year=year-1;
c=year/100;
return&(((c/4)-2*c+y+(y/4)+(13*(mon+1)/5)+day-1)%7);&//泰勒公式法
上面这些处理好了,我们还是看不到实际效果,因为没有显示处理得程序。小鹏是使用1602双色显示屏,显示屏的驱动函数编写这里就没有必要多说了,在时钟程序里只需要编写一个能在屏上显示特定信息的函数,小鹏这个处理方法比我当时编写的时候好,我的就比较笨了。来看看他的函数代码吧:
void&write_f(uint&address,uchar&time_divide)
&{write_com(0x80+address);&
//写命令函数
&&write_data(table1[time_divide]);}
//写数据函数
小鹏这个函数简单实用,效果不错。在显示模块就是一直调用这个函数,在屏上按照你的意愿显示年月日时分秒和星期信息,这部分就仁者见仁智者见智了。小鹏这个显示模块这儿有个消影问题没有注意,在实际使用时有点瑕疵,这个属于细节问题,需要慢慢调试。
一个时钟程序,当然允许使用者通过按键调整日期、时间,这里只需要几个按键即可,所以没有必要使用矩阵键盘。由于小鹏的实验板按键与我的差别比较大,在我的板子上无法实验,我就谈谈我编写这部分程序时的一些看法。
我编写这部分程序时是想用最少的按键来实现功能。我用了4个键,一个键控制程序在正常/调整日期(或调整星期)/调整时间/调整闹钟之间循环切换;两个键控制数值的加和减;另一键实现确认/闹钟开关功能。这部分有点悲摧,程序要避免使用者误操作给程序带来麻烦,同时还要保证每个键盘的功能,这都是需要在编写程序过程中不断调试,%&_&%。。。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。导读:第三章软件的设计和调整过程,软件的设计是我毕业设计的另一个重要方面,它的好坏直接关系毕业设计的成功与否,它是在图表上直观的体现拟设计的目的及过程,术基础,幸好这个在我们以前的电鲜迪爸幸丫莆铡:附右感模挂心托摹:附忧耙哉盏缏吠级栽骷幸桓龊侠淼牟季郑茄幕熬突崾沟缏芳蚪嗝骼剩也灰壮龃恚词钩龃硪踩菀准觳椤O旅婢屠唇樯茉骷暮附臃椒ê凸獭2.4.1硬件的焊接2.4.1.1底
术基础,幸好这个在我们以前的电鲜迪爸幸丫莆铡:附右感模挂心托摹:附忧耙哉盏缏吠级栽骷幸桓龊侠淼牟季郑茄幕熬突崾沟缏芳蚪嗝骼剩也灰壮龃恚词钩龃硪踩菀准觳椤O旅婢屠唇樯茉骷暮附臃椒ê凸獭
2.4.1硬件的焊接
2.4.1.1 底座的焊接
我的电路板有两个底座,一个是单片机AT89C51的,另一个是数码显示管的。我们用的是40脚的双排直插式的,在焊接时,要先把底座插到电路板上再进行焊接,底座各脚的焊点要小,以免各脚之间导通,还不能形成虚焊,虚焊会导致电路不通,底座要焊接牢固,不能和电路板距离太远,以免导致虚焊。底座还要放在公共线的两边,因为那两条线是火线和地线。焊接好后要对照电路仔细检查,再用万用表检测,看焊接是否良好。
2.4.1.2 按键的焊接
我的电路中用到了5个按键,一个复位键、一个发射键、两个置数键,还有我自己加的一个计数控制键。我虽然做的是发射机,但只要对软件进行一些改动,也可以作为接收机,那时发射控制键就变成接收控制键了。
我所用的按键是普通的断开按键,有4个脚,两边各两个,其中每边的两个脚是导通的,在焊接的时候要特别注意,我就是不小心,把相连的两个脚焊接当成不连的脚用来作开关,结果按键按下后不起作用。所以在焊接前一定要用万用表测出那两个脚是导通的,焊接完后再检测,看焊接是否良好。
2.4.1.3 时钟电路的焊接
我们的电路中时钟电路包括一个晶震,两个电容。晶震是6M的,电容是普通电容,焊接前要刮腿,以免接触不好。晶震和电容要尽量靠近芯片,这样有利于时钟电路的稳定,减少干扰。焊接好后要用万用表检测。
2.4.1.4 导线的焊接
导线的焊接比较麻烦。因为导线比较多,就要先对导线进行布局,找好于元器件相对的管脚,焊接前先要检测导线是否导通。焊接完成后要检测是不是连接良好。
2.4.1.5 电路板的检测和故障排除
电路板完成后要进行全面检测,包括以下几个方面:
2.4.1.6和底线的检测
检测单片机底座的Vcc(40脚)是否与火线相连,检测数码管的功用端是否与火线连接,手动复位开关是否连接上火线。地线检查:其他按键接地是否良好,时钟电路接地端的检测,单片机GND端(20脚)是否接地。检查完后再用万用表检查火线和地线是否导通。
2.4.1.7元器件之间的连接的检查
参照电路图,用万用表仔细检查各个元器件连接是否良好,是否对应。
2.5 硬件的调试机器故障排除
硬件的调试在上电后的工作是不是正常,主要包括不插单片机的调试和插上单片机的检测。
2.5.1 无单片机的调试
无单片机调试主要检查电路工作是否正常,调试数码管是否点亮,显示数据是否正确,具体步骤如下:
A:打开电源,将输出电压调到5伏,然后关闭电源。
B:将电路板的火线与电源正极相连,地线与负极相连。
C:打开电源,用万用表检测电路板是否有输出电压,如果有就是好的,没有就要检测是否有短路。
D:电路检查完后,关闭电源,用一根导线与电源负极相连,然后打开电源,用导线的另一端逐个与P0、P2口的管脚接触,看数码管显示是否正确。
调试过程中遇到的问题及解决办法:
(1)上电后,用导线一端接低电平,另一端逐一连接P0、P2管脚,数码管显示不正常,检测后发现管脚有短路现象,将短路管脚重新焊接后,显示正常。
(2)反复调试几次后,发现电路不稳定,有时没反应。仔细分析后,觉得是稳压管有问题,拆除后直接接5V电压源,问题解决。
2.5.2单片机的调试
加上单片机,目的是看单片机能否正常工作,有效地控制显示数据。编写一个小程序,烧入芯片中加点调试。
A:程序如下:
DPTR,#DDSS
A,@A+DPTR
3FH,06H,5BH,4FH,66H
7DH,07H,7FH,6FH
B:将编好的程序进行编译,即将*.ASM文件转化为*.BIN文件,然后烧入片子。程序的编译和烧入将在以后介绍。
C:把单片机AT89C51接入底座插入底座,加电,看各位显示是不是正确。
D: 用复位键看显示是否正确,如果稳定,表示调试成功。
调试过程中遇到的问题:
上电后,用示波器检测30脚,发现没有时钟频率输出,仔细分析发现30脚没接高电平,重新焊接后,输出漂亮的时钟脉冲。
软件的设计和调整过程
软件的设计是我毕业设计的另一个重要方面。它的好坏直接关系毕业设计的成功与否。我等软件是用汇编完成的,需要能熟练的掌握汇编语言,还要熟悉AT89C51单片机。从程序流程图、通信协议、波特率计算、编写程序、编译、和烧入软件的操作,到最后的调试,是很复杂的。下面作详细介绍:
程序流程图
程序流程图是编写软件的重要前提,它是在图表上直观的体现拟设计的目的及过程。也是编译的重要依据,按照流程图一步一步编写程序,下面是我的流程图
发射接口流程图
通信协议是发射机和接收机之间通信不可缺少的部分,包括下面几方面的设置;
包含总结汇报、党团工作、资格考试、旅游景点、考试资料、办公文档、word文档、工作范文以及专科毕业设计样板等内容。本文共7页
相关内容搜索【图文】89C51单片机的结构和原理_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
89C51单片机的结构和原理
上传于||文档简介
&&8C1​系​列​单​片​机​的​结​构​、​
​
9​C1​单​片​机​引​脚​及​其​功​能​、​
​
​C​P​U​时​序​、​
​
​复​位​及​复​位​电​路​、​输​入​/​输​出​端​口​结​构​、9​C1​存​储​器​配​置
大小:1.24MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
AT89C51单片机的特性及管脚功能
下载积分:30
内容提示:AT89C51单片机的特性及管脚功能
文档格式:PDF|
浏览次数:219|
上传日期: 21:11:26|
文档星级:
该用户还上传了这些文档
AT89C51单片机的特性及管脚功能
官方公共微信

我要回帖

更多关于 89c52单片机引脚图 的文章

 

随机推荐