ImageVerifierCode 换一换
格式:PDF , 页数:19 ,大小:219.58KB ,
资源ID:1478823      下载积分:3 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/1478823.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     索取发票    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(中断知识点整理.pdf)为本站上传会员【w****g】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

中断知识点整理.pdf

1、一:中断的分类。1.INT0外部中断 0,由 P3.2 口引入 interrupt 02.INT1外部中断 1,由 P3.3 口引入interrupt 23.T0定时器/计数器 0 中断,由 T0 计数器计满回零引起。interrupt 14.T1定时器/计数器 1 中断,由 T1 计数器计满回零引起。interrupt 35.T2定时器/计数器 2 中断,由 T2 计数器计满回零引起。(52 单片机特有)6.TI/RI 串行口中断,串行端口完成一帧字符发送接收后引起。interrupt 4二:关于中断的使用。接下来将练习外部中断 0 (包括电平触发和跳变沿触发)T0 定时器中断 (包括方式一

2、和方式二)这两种中断的使用。三:总论。1.要想使用中断,只要经过设置中断方式开启中断就可以了。其实就是对几个特殊功能寄存器的设置。第一步:设置工作方式寄存器 TMOD(对于定时器中断来说的,外部中断不需要)第二步:设置控制寄存器 TCON第三步:设置中断允许寄存器,开启相应的中断。四:相关寄存器介绍。1 定时器/计数器工作方式寄存器 TMOD。TMOD 共有 8 位,其高四位用来设置定时器 1,低四位用来设置定时器 0.1.GATE 门控制位 GATE=0 定时器/计数器的启动仅受 TCON 寄存器中 TRX 来控制 ,受和外部中断引脚电平状态共同控制2.C/T 定时器和计数器模式选择位。=0

3、 时定时器,=1 计数器。3.M1 M0 工作方式选择位。M1M0 0 0 13 位定时器/计数器 0 1 16 位定时器/计数器 方式一10 8 位初值自动重装的定时器/计数器 二综上:使用定时器 T0 工作方式 1 时设置为 TMOD=0 x01 使用定时器 T0 工作方式 2 时设置为 TMOD=0 x022.定时器/计数器控制寄存器 TCON低四位用于外部中断;高四位用于定时器低四位用于外部中断;高四位用于定时器/计数器计数器(1)关于外部中断 0IE0:外部中断 0 中断请求标志位。IT0:外部中断 0 触发方式控制位。当 IT0=0 时,为电平触发方式。(默认为 0,因此使用外部中

4、断就开 EA,开EX0)当 IT0=1 时,为跳变沿触发方式(下降沿有效)。【当第一个机器周期采样到 INT0为低电平时,IE0 置 1。IE0=1,表示外部中断 0 正在向 CPU 申请中断。当 cpu 相应中断,转向中断服务时,IE0 由硬件清 0.】(仔细研究下这玩意,尝试查询法)IE1 与 IT1 外部中断 1,与此用法相同。TF0:定时/计数器 T0 溢出中断请求标志位。【当定时器 0 计满溢出时,由硬件使 TF0置 1,并且申请进入中断,进入中断服务程序后,此位由硬件自动清零。需要注意的是,如果使用定时器的中断,那么该位完全不用人为去操作。但是如果使用软件查询方式的话,当查询到该位

5、置 1 后,需由软件清 0】TR0:定时器 0 运行控制位。TR0=1;启动定时器 0,软件清 0 关闭定时器 0 TR1,TF1 是关于定时器 1 的,具体用法与定时器 0 同。以上便是对定时器的设置。接下来设置中断允许寄存器。EA,全局中断允许(总允许)位。全局中断允许(总允许)位。EX0,外部中断,外部中断 0 允许位,允许位,EX0=1;开中断。;开中断。=0;关中断。;关中断。EX1 外部中断外部中断 1 允许位;允许位;ET0,定时,定时/计数器计数器 T0 中断允许位;中断允许位;ET1,定时,定时/计数器计数器 T1ES,串行口中断允许位;,串行口中断允许位;IE 是中断允许寄

6、存器,其值为 82 时,二进制为 1000 0010,IE.7 位为 1 表示 CPU 开放中断,IE.1 位也为 1,表示允许定时器 T0 溢出中断综上所述,便完成了对各种中断的设置和开启关闭。再加上一个中断子函数就 OK 了。备注:外部中断 0 interrupt 0 定时器中断 0 interrupt 1 外部中断 1 interrupt 2 定时器中断 1 interrupt 3 串口中断 interrupt 4接下来是实战:接下来是实战:1.首先是外部中断首先是外部中断 0(电平触发方式)(电平触发方式)#include#define uchar unsigned charsbit

7、d=P10;uchar i;void main()/首先 TMOD 不是关于外部中断的,不需设置EA=1;/然后是 TCON 寄存器,TR0 默认 0,也不许设置EX0=1;/所以只需开总中断,开外部中断就可以了。while(1);void ser()interrupt 0EX0=0;/进入后就关闭中断,防止中断程序还未执行完毕就在此进入中断i+;/实际测试时最好加个延时,防止持续的低电平使单片机持续进入中断if(i=1)/类似于按键消抖d=0;if(i=2)d=1;EX0=1;2.然后是外部中断然后是外部中断 0(跳变沿触发方式)(跳变沿触发方式)#include#define uint u

8、nsigned intsbit beep=P23;sbit t=P32;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void main()t=0;IT0=1;/设置 TCON,设为跳变沿触发EA=1;EX0=1;while(1)t=1;delay(5);t=0;void ser()interrupt 0beep=0;delay(1000);beep=1;delay(1000);3.定时器定时器 0 中断(方式中断(方式 1):):步骤还是以上说的那样,先设步骤还是以上说的那样,先设 TMOD,再赋初值,再设,再赋初值,再设

9、 TCON,然后启动总中断,开,然后启动总中断,开TR0.但关于赋初值:但关于赋初值:1.由计数产生中断,计满溢出便会进入中断。不赋初值,默认为 0,计 65536 个数,即耗费 65536us.2.若晶振为 12MHZ,要计多长时间,就用(65536-t)这就是初值,在此基础上计时。11.0592MHZ 时,(65536-45872)/256;(65536-45872)%256;便是计时 50 毫秒。3.需要计数的个数需要计数的个数 N=需要计数的时间需要计数的时间 t/机器周期机器周期 T 12 个时钟周期为个时钟周期为 1 个机器周个机器周期。期。时钟周期便是频率的倒数。时钟周期便是频率

10、的倒数。#includeunsigned char i;void main()TMOD=0 x01;/设定为 定时器 0 工作方式是 1TH0=(65536-45872)/256;TL0=(65536-45872)%256;/50 毫秒进入一次中断TR0=1;/设置 TCONEA=1;ET0=1;/开定时器 0 中断while(1)if(i=20)P1=0 x00;if(i=40)i=0;P1=0 xff;void ser()interrupt 1i+;扩展:扩展:1.定时器、计数器定时器、计数器 0 方式方式 0 的应用:的应用:通过设置 M1M0 位为 00 选择定时器方式 0,计数位数是

11、 13 位的,由 TL0 的低五位和 TH0的 8 位组成,最多能装 8192 个数。若晶振为 11.0592MHZ,则机器周期为 12*(1/11.0592)=1.0851us.若计时 t=5ms,则需要计数 N=5000/1.0851=4607。则初值为 TH0=(8192-4607)/32;TL0=(8192-4607)%32;计数时只使用了 TL0 的低五位,所以最多计 32 个数就会进 1.示例程序:#includesbit d=P10;unsigned char i;void main()TMOD=0 x00;TH0=(8192-4607)/32;/计时 5msTL0=(8192-

12、4607)%32;EA=1;ET0=1;TR0=1;while(1)if(i=200)i=0;d=d;void ser()interrupt 1TH0=(8192-4607)/32;/计时 5msTL0=(8192-4607)%32;i+;2.定时器定时器 0 中断(方式中断(方式 2):自动重装):自动重装TMOD 设置为设置为 0 x02 即可。即可。(TMOD=0000 0010 转化为转化为 16 进制为进制为 0 x20)但方式)但方式 2 是是 8 位的,位的,计时的时间比较短。计时的时间比较短。方式 2 适合做比较精确地脉冲信号发生器(晶振为 12M 这样才不会有误差)8 位自动

13、重装计数器,最多计 256 个数。机器周期仍为 1.0851us(12M 便是 1us),若每次计250 个数,耗时 1.0851*250=271.275us,要计 1s 的话,需要溢出 1000 000/271.275us=3686次。初值为 6。/*方式 2 适合做比较精确地脉冲信号发生器(晶振为 12M 这样才不会有误差)8 位自动重装计数器,最多计 256 个数。机器周期仍为 1.0851us(12M 便是 1us),若每次计 250 个数,耗时 1.0851*250=271.275us,要计 1s 的话,需要溢出 1000 000/271.275us=3686 次。初值为 6。同理,

14、12M 晶振,250 次,即为 250us,溢出 4000 次即为 1s*/#includesbit d=P10;unsigned int n;/不能用 uchar 了哦void main()TMOD=0 x02;/定时器 0 方式 2TH0=6;TL0=6;EA=1;ET0=1;TR0=1;while(1)if(n=3686)/计时 1s 需溢出 3686 次n=0;d=!d;void ser()interrupt 1n+;/不需要赋初值哦3.定时器定时器 0(方式(方式 3)的应用)的应用 (方式(方式 3 只适用于只适用于 T0)(1).M1M0 设置为 1 1 即为方式 3.(2)方式

15、 3 被分为两个独立的计数器,TL0 为正常的 8 为计数器,计数器溢出后置位TF0,并向 CPU 申请中断,之后手动重装初值。TH0 也被固定为一个位计数器,但它将占用 T1 的中断请求标志 TF1 和定时器启动控制位 TR1。(3).因为方式 3 占用了 T1 的中断,所以使用方式 3 就不能使用 T1 的中断。但 T1 仍然可以正常工作在方式 0,1,2 下。通常这种情况下 T1 被用来当做串行口的波特率发生器。示例程序:#includesbit d1=P10;sbit d2=P11;unsigned int n1,n2;void main()TMOD=0 x03;/定时器 0 方式 3

16、TH0=6;TL0=6;EA=1;ET0=1;ET1=1;/TH0 占用 T1 的中断,所以也要打开TR0=1;TR1=1;/while(1)if(n1=3686)/必须是=n1=0;d1=d1;if(n2=1843)/定时半秒n2=0;d2=d2;void ser_TL0()interrupt 1 /不能仅用 TL0 做函数名TL0=6;n1+;void ser_TH0()interrupt 3 /用的 T1 的中断,所以为 3TH0=6;n2+;备注:备注:关于此处变成了关于此处变成了 n=因为此处有两个中断程序。因为此处有两个中断程序。假设当 n1 恰好等于了 3686,然后程序进入 i

17、f 内部执行,但若恰好此时 n2 到达了 1843,主程序此时还检测不到下一个 if 语句也满足情况了,故 n2 会继续加下去,若判断情况还是之前的=的话,程序永远不会进入 if 语句。故应为=。以后写这方面的程序要特别注意。4.关于计数器的应用。(以计数器 0 方式 1 为例)(1)、计数器的功能是对外来脉冲信号计数,计数器 T0(P3.4 口)T1(P3.5 口)T2(P1.0)三个输入引脚。当设置为计数器工作状态时,每当外部输入的脉冲发生负跳变(由 1 到 0)时,计数器加 1,直至加满溢出,然后进入中断。(2)、但单片机的晶振限制了所测计数脉冲的最高频率,外部输入计数脉冲的最高频率为振

18、荡器频率的 1/24 .即 12MHZ 晶振频率,最高可输入 500KHZ 的外部脉冲。(3)、知识回顾:TMOD 中高四位用来设置计时器/计数器 1,低四位用来设置 T0.其中 C/T 为用来选择是计数器还是定时器。=0,计时。=1 计数。故计数应设为 0000 0101 TMOD=0 x05;/*项目功能:利用计数器 0 工作方式 1,用地线去接触 T0 脚,每接触一下,计数器计一次数,将所记的数值实时显示在数码管上,计满 100 清零。*/*程序一:不使用中断法,不停地读取计数器寄存器中的值注意事项:1.用函数实现读取运行中计数器寄存器的值,由于寄存器的值会随时变化,为防止读完 TH0

19、后再读 TL0 时,TH0 又进 1 产生变化,需要再读一次 TH0,两次读取的值一样,才表示读取数值成功。2、break;语句可以跳出 while 循环 3、如果读完后判断条件为 n=100;然后让 n=0;出现的实际现象为第一个数码管会不亮。因为如果先前读到的数大于 100 了,就不会再进入 if 语句,但大于 100 的数数码管又无法显示!*#include#define uchar unsigned char#define uint unsigned intsbit dula=P26;sbit wela=P27;uchar code shu=0 x3f,0 x06,0 x5b,0 x4

20、f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;uchar n;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void display()uchar shi,ge;shi=n/10;ge=n%10;dula=1;P0=shushi;dula=0;P0=0 xff;wela=1;P0=0 xfe;wela=0;delay(5);/延时必不可少!dula=1;P0=shuge;dula=0;P0=0 xff;wela=1;P0=0 xfd;wela=0;delay(5);/延时必不可少!void re

21、ad()uchar th1,th2,t1;while(1)/反复读取,直至读出一样的 TH0 为止th1=TH0;t1=TL0;th2=TH0;if(th1=th2)break;/跳出本层循环 n=th1*256+t1;void main()TMOD=0 x05;/0000 0101TH0=0;TL0=0;/这里不用中断程序,故不用开中断TR0=1;while(1)read();if(n=100)/以后写程序都要写 =n=0;TH0=0;TL0=0;/计数器也要重新开始记哦display();/*程序二:采用中断法,设定初值,接收一次负跳变便进入中断,然后 n+,显示。疑问:如果采用标准的脉冲

22、的,显示至少需要 10ms,10ms 早就需要计很多数了。所以上例适合间隔十分短的计数,而中断法则适合间隔很长的计数。*#include#define uchar unsigned char#define uint unsigned intsbit dula=P26;sbit wela=P27;uchar code shu=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;uchar n;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void displa

23、y()uchar shi,ge;shi=n/10;ge=n%10;dula=1;P0=shushi;dula=0;P0=0 xff;wela=1;P0=0 xfe;wela=0;delay(5);/延时必不可少!dula=1;P0=shuge;dula=0;P0=0 xff;wela=1;P0=0 xfd;wela=0;delay(5);/延时必不可少!void main()TMOD=0 x05;TH0=0 xff;TL0=0 xfe;EA=1;ET0=1;TR0=1;while(1)/必须把显示放到主程序中,令其反复显示 /否则现象为第一位数码管不亮display();void ser()i

24、nterrupt 1ET0=0;TR0=0;TH0=0 xff;TL0=0 xfe;n+;if(n=100)n=0;ET0=1;TR0=1;/*程序三:用单片机模拟出脉冲信号,对其负跳变计数。*/#include#include#define uchar unsigned char#define uint unsigned intsbit dula=P26;sbit wela=P27;uchar code shu=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;uchar n;sbit m=P11;void delay(u

25、int z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void display()uchar shi,ge;shi=n/10;ge=n%10;dula=1;P0=shushi;dula=0;P0=0 xff;wela=1;P0=0 xfe;wela=0;delay(5);/延时必不可少!dula=1;P0=shuge;dula=0;P0=0 xff;wela=1;P0=0 xfd;wela=0;delay(5);/延时必不可少!void main()TMOD=0 x05;TH0=0 xff;TL0=0 xfe;EA=1;ET0=1;TR0=1;while(

26、1)/必须把显示放到主程序中,令其反复显示 /否则现象为第一位数码管不亮m=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();/_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();m=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();/_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();display();void ser()interrupt 1ET0=0;TR0=0;TH0=0 xff;TL0=0 xfe

27、;n+;if(n=100)n=0;ET0=1;TR0=1;4.关于串口中断:(方式关于串口中断:(方式 1)1.要利用定时器 1 做比特率发生器。2.TI 为 发送中断标志位;RI 为接收中断标志位。发送或接收完毕都会由硬件置 1,此时应由软件清 0。3.发送或接收了数据都会进入串口中断。(因此进入中断程序后要及时关闭中断)详解程序:/*项目一:利用串口通信的方式,上位机铜通过发送数据来实现对 P1 口小灯的控制*#includevoid init()TMOD=0 x20;/0010 0000 定时器 1 工作方式 2(自动重装)TH1=0 xfd;TL1=0 xfd;TR1=1;REN=1;

28、/允许串口接收数据SM0=0;SM1=1;/设置串口工作方式 1EA=1;ES=1;/打开串口中断void main()init();while(1);void ser()interrupt 4/第一次进入中断必是下位机接收到了数据,因为他没有数据可发RI=0;P1=SBUF;/这里把上位机发送到 sbuf 数据直接给 P1 口,不再读出来/*项目二:利用上位机发送数据,然后下位机再发给上位机 注意发送也会进入中断哦,所以发送前要关闭中断;注意 while(!TI);的利用。发送完毕及时清零*/#includeint flag=0;unsigned char a;void init()TMOD

29、=0 x20;/0010 0000 定时器 1 工作方式 2(自动重装)TH1=0 xfd;TL1=0 xfd;TR1=1;REN=1;/允许串口接收数据SM0=0;SM1=1;/设置串口工作方式 1EA=1;ES=1;/打开串口中断void main()init();while(1)if(flag=1)ES=0;/关闭串口中断,防止待会发送数据,又会进入串口中断。本程序只有下位机接收到数据才会进入中断flag=0;SBUF=a;/把接收到的数据通过 sbuf 发送给上位机while(!TI);/等待发送完毕TI=0;/发送完毕,软件清 0ES=1;/再次打开中断,等待上位机发送数据,接收进入

30、中断 void ser()interrupt 4/第一次进入中断必是下位机接收到了数据,因为他没有数据可发RI=0;a=SBUF;flag=1;知识补充:SCON 控制寄存器目录目录各控制位展开各控制位展开定义定义SCON(Serial Control Register)串行口控制寄存器,用于控制串行通信的方式选择、接收和发送,指示串口的状态。SCON 既可以字节寻址,也可以位寻址,其字节地址为 98H,地址位为 98H9FH。1结构结构SCON 寄存器各位定义SM0SM1SM2RENTB8RB8TIRI9FH9EH9DH9CH9BH9AH99H98H工作方式(工作方式(SM0 SM1)(1)

31、方式 0(SM0 SM1:0 0):串行口的工作方式 0 为移位寄存器 I/O 方式,可外接移位寄存器,一扩展 I/O 口,也可外接同步 I/O 设备。发送操作:当执行一条“MOVSBUF,A”指令时,启动发送操作,由 TXD 输出移位脉冲,由 RXD 串行 SBUF 中的数据。发送完 8 位数据后自动置 TI=1.请求中断。要继续发送时,TI 必须有指令清零。接收操作:REN 是串行口接收允许控制位。REN=0 时禁止接收;REN=1时允许接收。当软件将 REN 置“1”时,即开始从 RXD 端口以 fosc/12 波特率输入数据,当接收到 8 位数据时,将中断标志 RI 置“1”。再次接收

32、数据之前,必须用软件将 RI 清 0。(2)方式 1(SM0 SM1:0 1):串行口位 10 位通用异步接口。发送或接收一帧数据信息为 10位,包括 1 位起始位“0”、8 位数据位、1 位停止位“1”。发送数据:数据从 TXD 端口输出,当数据写入发送缓冲器 SBUF 时,就启动发送器发送。发送完一帧数据后,置中断标志 TI=1,申请中断,通知 CPU 可以发送下一个数据了。接收数据:首先使 REN=1(允许接收数据),串行口从 RXD 接收数据,当采样到1 至 0 跳变时,确认是起始位“0”,就开始接收一帧数据,当接收完一帧数据时,置中断标志 RI=1,申请中断,通知 CPU 从 SBU

33、F 取走接收到的数据。(3)方式 2(SM0 SM1:1 0):串行口为 11 位异步通信接口。发送或接收一帧信息包括 1 位起始位“0”、8 位数据位、1 位可编程位、1 位停止位“1”。发送数据:发送前,先根据通信协议由软件设置TB8 为“奇偶校验位”或“数据标识位”,然后将要发送的数据写入 SBUF,即能启动发送器。发送过程是由执行任何一条以 SBUF 为目的寄存器的指令而启动的,把 8 位数据装入 SBUF,同时还把 TB8 装到发送移位寄存器的第 9 位上,然后从 TXD(P3.1)端口输出一帧数据。接收数据:先置 REN=1,使串行口为允许接收状态,同时还要将 RI 清“0”。然后

34、再根据 SM2 的状态和所接收到的 RB8 的状态决定此串行口在信息到来后是否置 R1=1,并申请中断,通知 CPU 接收数据。当 SM2=0 时,不管 RB8 为“0”还是为“1”,都置 RI=1,此串行口将接收发送来的信息。当 SM2=1 时,且 RB8=1,表示在多机通信情况下,接收的信息为“地址帧”,此时置 RI=1,串行口将接收发来的地址。当 SM2=1 时,且 RB8=0,表示在多机通信情况下,接收的信息为“数据帧”,但不是发给本从机的,此时 RI 不置为“1”,因而 SBUF 中接收的数据帧将丢失。(4)方式 3(SM0 SM1:1 1):为波特率可变的 11 位异步通信方式,除

35、了波特率有所区别之外,其余方式都与方式 2 相同。编辑本段各控制位各控制位SM0、SM1串行口工作方式控制位SM0SM1工作方式功能波特率00方式 08 位同步移位寄存器机器周期/1201方式 110 位 UART可变10方式 211 位 UART机器周期/64 或机器周期/3211方式 311 位 UART可变1SM2多机通信控制位多机通信是工作于方式 2 和方式 3,SM2 位主要用于方式 2 和方式 3。接收状态,当串行口工作于方式 2 或 3,以及 SM2=1 时,只有当接收到第 9 位数据(RB8)为 1 时,才把接收到的前 8 位数据送入SBUF,且置位 RI 发出中断申请,否则会

36、将接收到的数据放弃。当 SM2=0 时,就不管第 9 位数据是 0 还是 1,都会将数据送入 SBUF,并发出中断申请。工作于方式 0 时,SM2 必须为 0。REN允许接收位REN 用于控制数据接收的允许和禁止,REN=1 时,允许接收,REN=0 时,禁止接收。TB8发送接收数据位 8在方式 2 和方式 3 中,TB8 是要发送的即第 9 位数据位。在多机通信中同样亦要传输这一位,并且它代表传输的地址还是数据,TB8=0 为数据,TB8=1 时为地址。RB8接收数据位 8在方式 2 和方式 3 中,RB8 存放接收到的第 9 位数据,用以识别接收到的数据特征。TI发送中断标志位可寻址标志位。方式 0 时,发送完第 8 位数据后,由硬件置位,其它方式下,在发送或停止位之前由硬件置位,因此,TI=1 表示帧发送结束,TI 可由软件清“0”。RI接收中断标志位可寻址标志位。接收完第 8 位数据后,该位由硬件置位,在其他工作方式下,该位由硬件置位,RI=1 表示帧接收完成。在串口在串口中断处理中断处理时,时,TI,RI 都需要软件清都需要软件清0,硬件置位后不可能自动清,硬件置位后不可能自动清 0,此外,在进行缓冲区操,此外,在进行缓冲区操作时,需要作时,需要 ES=0,以防止中断出现。,以防止中断出现。

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服