单片机原理与接口Word文件下载.docx
- 文档编号:17535545
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:51
- 大小:6.81MB
单片机原理与接口Word文件下载.docx
《单片机原理与接口Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机原理与接口Word文件下载.docx(51页珍藏版)》请在冰豆网上搜索。
Voidmain()
While
(1)
Keyscan();
//检测什么键输入
Switch(AA)//AA为公共变量,在程序头要声明
Case1:
Led1=0;
//如果为1键输入1灯亮
Break;
//返回
Case2:
Led2=0;
Case3:
Led3=0;
Case4:
P1=0xff;
//灭掉所有灯,
Voidkeyscna()
if(key1==0)
{delayms(10);
If(key1==0)
While(!
key1);
AA=1;
if(key2==0)
If(key2==0)
key2);
AA=2;
if(key3==0)
If(key3==0)
key3);
AA=3;
if(key4==0)
If(key4==0)
key4);
AA=4;
如果是数码流水灯的话,如何写程序呢,这要用到定时器的中断。
二.中断源和中断控制寄存器
⒈中断源
中断源是指能发出中断请求,引起中断的装置或事件。
80C51单片机的中断源共有5个,其中2个为外部中断源,3个为内部中断源:
⑴INT0:
外部中断0,中断请求信号由P3.2输入。
⑵INT1:
外部中断1,中断请求信号由P3.3输入。
IT0=1;
//Configureinterrupt0for低电平跃变/INT0(P3.2)
EX0=1;
//EnableEX0Interrupt
EA=1;
//EnableGlobalInterruptFlag
⑶T0:
定时/计数器0溢出中断,对外部脉冲计数由P3.4输入。
⑷T1:
定时/计数器1溢出中断,对外部脉冲计数由P3.5输入。
EA=1
ET0=1
TR0=1
⑸串行中断:
包括串行接收中断RI和串行发送中断TI。
TMOD=0x20;
(方式2)
SCON=0x50;
(SM1=1REN=1)
TH1=0xFD;
TL1=TH1;
PCON=0x00;
EA=1;
(IE=90)
ES=1;
TR1=1;
(TCON=0x40)
⒉中断控制寄存器
80C51单片机中涉及中断控制的有3个方面,4个特殊功能寄存器:
①中断请求:
定时和外中断控制寄存器TCON;
串行控制寄存器SCON;
②中断允许控制寄存器IE;
③中断优先级控制寄存器IP。
⑴中断请求控制寄存器
INT0、INT1、T0、T1中断请求标志放在TCON中,串行中断请求标志放在SCON中。
TCON的结构、位名称、位地址和功能如下:
TCON
D7
D6
D5
D4
D3
D2
D1
D0
位名称
TF1
—
TF0
IE1
IT1
IE0
IT0
位地址
8FH
8EH
8DH
8CH
8BH
8AH
89H
88H
功能
T1中断标志
T0中断标志
INT1中断标志
INT1触发方式
INT0中断标志
INT0触发方式
TCON位功能:
①TF1——T1溢出中断请求标志,T1计数溢出后,TF1=1
②TF0——T0溢出中断请求标志
T0计数溢出后,TF0=1
③IE1——外中断中断请求标志
当P3.3引脚信号有效时,IE1=1
④IE0——外中断中断请求标志
当P3.2引脚信号有效时,IE0=1
⑤IT1——外中断触发方式控制位
IT1=1,边沿触发方式;
IT1=0,电平触发方式。
⑥IT0——外中断触发方式控制位
其意义和功能与IT1相似。
串行控制寄存器SCON
TI
RI
99H
98H
串行发送中断标志
串行接收中断标志
①TI——串行口发送中断请求标志
②RI——串行口接收中断请求标志
⑵中断允许控制寄存器IE
80C51对中断源的开放或关闭由中断允许控制寄存器IE控制。
IE的结构、位名称和位地址如下:
IE
EA
ES
ET1
EX1
ET0
EX0
AFH
ACH
ABH
AAH
A9H
A8H
中断源
CPU中断允许控制位
串行口中断允许控制位
T1中断允许控制位
INT1中断允许控制位
T0中断允许控制位
INT0中断允许控制位
①EA——CPU中断允许控制位
EA=1,CPU开中;
EA=0,CPU关中,且屏蔽所有5个中断源。
②EX0——外中断INT0中断允许控制位
EX0=1,INT0开中;
EX0=0,INT0关中。
③EX1——外中断INT1中断允许控制位
EX1=1,INT1开中;
EX1=0,INT1关中。
④ET0——定时/计数器T0中断允许控制位
ET0=1,T0开中;
ET0=0,T0关中。
⑤ET1——定时/计数器T1中断允许控制位
ET1=1,T1开中;
ET1=0,T1关中。
⑥ES——串行口中断(包括串发、串收)允许控制位
ES=1,串行口开中;
ES=0,串行口关中。
说明:
80C51对中断实行两级控制,总控制位是EA,每一中断源还有各自的控制位。
首先要EA=1,其次还要自身的控制位置“1”。
三.中断处理过程
中断处理过程大致可分为四步:
中断请求、中断响应、中断服务、中断返回
⒈中断请求
中断源发出中断请求信号,相应的中断请求标志位(在中断允许控制寄存器IE中)置“1”。
⒉中断响应
CPU查询(检测)到某中断标志为“1”,在满足中断响应条件下,响应中断。
⑴中断响应条件:
①该中断已经“开中”;
②CPU此时没有响应同级或更高级的中断;
③当前正处于所执行指令的最后一个机器周期;
④正在执行的指令不是RETI或者是访向IE、IP的指令,
否则必须再另外执行一条指令后才能响应。
⑵中断响应操作
CPU响应中断后,进行下列操作:
①保护断点地址;
②撤除该中断源的中断请求标志;
③关闭同级中断;
④将相应中断的入口地址送入PC;
80C51五个中断入口地址:
INT0:
0003H;
T0:
000BH;
INT1:
0013H
T1:
001BH;
串行口:
0023H
⒊执行中断服务程序
中断服务程序应包含以下几部分:
⑴保护现场
⑵执行中断服务程序主体,完成相应操作
⑶恢复现场
⒋中断返回
在中断服务程序最后,必须安排一条中断返回指令RETI,当CPU执行RETI指令后,自动完成下列操作:
⑴恢复断点地址。
⑵开放同级中断,以便允许同级中断源请求中断。
四.中断响应等待时间
若排除CPU正在响应同级或更高级的中断情况,中断响应等待时间为:
3~8个机器周期
五.中断请求的撤除
中断源发出中断请求,相应中断请求标志置“1”。
CPU响应中断后,必须清除中断请求“1”标志。
否则中断响应返回后,将再次进入该中断,引起死循环出错。
⑴对定时/计数器T0、T1中断,外中断边沿触发方式,CPU响应中断时就用硬件自动清除了相应的中断请求标志。
⑵对外中断电平触发方式,需要采取软硬结合的方法清除(CPU自动硬件清除,同时用户也要及时将外部中断引脚变成无效电平)。
⑶对串行口中断,用户应在串行中断服务程序中用软件清除TI或RI。
六.中断优先控制和中断嵌套
⒈中断优先控制
80C51中断优先控制首先根据中断优先级,此外还规定了同一中断优先级之间的中断优先权。
其从高到低的顺序为:
INT0、INT1、T0、T1、串行口。
中断优先级是可编程的,而中断优先权是固定的,不能设置,仅用于同级中断源同时请求中断时的优先次序。
80C51中断优先控制的基本原则:
①高优先级中断可以中断正在响应的低优先级中断,反之则不能。
②同优先级中断不能互相中断。
③同一中断优先级中,若有多个中断源同时请求中断,CPU将先响应优先权高的中断,后响应优先权低的中断。
⒉中断嵌套
当CPU正在执行某个中断服务程序时,如果发生更高一级的中断源请求中断,CPU可以“中断”正在执行的低优先级中断,转而响应更高一级的中断,这就是中断嵌套。
中断嵌套只能高优先级“中断”低优先级,低优先级不能“中断”高优先级,同一优先级也不能相互“中断”。
中断嵌套结构类似与调用子程序嵌套,不同的是:
①子程序嵌套是在程序中事先按排好的;
中断嵌套是随机发生的。
②子程序嵌套无次序限制,中断嵌套只允许高优先级“中断”低优先级。
七.中断系统的应用
⒈中断初始化
⑴设置堆栈指针SP
⑵定义中断优先级
⑶定义外中断触发方式
⑷开放中断
⑸安排好等待中断或中断发生前主程序应完成的操作内容。
⒉中断服务主程序
中断服务子程序内容要求:
⑴在中断服务入口地址设置一条跳转指令,转移到中断服务程序的实际入口处。
⑵根据需要保护现场。
⑶中断源请求中断服务要求的操作。
⑷恢复现场。
与保护现场相对应,注意先进后出、后进先出操作原则。
⑸中断返回,最后一条指令必须是RETI。
⒊中断系统应用举例
****C51中提供的中断服务函数的定义如下:
返回值中断ISR函数名interruptnusing[m]
其中:
n-----对应中断源的编号
m----使用指定的寄存器组(0~3)
程序举例:
#defineucharunsignedchar//定义一下方便使用
#defineuintunsignedint
#defineulongunsignedlong
reg52.h>
//包括一个52标准内核的头文件
sbitP10=P1^0;
//头文件中没有定义的IO就要自己来定义了
//用外中断方式读按键K1,点亮或者熄灭一个LED
voidmain(void)//主程序
IT0=1;
//外中断跳变产生中断
EX0=1;
//打开外部中断0
EA=1;
//打开总中断
P10=0;
while
(1);
//主程序循环
//外中断0的ISR
voidint0_ISR()interrupt0
P10=~P10;
//在中断里点亮或者熄灭LED
/*提示:
需要去抖操作,否则按键抖动会引起多种中断。
*/
二、80C51定时/计数器
定时/计数器是单片机系统一个重要的部件,其工作方式灵活、编程简单、使用方便,可用来实现定时控制、延时、频率测量、脉宽测量、信号发生、信号检测等。
此外,定时/计数器还可作为串行通信中波特率发生器。
一.定时/计数器概述
80C51单片机内部有两个定时/计数器T0和T1,其核心是计数器,基本功能是加1。
对外部事件脉冲(下降沿)计数,是计数器;
对片内机周脉冲计数,是定时器。
计数器由二个8位计数器组成。
定时时间和计数值可以编程设定,其方法是在计数器内设置一个初值,然后加1计满后溢出。
调整计数器初值,可调整从初值到计满溢出的数值,即调整了定时时间和计数值。
定时/计数器作为计数器时,外部事件脉冲必须从规定的引脚输入。
且外部脉冲的最高频率不能超过时钟频率的1/24。
【例】试用T1方式2编制程序,在P1.0引脚输出周期为400S的脉冲方波,已知
fosc=12MHZ。
解:
①计算定时初值
T1初值=2^8-200*10^(-6)*12*10^6/12=256–200=56=38H
TH1=38H;
TL1=38H
②设置TMOD:
00100000B=20H
③编制程序如下:
(1)查询方式
sbitP10=P1^0;
voidmain(void){
TMOD=0x20;
//T1function2
TH1=0x38;
TL1=0x38;
TR1=1;
//startT1
while
(1){
while(!
TF1);
//查询等待TF1置位
TF1=0;
P10=~P10;
(2)中断方式
//enableinterrupt
ET1=1;
voidTimer1_ISR(void)interrupt1using3{
3、串行通信
内容简介见PPT
波特率计算:
方式1和方式3都是可变的:
其中:
N与工作方式有关:
方式0时,N=13;
方式1时,N=16;
方式2、3时,N=8。
常用波特率通常按规范取1200、2400、4800、9600、…,若采用晶振12MHz和6MHz,则计算得出的T1定时初值将不是一个整数,产生波特率误差而影响串行通信的同步性能。
解决的方法只有调整单片机的时钟频率fosc,通常采用11.0592MHz晶振。
(1)查询法:
点对点的双机通信:
要实现甲与乙两台单片机点对点的双机通信,线路只须将甲机的TXD与乙机的RXD相连,将甲机的RXD与乙机的TXD相连,地线与地线相连。
分析过程:
甲、乙两机都选择方式1:
8位异步通信方式,最高位用作奇偶校验,波特率为1200bps,甲机发送,乙机接收,因此甲机的串口控制字为40H,乙机的串口控制字为50H。
由于选择的是方式1,波特率由定时/计数器T1的溢出率和电源控制寄存器PCON中的SMOD位决定。
则须对定时/计数器T1初始化。
设SMOD=0,甲、乙两机的振荡频率为12MHZ,由于波特率为1200。
定时/计数器T1选择为方式2,则初值为:
初值=256-fosc×
2SMOD/(12×
波特率×
32)=256-12000000/(12×
1200×
32)≈230=E6H;
根据要求定时/计数器T1的方式控制字为20H
发送程序:
#defineucharunsignedchar
ucharidatatrdata[]={'
8'
'
9'
S'
5'
1'
0x0d,0x0a,0x00};
main()
uchari;
uintj;
TMOD=0x20;
//定时器1定时方式2
TH1=0xe6;
//12MHz1200波特率
TL1=0xe6;
SCON=0x40;
//串口方式1,不允许接收REN=0;
PCON=0;
//SMOD=0
TR1=1;
//启动定时器
i=0;
while(trdata[i]!
=0x00)//00结束
SBUF=trdata[i];
while(TI==0);
TI=0;
i++;
}
for(j=0;
j<
50000;
j++);
//延时
接收方程序:
ucharidatabuf[8];
SCON=0x50;
//串口方式1,允许接收REN=1
TMOD=0x20;
while
(1)//接收一祯
{for(i=0;
i<
9;
i++)
{
while(RI==0)//当有数据时启动接收
RI=0;
buf[i]=SBUF;
//读入数据
与PC机串行调试器通讯:
#include<
//UART初始化:
模式1,8位,9600Bdsat11.059MHz
voidInitSerial()
{
SCON=0x50//uartinmode1(8bit),REN=1
TMOD=TMOD|0x20;
//Timer1inmode2
//9600Bdsat11.059MHz
TL1=0xFD;
//9600Bdsat11.059MHz
//Timer1run
unsignedchartemp;
InitSerial();
//串行口初始化
while
(1)
{while(!
RI);
//PC机发送数据
RI=0;
temp=SBUF;
//接收数据
SBUF=temp;
//发送数据
while(!
TI);
//MCU发送数据
TI=0;
}
(2)中断法
一般情况下,常采用查询法发送数据。
中断法接收程序。
下面就是一个中断法的程序:
unsignedchari,full_flag;
unsignedcharbuff[20];
//BUFF
ES=1;
voidmain(void){
i=0;
full_flag=0;
while
(1){
if(full_flag){
ES=0;
Delay(1000);
//延时1s
full_flag=0
ES=1;
voidUART_ISR(void)interrupt4{
if(RI){
buff[i]=SBUF;
if(i>
20){
full_flag=1;
由于很多多都需要这个数码管引脚图,于是今天专门用截了图,请大家记好引角的顺序
《七段数码管引脚图》
数码管使用条件:
a、段及小数点上加限流电阻
b、使用电压:
段:
根据发光颜色决定;
小数点:
根据发光颜色决定
c、使用电流:
静态:
总电流80mA(每段10mA);
动态:
平均电流4-5mA
峰值电流100mA
上面这个只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的,4位数码管引脚图请在本站搜索我也提供了数码管使用注意事项说明:
(1)数码管表面不要用手触摸,不要用手去弄引角;
(2)焊接温度:
260度;
焊接时间:
5S
(3)表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 接口
![提示](https://static.bdocx.com/images/bang_tan.gif)