51单片机--

89C51中断响应条件

  1. 中断源有中断请求
  2. 此中断源的中断允许位为1
  3. CPU开启中断(即EA=1
    满足以上条件时中断服务程序才可以被响应。

中断处理过程

我基于自已的理解写一下吧。
定时器方式1的中断常用来计时或计数(我目前只用到了计时)。它的中断处理过程是靠那些特殊的寄存器来实现的,用代码来讲一下中断的流程。

void init()
{
 TMOD=0x01;//设置定时器的工作方式
 TH0=(65536-50000)/256;//对定时器进行装初值
 TL0=(65536-50000)%256;
 EA=1;//CPU总中断打开
 ET0=1;//定时器中断允许位打开
 TR0=0;//定时器运行控制位
}

再用定时器的方式0时,先要对其要用的寄存器进行初始化。此时的定时器还没有打开,主函数中需要在打开定时器的时候写上**TR0=1;**以打开定时器。之后在定时器没有装满值前,主函数依然在运行,直至定时器溢出TF0置1,向CPU发出中断申请,这时主程序才停下来,然后去执行中断服务程序中的代码。只要TR0=1,中断就一直进行,也就是程序在每次执行时都会进入中断服务程序。

void time() interrupt 1
{
 TH0=(65536-40000)/256;
 TL0=(65536-40000)%256;
 num++;
 if(num==20)
 {
  num=0;
  ge++;
 }
}

1602液晶显示屏

液晶通常是按照显示字符的行数或液晶点阵的行,列数来命名的。1602的意思是一行显示16个字符,共可以显示两行。这类液晶只能显示ASCII码字符,如数字,大小写字母,各种符号等。
1602液晶显示屏有8个数据口,可以连在单片机的一个大端口(8个IO口)上。还有三个特殊的口用于控制显示屏。

RS

数据/命令选择端(H/L),它控制着显示屏时进行数据操作还是进行命令操作。当RS=1时,对LCD进行数据操作;当RS=0时,对LCD进行指令操作。

RW

读写选择端(H/L),它控制着对LCD的读和写,当RW=1时,对液晶进行读操作;当RW=0时,对液晶进行写操作。但是我们一般都是对LCD进行写操作,所以一般RW=0。

E

使能信号端,给它一次高脉冲标志着对它的操作,在写程序的时候先将要输入的数据或命令的值赋给LCD的8个数据口,然后给E一次高脉冲。
在进行设置时必须先设置RS,然后设置RW,最后设置E

RAM地址映射区

控制器内部带有80B的RAM缓冲区,向00至0F,40至4F地址的任意处写入数据时,液晶都可以立即显示出来。前16个地址对应液晶的第一行的16显示字符的位置,后16个对应第二行的16的位置。
当写到其他地址上时,必须通过移屏指令将其移到可显示区域方可正常显示。
这是我写的1602显示模式设置,显示开/关及光标设置

void write_com(uchar com)
{
 rs=0;    //设置对LCD进行写指令操作
 rw=0;    //设置对LCD进行写数据操作
 P0=com;  //将数据或命令送到数据线上
 e=1;     //给E一个高脉冲,将数据传到液晶显示器
 delayms(2);
 e=0;
}
void write_date(uint date)
{
 rs=1;    //同上
 rw=0;
 P0=date;
 e=1;
 delayms(2);
 e=0;
}
void lcdinit()
{
 e=0;            //先将E置0,以便后面给E一个高脉冲
 write_com(0x38);//显示模式设置
 write_com(0x0c);//开显示,不显示光标
 write_com(0x06);//当读或写一个字符后地址指针加1,且光标加1,当写一个字符时,整屏显示不移动
 write_com(0x01);//回车清屏
}

本来想把我的全部函数放上来的,但是好像放不上来着么多,好无奈啊。
这是我第一次写博客,可能写的条理不是很清晰。但我写了好多自己理解后总结的东西,希望对读者有帮助。写的要是有什么问题欢迎大家提出来,以便我改正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值