51单片快速入门教程——51核心开发板(STC89C52RC)3

第七章 外部中断

1.中断概念:

形象化理解:

2.系统框架:

触发方式的了解:

一般中断标志位置1为有中断请求,置0无。

中断允许控制位置1允许中断,置0无。

中断优先级:当出现多个时,优先级越高先执行。

PX0H

PX0

中断优先级

0

0

最低(优先级0

0

1

较低(优先级1

1

0

较高(优先级2

1

1

最高(优先级3

同一个优先级的话则取决于相关中断号:

中断号

中断源

查询次序

0

外部中断0

1

定时器/计数器0

2

外部中断1

3

定时器/计数器1

4

串口中断

5

定时器/计数器2

6

外部中断2

7

外部中断3

用中断执行LED灯亮灭,按KEY1,KEY2键实现。理由:中断设置对应的按键开关

从代码也可以看出,中断的使用,减少了CPU的占用。

#include <STC89C5xRC.H>
sbit LED1=P2^4;
sbit LED2=P2^5;
void InitInterrupt()
{
  IT0=1;//触发方式
  EX0=1;//打开中断允许
  IT1=1;
  EX1=1;
  EA=1;//总中断
}


void main()
{
  InitInterrupt();
  while(1)
  {
    
  }
}
void External0_Handler() interrupt 0
{
  LED1=~LED1;
 }

void External1_Handler() interrupt 2
{
  LED2=~LED2;
}

第八章 定时器/计数器

了解单片机上的时钟周期,就是晶振周期。该开发板为12MHZ默认12T

了解工作原理:

工作模式有4种:一般都采用可自动重装载的8位定时器/计数器

定时器也有对应的中断模式,这里不详细展示。

采用一种简便获取定时器初始化的方法:

插上单片机的前提下打开STC-ISP,然后找到定时器计算选项即可,选择你所需的参数机型设置调整。

利用定时器控制LED亮灭状态。采用中断系统,代替先前的Delay函数,节省CPU资源。

#include <STC89C5xRC.H>
 
sbit LED=P2^4;

void InitInterrupt()
{
  ET0=1;//打开定时器中断
  EA=1;//打开总中断允许
  
}
  
void Timer0Init(void)		//100微秒@12.000MHz
{
	AUXR |= 0x80;		//定时器时钟1T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0x50;		//设置定时初始值
	TH0 = 0xFB;		//设置定时初始值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
}

 void main()
{
  InitInterrupt();
  Timer0Init();
  while(1)
  {}
}
 
void Timer0_Handler() interrupt 1
{
   static unsigned int iCounter=0;
  TL0 = 0x50;		//设置定时初始值
	TH0 = 0xFB;	
  
  iCounter++;
  if(iCounter>=1000)
  {
    iCounter=0;
    LED=~LED;
  }
  
}

第九章 PWM与呼吸灯

了解PWM:

PWM(Pulse Width Modulation,脉冲宽度调制)是按照一定规律改变脉冲宽度,以获得所需波形的调制方法,被广泛应用在测量、功率控制等诸多领域中。

因为这里涉及延时,所以可采用延时函数或者定时器。

这里涉及一个知识点就是模块化编程

就是在一个工程中,我可以采取先前写过的程序进行引用。

可以到b站搜索模块化编程,进一步了解。有助于节省开发时间。

下面代码是呼吸灯。

#include <STC89C5xRC.H>
#include "timer.h"

sbit LED1=P2^4;

void main()
{
  InitInterrupt();
  Timer0Init();
  while(1)
  {   
  }
}
void Timer0_Handler() interrupt 1
{
  
   static unsigned int icnt1=0;//控制周期
  static unsigned int icnt2=0;//控制呼吸快慢
  static unsigned int duty=100;//定义占空比
  static unsigned char iflag=0;
 
  icnt1++;
  if(icnt1>=100)
  {
    icnt1=0;
  }
  icnt2++;
  if(icnt2>=200)
  { 
      icnt2=0;
      if(duty>=100&&iflag==1)
    {
      iflag=0;
    }
    else if(duty==0&&iflag==0)
    {
      iflag=1;
    }
    if(iflag==0)
    {
      duty--;
    }
    else if(iflag==1)
    {
      duty++;
    }
   }
  
  if(icnt1<=duty)
  {
    LED1=1;
  }
  else
  {
    LED1=0;
   }
}

第十章 串口通信

了解通信协议:

传输方式:并行通信与串行通信

工作模式:

该单片机的串口相关知识:

CH340芯片可以实现USB通信协议和标准UART串行通信协议的转换。电阻R33的作用:防止电源开关断了后有电流从该引脚流入后级电路。还有R32一起起到阻抗匹配作用,减少信号干扰。

该串口也是用中断系统使用。中断相关知识不记。涉及中断系统的,都需要有中断初始化。

该串口工作模式:

涉及程序代码时候需要初始化;根据需求在STC-ISP配置串口初始化。根据需求设置。

实现功能:按下key1键,串口输出Hello world

#include <STC89C5xRC.H>
void UartInit(void)		//4800bps@12.000MHz,串口初始化
{
	PCON |= 0x80;		//使能波特率倍速位SMOD
	SCON = 0x50;		//8位数据,可变波特率
	AUXR &= 0xBF;		//定时器时钟12T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xF3;		//设置定时初始值
	TH1 = 0xF3;		//设置定时重载值
	ET1 = 0;		//禁止定时器%d中断
	TR1 = 1;		//定时器1开始计时
}

sbit LED=P2^4;
sbit KEY=P3^2;

void InitInterrupt()//中断初始化
{
  ES=1;
  EA=1;
}
void main()
{
  InitInterrupt();
  UartInit();
  while(1)
  {}
}
void Delay60ms()		//@11.0592MHz,按键延时,可以将时间设置大点。
{
	unsigned char i, j;

	i = 108;
	j = 145;
	do
	{
		while (--j);
	} while (--i);
}


void UART_Handler() interrupt 4 //串口中断系统
{
  static unsigned char arrBuffer[1];
  static  unsigned char arrString[]="Hello world!";
  static  unsigned char i;
  static unsigned char s_iCounter=0;



  if(KEY==0)
    
  {
    Delay60ms();
    
    
    for(i=0;i<=12;i++)
      {
        SBUF=arrString[i];
          while(!TI)                        //等待发送数据完成
        {
          
        }
        TI = 0;
      }
  }
}

介绍完毕!后续待更!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值