51单片机学习笔记(二)

1. 上次课作业

让发光二极管保持闪烁,编写程序使得单片机IO口输出交替的高低电平。

#include<reg52.h>
sbit p1_1=P1^0;
unsigned int a;
void main(){
while(1) { //大循环
           a=50000
           p1_1=0;
           while(a--);//不为零一直执行语句
           a=50000;
           p1_1=1;
           while(a--);
          }
]

Keil软件中调试程序Start debug Session (黄色放大镜),进入调试模式。
调节闪烁周期需要调节时间或晶振频率(与芯片晶振频率同)的在Options for Target里面 XtalMHz():

延时为1s闪烁

#include<reg52.h>
sbit p1_1=P1^0;
unsigned int a;
void main(){
     while1{
      a=51000;
      p1_1=0;
      while(a--);
      a=51000;
      while(a--);
      p1_1=1;
      a=51000;
      while(a--);
      a=51000;
      while(a--)
    }
      
}

2. 单片机工作基本时序

(1)振荡周期,也称时钟周期,指的是为单片机提供时钟脉冲信号的振荡源的周期;
(2)状态周期,每个状态周期为时钟周期的2倍,是振荡周期经过二分频得到的;
(3)机器周期,包含6个状态周期,12个时钟周期,在一个机器周期内完成一次独立操作;
(4)指令周期,CPU完成一条操作所需全部时间。每条指令执行实践是由一个或几个机器周期组成。

3.子程序调用

#include<reg52.h>
#define  unit unsigned int //宏定义:unsigned int
#define  uchar unsigned char //要定义的写在前面
sbit D1=P1^0; //位定义
void delay();//子函数的声明,在main前。返回值,参数有也要声明
void main () {
            while(1) { 
            D1=0;
            delay();//子函数调用
            D1=1;
            delay();
         }
  }
  void delay() {
   uint x,y;
   for(x=100;x>0;x--)
   for(y=600;y>0;y--);
   {
    
  }

运行一个*delay()*函数需要500毫秒 即sec=0.5225

#include<reg52.h>
#define  unit unsigned int //宏定义:unsigned int
#define  uchar unsigned char //要定义的写在前面
sbit D1=P1^0; //位定义
//void delay();//子函数的声明,在main前。返回值,参数有也要声明
void delay(uint);//声明带参数函数,类型要写。
void main () {
            while(1) { 
            D1=0;
            delay(600);//子函数调用 (带参数)
            D1=1;
            delay(600);
         }
  }
  void delay(uint z)
  { 
  uint x,y;
  for(x=100;x>0;x--)
   for(y=z;y>0;y--);
   }

4. C51库函数的调用

直接调用库函数中的延时子程序**crol**

#include<reg52.h>
#include<intrins.h>
#define  unit unsigned int
#define  uchar unsigned char 
uchar temp;
sbit D1=P1^0; 
void delay();
void main () {
          temp=0xfe;
           P1=temp;//p1口赋值
              while(1) { 
           temp=_crol_(temp,1);//循环左移一位的函数
           delay(500);//延时
           P1=temp;
           }
 }
  void delay() {
   uint x,y;
   for(x=100;x>0;x--)
   for(y=600;y>0;y--);
   }

5.蜂鸣器

sbit beep=P2^3
void main()
beep=0;//给低电平

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值