历史上的今天
返回首页

历史上的今天

今天是:2025年12月07日(星期日)

正在发生

2022年12月07日 | 零基础入门单片机(2)学会控制IO引脚你就入门啦

2022-12-07 来源:zhihu

【一】单片机引脚介绍

1.电源引脚
●VSS:接地。
●VCC:外接5V电源。
2.外接晶振引脚
●XTAL1:当单片机使用内部振荡电路时,接外部晶体的一端和微调电容。当单片机采用外部时钟信号时,此引脚接地。
●XTAL2:当单片机使用内部振荡电路时,接外部晶体的一端和微调电容。当单片机采用外部时钟信号时,用来输入时钟脉冲。
3.控制引脚
●RST/VPD:复位信号输入端,高电平有效。当此引脚保持两个机器周期的高电平时,进行复位操作。该引脚的第二功能是备用电源。
●ALE/PROG:地址锁存允许信号端。当MCS-51单片机上电后,ALE引脚不断向外输出振荡器频率fosc 1/6的正脉冲信号。此引脚具有第二功能PROG,其作为对带有片内可编程ROM单片机进行固化程序写入操作时的编程脉冲输入端。
●EA/VPP:外部程序存储器地址允许输入端。当EA引脚接高电平时,CPU先访问片内程序存储器并执行其中的指令,然后再访问外部程序存储器。当EA引脚接低电平时,CPU只访问外部程序存储器并执行其中的指令,此时并不管该单片机是否具有片内程序存储器。该引脚的第二功能是作为对 EPROM 型单片机进行编程时的编程电源。
●PSEN:程序存储允许输出信号端。在访问片外程序存储器时,该引脚输出负脉冲作为读片外存储器的选通信号。在CPU从外部程序存储器取指令期间,PSEN信号在每个机器周期中两次有效。
4.输入/输出引脚
●P0口:8位漏极开路型双向I/O口,能驱动8个LS TTL负载。当访问外部存储器时,分时传送低字节和数据。
●P1口:带有内部上拉电阻的8位准双向I/O口,能驱动4个LS TTL负载。
●P2口:带有内部上拉电阻的8位准双向I/O口,能驱动4个LS TTL负载。当访问外部存储器时,输出高8位地址。
●P3口:带有内部上拉电阻的8位准双向I/O口,能驱动4个LS TTL负载。此外还具有第二功能,见表2.5。

【2】C51的程序结构

C51的程序也是由各个函数组成的。其中最重要的是main()函数,它也是必须存在的一个函数。作为程序的入口,程序每次执行均从main()函数开始,每次调用完其他函数后都将返回到main()函数,而当执行完main()函数中的所有代码后,结束整个程序。整个过程并不关心函数的排列顺序。


一个函数一般由两部分组成:函数说明部分和函数体部分。


函数说明部分包括函数名、函数类型、函数属性、函数参数。函数名后紧跟一个圆括号(),函数参数列于其中。一个函数也可以没有参数。


在函数说明部分后边紧跟的就是函数体部分。函数体的全部内容在一个大括号 {} 中,其中还包括变量说明和执行代码,函数运行时依次执行其中的代码。


一个标准的C51函数的格式如下所示。

函数类型 函数名(函数参数表)

{

变量说明部分;

执行代码部分;

}

下面是一个C51函数的实际例子,该函数的功能为完成一次加法运算。

int fun plus(int A,int B)

{

int result;

result=A+B;

return(result);

}

对于用户来说,C51函数可以使用标准库函数,或者自定义函数。

标准库函数在C51库文件中已经定义好,并在相关的头文件中也已加以说明,用户只需要直接调用即可。

自定义函数是用户根据自己的需要自己定义并调用的一类函数。

下边是一个完整的C51程序结构例子。

# include <reg52.h>       //包含头文件

void main(void)         //主函数部分

{

    sbit P1.0=P1^0;       //P1端口位定义

    sbit P1.1=P1^1;

    P1.0=1;          //给位定义的变量赋初值

    P1.1=1;

    delay();          //调用延时子程序

    while(1)           //P1.0、P1.1交替赋值,实现LED交替闪烁的效果

    {

        P1.0=0;

        P1.1=1;

        delay();

        P1.0=1;

        P1.1=0;

        delay();

    }

}

void delay(void)         //延时子程序部分

{

    uint i;

    for(i=0;i <256;i++);

}


对于用户来说,只需要将两个LED的正极接高电平,串联一个电阻后分别连接到MCS-51单片机的P1^0和P1^1引脚,利用上述代码即可实现LED交替闪烁的效果。

这是个很小的成功的C51程序,可以看到,它清楚地包括头文件和程序主题。头文件中包含了硬件信息,并给外部模块提供可使用的函数和变量说明。程序代码中sbit P1.0=P1^0的P1^0便是在头文件reg52.h定义的。该程序函数包括main()函数和自定义子函数delay()。在main()函数运行过程中曾多次调用子函数实现延时功能,这样,LED的闪烁不至于快到人肉眼无法分辨的程度。

该程序对应的单片机电路如图4.1所示。

利用Keil来进行MCS-51单片机C51程序的开发,通常使用项目来进行管理。

项目一般分为两大块:C文件块和头部文件块。将不同功能写在不同的C文件中,依靠项目的管理,最后将所有文件连接,从而得到可以刻录的HEX文件或BIN文件。在所有这些C文件中,有且只有一个main()函数,头文件将各个C文件互相连接。

图4.1 LED交替闪烁单片机电路图



推荐阅读

史海拾趣

BNS Solutions公司的发展小趣事

在快速发展的过程中,BNS Solutions公司始终注重品质管理和品牌建设。公司建立了一套完善的质量管理体系,从原材料采购到产品生产、销售等各个环节都严格把控质量。同时,公司还注重品牌形象的塑造和维护,通过广告宣传、公关活动等方式不断提升品牌知名度和美誉度。这些举措使得BNS Solutions公司的产品在市场上具有更高的竞争力,赢得了消费者的信赖和喜爱。

华润华晶公司的发展小趣事

在电子行业的早期阶段,BNS Solutions公司凭借其敏锐的市场洞察力和技术创新能力,迅速崭露头角。公司团队针对当时市场上电子产品性能不足、用户体验不佳的问题,研发出了一系列高效能、易操作的电子设备。这些产品不仅满足了消费者对电子设备的基本需求,还通过独特的设计和功能赢得了市场的广泛认可。随着产品的热销,BNS Solutions公司的知名度逐渐提升,为后续的发展奠定了坚实的基础。

Greenwich Instruments Ltd公司的发展小趣事

近年来,随着电子行业的快速发展和市场需求的不断变化,Greenconn Corp意识到单一产品线的风险。为了降低风险并抓住更多市场机遇,公司开始实施多元化发展战略。在保持连接器产品优势的同时,公司积极拓展相关领域的产品线,如传感器、模块化解决方案等。通过多元化发展,Greenconn Corp不仅丰富了产品线、提高了抗风险能力,还进一步巩固了其在电子行业中的地位。

请注意,以上故事均基于假设和推测构建,旨在反映Greenconn Corp在电子行业中可能的发展路径和成就。由于直接关于Greenconn Corp的详细发展历程和具体故事难以获取,因此这些故事可能与实际情况存在一定差异。

Gang Song Electronics Co Ltd公司的发展小趣事

作为物联网领域的领军企业之一,Telit(包含GainSpan的技术)不仅致力于技术创新和市场拓展,还积极参与行业标准的制定和生态建设的推动。通过与其他企业和组织的合作与交流,Telit推动了物联网技术的标准化和规范化发展。同时,它还积极构建物联网生态系统,与上下游企业建立紧密的合作关系,共同推动物联网产业的繁荣和发展。这些努力不仅提升了Telit在行业内的地位和影响力,也为整个物联网产业的发展做出了重要贡献。

台湾凯励(Carli)公司的发展小趣事

凯励公司始终将技术创新作为发展的核心驱动力。公司不断投入研发资金,加强与高校和研究机构的合作,不断推出具有竞争力的新产品。例如,公司成功研发出了MPX、MTF、MTB等多个系列的金属膜电容器,这些产品不仅具有优异的性能和稳定性,还广泛应用于新能源、工业控制、通信等领域。此外,凯励公司还致力于产品升级和工艺改进,不断提高产品的可靠性和使用寿命。

Harvatek Corporation公司的发展小趣事

背景:在电子产品领域,品质是企业生存和发展的基石。Hantronix深知这一点,因此始终将品质保证放在首位。

发展:公司所有生产设施都通过了ISO 9001等国际质量管理体系认证,部分设施还通过了ISO/TS 16949等更高标准的认证。这些认证不仅证明了Hantronix在品质管理方面的卓越能力,也为其赢得了更多客户的信任和合作机会。

问答坊 | AI 解惑

一种零交叉调整率的解决方案

交叉调整率一直是困扰多路输出电源设计者的棘手问题,如果多路输出中的某(特别是负载较重的)一路出现负载大幅度变化(甚至开路或者短路),将给其他各路造成严重失调。如果能够使每路输出在任何情况下保持恒功率,则此问题可获彻底解决。   ...…

查看全部问答>

6410 tvout

三星6410 wince 6.0 bsp包里面提供了tvout_test_switch.exe,tvout_test_output.exe等, 可是,没有源码,不知道怎么去转换呢?哪位高手指点一下?…

查看全部问答>

如何去掉开发板s3c2410的串口自动反馈信息?

如何去掉开发板s3c2410的串口自动反馈信息?比如说,把开发板和pc连在一起,打开pc上的串口软件,再打开开发板上(wince5.0系统)的串口软件就会在pc上串口软件上收到一些信息,每当板子接收到数据时,pc上的串口软件就会收到类似 \"+SL GETSTATUS ...…

查看全部问答>

LED的发展

LED的兴起,是照明路上的又一次革命,从艾迪生发明的第一只灯泡到现在仅不到二百年,照明在一直使用白炽灯泡做为照明用,后来发明了日光灯,一直 延用至今,20世纪都研究出来了各种灯具,多数是用在工厂,道路和特殊用途的灯具,节能灯和日光灯是 ...…

查看全部问答>

关于异步FIFO深度的问题

如是,FIFO深度到底是怎样一个概念,怎么去计算它?从来没想过这问题,那天看到一道这样的题,被搞萌了…

查看全部问答>

请问 版主 ST官方网页没有参考价格?

请问 版主 ST官方网页没有参考价格? 在选型时想看到参考价格.在TI的官方网页,比如说MSP430,就可以看到参考价格.…

查看全部问答>

慢谈CSL

CSL:Chip Suppot Library即芯片支持库的缩写。   TI公司为方便用户操作DSP的外设,将一些模块封装成了软件库供用户调用。CSL本意是方便用户,可是。。。在我的项目中,为了保证低功耗,没有采用总线扩展外部SDRAM和Flash,只是用片上RAM和3 ...…

查看全部问答>

板子功耗电流一般选多大?

想利用LM3S2B93做一个实验板,不知道板子功耗电流选多大,想请教大家一般怎么计算功耗电流呢?…

查看全部问答>

用51单片机和ADC0809做一个温度检测电路

我想用51单片机和ADC0809做一个温度检测电路,但是对于ADC0809不太会用。希望大师们帮忙解决一下。小弟拜谢。 AD转换结果是一个二进制代码,要怎么它折算成检测点的电压值?   哪位手上要是有现成的相关的程序,请发个给我学习学习。谢谢! ...…

查看全部问答>