在汇编语言中,让某个端口输出高电平或低电平都有专用的语句,以P1.0端口为例:
让该端口输出高电平的语句是:
SETB P1.0
让该端口输出低电平的语句是:
CLR P1.0
好了,现在我们将小灯接在单片机的P1.0端口上,如下图所示:
由上图可知,当端口P1.0输出高电平时,小灯D不亮,因为小灯中不会有电流通过;当端口P1.0输出低电平时,小灯就亮,因为此时小灯中有电流通过。
要让小灯亮一会儿、灭一会儿,还必须要有一个延时的程序,下面就是让小灯亮一会儿、灭一会儿,交替闪烁的程序:
MAIN:;程序开始
SETB P1.0;让P1.0输出高电平
LCALL DELAY;这一行是调用延时子程序
;目的是让P1.0保持高电平
;多停留一段时间
CLR P1.0;让P1.0输出低电平
LCALL DELAY;这一行也是调用延时子程序
;和刚才一样,让P1.0保持低
;电平停留一段时间,其实就
;是让它多亮一会儿再熄灭
LJMP MAIN;跳转到MAIN处执行(循环)
;以下是延时子程序,有关该延时程序的内容以后再学
DELAY: MOV R7,#250
D1: MOV R6,#250
D2: DJNZ R6,D2
DJNZ R7,D1
RET
END
在以上汇编程序中,延时子程序每一行的具体含义先不管他,以后慢慢学到,上面的程序需要在一个名为“Keil uVision2”的软件中汇编完成,汇编后得到一个*.hex文件,这就是目标文件,然后用编程器将该文件“写”到单片机89s51中,这样该89s51就具有自动控制小灯闪烁的功能了。
在实验的时候,通常用发光二极管LED代替小灯,由于LED工作电压小,由此LED要串接一个小电阻,用220欧姆——1k之间的都行,我用的是510欧姆的。
这样还不够,单片机工作还需要两个条件,一是需要加上一定的工作电压,AT89S51工作电压为5V,第20脚接负极,第40脚接正极;另外还要给单片机安装一个心脏起搏器,就是振荡器,通常叫做时钟,只要在18脚和19脚之间接一个石英晶体就行了,我用的是12MHz的,另外为了保证振荡器稳定工作,还要在18脚、19脚分别接一个27PF的小电容到地(就是接到负极),此外,89s51的第9脚为复位端,要接一个10uF电容到正极,再接一个10K电阻到负极,最后,第31脚也要和电源的正极接起来,关于31脚,以后再说,这样一台由单片机控制的会自动闪烁的小灯就做好了。下面是完整的电路图:
没有使用的管脚空着就行了,什么也不用接。一通上电,小灯就开始不停的闪烁了。大约1秒钟闪烁3——4次。
关键字:单片机程序 高电平
引用地址:
告诉你怎么编写一个最简单的单片机程序
推荐阅读最新更新时间:2024-10-30 19:50
单片机按键与数码管试验程序 Proteus仿真
最近温习一下单片机,通过proteus 7.8仿真了一下,感觉效果不错。 单片机程序如下: /* 51单片机 按键与数码管实验,用proteus 7.8仿真通过。 通过点按键, K1:数码管数字加一,0~F,加上F后再从0开始。 K2:数码管数字减一,F~0,减到0后再从F开始减 K3:复位这零. */ #include reg52.h //#include stdio.h unsigned char RunMode; unsigned char code SegCode = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, //共阳 0x80,0x90
[单片机]
状态机简介及其思路在单片机程序设计中的应用
状态机的概念 状态机是软件编程中的一个重要概念。比这个概念更重要的是对它的灵活应用。在一个思路清晰而且高效的程序中,必然有状态机的身影浮现。 比如说一个按键命令解析程序,就可以被看做状态机:本来在A状态下,触发一个按键后切换到了B状态;再触发另一个键后切换到C状态,或者返回到A状态。这就是最简单的按键状态机例子。实际的按键解析程序会比这更复杂些,但这不影响我们对状态机的认识。 进一步看,击键动作本身也可以看做一个状态机。一个细小的击键动作包含了:释放、抖动、闭合、抖动和重新释放等状态。 同样,一个串行通信的时序(不管它是遵循何种协议,标准串口也好、I2C也好;也不管它是有线的、还是红外的、无线的)也都可以看做由一系列有
[单片机]
单片机经典实验实例精华详解(附源程序)(一)
自学单片机心得体会 无论是作为一名业余的电子爱好者还是一名电子行业的相关从业人员,掌握单片机技术无疑可以使您如虎添翼,为您的电子小制作或者开发设计电子产品时打开方便的大门! 而且现在学习单片机技术的热潮正在不断升温,电子发烧友网开设了详细的单片机学习专栏和人气非常旺的论坛讨论组,对于想学习单片机的朋友来说帮助很大,可以说现在的单片机学习环境是最好的,经过一段时间的努力,采用单片机来开发设计电子产品已经不再是专业电子工程师的“专利”!作为一个普通的电子爱好者完全可以通过一番努力后熟练掌握!国外的电子爱好者采用单片机来设计小制作非常普及,一些智能机器人、智能自动装置内部都离不开单片机的身影~~~ 学习单片
[模拟电子]
51单片机 SPI nRF24L01 无线简单程序 1
main.c 1 #include reg51.h 2 #include api.h 3 4 #define uchar unsigned char 5 6 /***************************************************/ 7 #define TX_ADR_WIDTH 5 // 5字节宽度的发送/接收地址 8 #define TX_PLOAD_WIDTH 4 // 数据通道有效数据宽度 9 #define LED P2 10 11 uchar code TX_ADDRESS = {0x34,0x43,0x10,0x10,0x01}; // 定义一个静态发送地址 12
[单片机]
SLE4442卡_IC的51单片机驱动程序
整理了最初的实验草稿版,将端口宏定义,函数声明以及常用的函数声明建立头文件,感觉清楚多了,在不断地修改中凝练,在不停的实践中提高,满眼的思绪,在小小的Readme中划过一笔~~~~~~~~ char data_RST , ErrorCount ; void IC_RST(void) { uchar value,i,count; DATA_IN; //IC输入 RST_LOW; //复位时序 CLK_LOW; DATA_HIGH; DelayUs(5); RST_HIGH; DelayUs(5); CLK_HIGH; DelayUs(5); CLK_LOW; DelayUs(5); RST_LOW; DelayUs(2); for(
[单片机]
单片机+直流电机转速控制程序+Proteus仿真电路
·1.本设计采用STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机作为主控制器 ·2.采用霍尔传感器非接触式测电机转速 ·3.LCD1602液晶显示当前的转速,转速单位为转/分(RPM)。和显示当前的pwm占空比0~100%。 ·4.电机的速度可以通过按键调整,也可以开始暂停,正转和反转。 注意:磁铁和霍尔元件最近距离在2mm左右,太近可能会在电机转动时碰到霍尔元件,太远霍尔元件可能会检测不到磁铁。 使用说明: 液晶屏第一行显示电机转速,第二行显示占空比,占空比数值越大,电机转速越快。 系统一共有6个按键,单片机附近的独立按键是系统的复位按键,按下单片机会复位。 下面一排是控制按键
[单片机]
ARM单片机(学习ing)—我的第一个ARM7单片机程序
真不容易,总算是完成了我的第一个ARM7单片机的程序,虽然很简单,但是我也是花费了好长时间的,从IAR for ARM这个软件的学习,其中遇到的最严重的问题就是头文件问题,哎~~整了半天,后来在它们提供的例子中这才恍然大悟,我列个去,还得加上路径~~差点崩溃~~,然后就是在网上乱搜,各种找教程啊~~~ ,哎,晕了,还以为什么必须要main.c文件呢,狗屁,小弟果断不用,也可以仿真~~~在学习IAR for ARM这个软件的时候最不会的当然就是启动文件不明白了~~至今还是一头雾水呢,真的不会编写那个(貌似只有高手才懂得~ ,我就果断不看了,谁然我是个菜鸟),不过暂时还是不要太着急,慢慢来吧,就先凑合着用软件自带的启动文件喽 ~~ 然
[单片机]
四点二次插值的单片机汇编程序实现
在微机化的仪器仪表控制软件中,特别是快速控制软件中,或因直接计算过于复杂,或因只有经验数据没有理论公式,常采用查表插值法计算某些数据。
一般适合于插值法的函数是光滑性较好的函数。所谓“光滑性较好”是指以下两个方面:
◆连续且尽量高阶地可导:
◆其泰勒展开式中高次项的绝对值较小。
采用多项式插值时,若提高多项式次数,除了增加计算量(在高速实时控制的程序中,计算速度是很重要的问题)外,从数学上看还有若干缺点,故实际应用中一般不用太高的次数。抛物线插值(三点二次插值)是常用的一种。
提高精度的另一途径是增加节点密度。对于三点二次插值,节点密度若能提高二倍,则截断误差大约可以缩小到原来的1/8。但是这样一来数据表的容量也
[应用]