C51单片机学习手记之1:一盏闪烁
闲言碎语不要讲,下面我就来说说这迈出的第一步,我从2010年才接触到单片机,想想比别人晚了10多年,不过没关系,只要有心学习,从0-1很难,但从1到100、1000、...可能就没有那么麻烦了。主要要自学单片机原理、电子线路、汇编语言,C语言,如果你刚好学过,那就恭喜啦。
本文旨在介绍单片机入门的基础知识,为和我一样的新手提供一个交流的平台。仿真所使用单片机为ATMEL公司的AT89C52,软件为PROTEUS和KEIL;只提供原理图和KEIL环境下的注释,希望对广大即将接触单片机的人有所帮助,如果有错误欢迎回帖指出与本人交流或QQ联系(93542746),共同进步。
一盏闪烁的LED
本人用Proteus画得原理图如下所示,该电路较简单,在P1.7上接一个发光二极管,为防止电流过大烧坏二极管(LED的Imax=10mA),因此接了一个限流电阻。单片机31引脚(EA/Vpp)要接高电平,因为单片机访问的是下载到单片机内部的程序。
原理图:
汇编程序:
org 000h
ajmp main
org 003h
main: mov P1,#07fh;7fh的二进制数为01111111,P1.7输出低电平
acall del;调用延时子程序
mov p1,#0ffh;ffh的二进制数为11111111,P1.7输出高电平
acall del
ajmp main
del: mov r5,#04h
del1: mov r6,#0ffh
del2: mov r7,#0ffh
del3: djnz r7,del3;r7中内容减1后判断,为0,向下执行;不为0,执行本身
djnz r6,del2
djnz r5,del1;共做04h*ffh*ffh次减1,即4*256*256次
ret
end
C程序:
#include reg52.h> //通用89C52头文件
/*************************************************************
* IO定义 *
/*************************************************************/
sbit LED = P1 ^ 7;//定义P1.7为LED控制口,低电平LED亮
/*************************************************************
* 毫秒级延时函数 *
调用函数必须给延时函数一个0~65535的延时值对应0MS到65535MS
备 注:应用于1T单片机时i600,应用于12T单片机时i125
/*************************************************************/
void Delay (unsigned int a){//需要输入变量值0~65535
unsigned int i;
while( --a != 0){//i 从0加到125,CPU大概就耗时1毫秒
for(i = 0; i 125; i++);//空指令循环
}
}
/*************************************************************
* 主函数 *
/*************************************************************/
void main (void){
while(1){//无限循环以下程序
LED = ~LED;//取LED相反状态
Delay(150);//延时150ms
}//(0~65535之间)
}
- 基于单片机的智能计步器设计(09-20)
- C51单片机微调SH-20504程序(12-02)
- C51单片机运用定时器T0中断实现电子时钟(12-02)
- T6963C的51单片机驱动程序(12-02)
- 89C51单片机I/O口模拟串行通信的实现方法(11-30)
- 基于stc51单片机的光立方c语言源代码(11-30)