单片机应用系统设计实例说课讲解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2)日常中断的例子
你正在专心看书, 突然电话铃响,于是 你记下正在看的书的 页数,去接电话,接 完电话后再回来接着 看书。
3)计算机中的中断概念
▪中断是指由于某种随机事件(甲方)
的发生,计算机(乙方)暂停现行程 序的运行,转去执行另一程序,以处 理发生的事件,处理完毕后又自动返 回原来的程序继续运行。
灯的循环闪亮控制 中断初始化
3)延时功能 4)中断服务程序设计
3.2软件设计
中断初始化
触发方式设置 中断允许控制
中断服务程序设计
中断初始化 IT0=1; EA=1; EX0=1;
中断服务程序
函数名()interrupt n [using m ] { }
Void int0(void) interrupt 0 /* 外部中断0的服务函数定义,使用第二组工
作寄存器组*/
void int0(void) interrupt 0
{
uchar a=0xfe,i=16;
P1=0x0;
delay(5000);
P1=0x0ff;
delay(5000);
P1=0x0;
delay(5000);
P1=0x0ff;
delay(5000);
do
{
P1=a;
delay(5000);
TMOD=0X01; TH0=0X3C; TL0=0XB0; EA=1; ET0=1; TR0=1;
4)编写中断服务程序
Void timer0(void) interrupt 1
{
TH0=0x3c;
Baidu Nhomakorabea
TL0=0xb0;
i++;
if(i==9)
{ i=0;
P1_0=~P1_0;
void delay(uint t); //声明函数
void main(void)
{
while(1)
{
P1_0=0;
delay(5000);
P1_0=1;
delay(5000);
}
}
void delay(uint t) //延时0.1*t毫秒
{
uint i;
do
{
for(i=0;i<10;i++)
(包含变量循环移位、位操作等函数) 需要将该函数包含进来,同时对函数
原型进行声明。
#include <INTRINS.H> uchar _crol_(uchar a,uchar n);
/*函数原型,左循环*/
uchar _cror_(uchar a,uchar n);
/*函数原型,右循环*/
;
} while(t--);
}
2、用8个LED发光二极管,设计一 个循环闪烁的流水灯。
2.1硬件设计
2.2软件设计
1)初始化
51头文件、宏定义
2)主程序,即main()程序
灯的循环闪亮控制
3)延时功能
延时子程序设计
如何进行灯的循环闪亮控制? intrins.h 内部函数库
a=_cror_(a,1);
}while(i--);
}
4、通过定时,精确控制闪烁 500ms。
针对任务一进行操作。
使用定时器T0 1)设置定时器工作方式 2)计算初始值 3)编写初始化程序 4)编写中断服务程序
1)设置定时器工作方式
TMOD GATE C/T M1 M0 GATE C/T M1 M0
▪将能引起中断的事件称为中断源。
▪CPU现行运行的程序称为主程序。
▪处理随机事件的程序称为中断服务 子程序。
4)相关的特殊功能寄存器
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
IE0/IE1:外部中断申请标志位: =0:没有外部中断申请; =1:有外部中断申请。 IT0/IT1:外部中断请求的触发方式选择位: =0:在INT0/INT1端申请中断的信号低电平有效; =1:在INT0/INT1端申请中断的信号负跳变有效.
0 00 0 0 001
2)计算初始值
晶振12Mhz 1个机器周期:Tp=12121106 1s 定时50ms,需要计数: 50103 50000
1
定时器初始值:
6 5 5 3 6 5 0 0 0 0 1 5 5 3 6 0 x 3 C B 0
定时500ms,需要中断10次。
3)编写初始化程序
}
}
5、以秒为单位,用LED数码管显示 当前计数值。
LED数码管显示电路原理
LED数码管的结构: (1)共阳 (2)共阴
公共阳极
接高电平
f
a g
b
ed c
h
h g f …… a
hgfedcba
低电平点亮
公共阴极
hgfedcba
高电平点亮
h g f …… a
f
a g
b
单片机应用系统设计实例
1、用1个LED发光二极管,设计一 个循环闪烁的指示灯。
如何设计硬件和软件?
1.1硬件设计
注意:在接下来的仿真中,省略时钟及复位电路。
1.2软件设计
1)初始化
51头文件、宏定义
2)主程序,即main()程序
灯的亮灭控制
3)延时功能
延时子程序设计
#include <at89X52.h> #define uint unsigned int #define uchar unsigned char
3、通过设置中断,改变灯的循环方 向,控制灯的亮灭。
3.1硬件设计
1)中断的概念
中断技术是计算机中一项很重要的 技术。
中断系统的功能是为了解决快速 CPU和慢速外设间的矛盾,它由软 件和硬件组成。
有了中断系统,能使计算机的功能 更强、效率更高、使用更灵活。
51单片机系统有5个中断源。
#include <INTRINS.H> uchar _crol_(uchar a,uchar n); uchar _cror_(uchar a,uchar n);
/*函数原型*/ /*函数原型,右循环*/
void main(void) {
uint a = 0xfe; while(1) {
P1=a; delay(5000); a=_crol_(a,1); } }
IE EA — ET2 ES ET1 EX1 ET0 EX0
EX0/EX1位: 分别是INT0/INT1的中断允许控制位: =0 时禁止中断; =1 时允许中断。
EA:总的中断允许控制位(总开关): =0 时禁止全部中断;=1 时允许中断。
3.2软件设计
1)初始化
51头文件、宏定义
2)主程序,即main()程序