有什么用的中断标志位IRQF

论文:基于无线网络的终端设备监控器研究与设计 三亿文库
论文:基于无线网络的终端设备监控器研究与设计
中国石油大学(华东)硕士论文
第5章 终端设备监控器软件设计 程序设计方法。 5.2 终端设备监控器各模块程序设计 5.2.1 时钟模块程序设计 对于DS12887芯片[32]的编程,主要是对其内部几个寄存器的操作。 (1)寄存器A(可读写,D7位除外)。各位符号见表5-1。 表5-1 DS12887寄存器A各位说明 D7 D6 D5 D4 UIP DV2 DV1 DV0 D3 RS3 D2 RS2 D1 RS1 D0 RS0 UIP:刷新标志。UIP=1,正在进行刷新;UIP=0,至少244?s以内不会进行刷新,用户可在此时对RAM区进行读写操作。 DV2~DV0:振荡器使能及计数电路复位端。DV2~DV0=010,开启振荡器,并允许计数电路正常计数;DV2~DV0=X11,开启振荡器,但计数电路将在DV2~DV0=010后500?s重新工作。 RS3~RS0:频率选择位。不同的RS3~RS0值将产生122?s到500ms之间不同周期的方波输出及周期中断。 (2)寄存器B(可读写)。如表5-2所示。 表5-2 DS12887寄存器B各位说明 D7 D6 D5 D4 SET PIE AIE UIE D3 D2 D1 D0 SQWE DM 24/12 DSE SET:刷新使能端。SET=0,每秒进行1次刷新;SET=1,禁止刷新,此时程序可不受刷新过程影响地对日历时钟信息进行初始化。 PIE:周期中断允许位。PIE=0,禁止;PIE=1,允许。 AIE:报警中断允许位。AIE=0,禁止;AIE=1,允许。 UIE:刷新结束中断允许位。UIE=0,禁止;UIE=1,允许。 SQWE:方波输出允许位。SQWE=0,SQW端保持低电平;SQWE=1,SQW端输出由RS3~RS0位所确定的具有一定频率的方波。 DM:数据模式选择位。DM=0,日历时钟信息是BCD码形式;DM=1, 37 中国石油大学(华东)硕士论文
第5章 终端设备监控器软件设计 为二进制形式。 24/12:时间模式选择位。为0,选择12小时制;为1,选择 24小时制。 DSE:夏时制允许位。DSE=0,禁止;DSE=1,4月份的第一个星期六到10月份的最后一个星期天之间采用夏时制计时。 (3)寄存器C(只读)。如表5-3所示。 表5-3 DS12887寄存器C各位说明 D7 D6 D5 D4 IRQF PF AF UF D3 0 D2 0 D1 0 D0 0 PF:周期中断标志。PF=1,有周期中断产生;PF=0,无周期中断产生。 AF:报警中断标志。AF=1,有报警中断产生;AF=0,无报警中断产生。 UF:刷新结束中断标志。UF=1,有刷新结束中断产生;UF=0,无刷新结束中断产生。 IRQF:中断请求标志位。IRQF=PF×PIE+AF×AIE+UF×UIE,IRQF=0,无中断请求产生;IRQF=1,有中断请求产生,IRD端输出低电平。读C寄存器或复位之后其所有标志位均被清零。 (4)寄存器D(只读)。见表5-4。 表5-4 DS12887寄存器D各位说明 D7 D6 D5 D4 VRT 0 0 0 D3 0 D2 0 D1 0 D0 0 VRT:VRT=0,芯片内部锂电池能力已耗尽,时间和RAM区信息无效;VRT=1,信息有效。 DS12887的芯片选择引脚接138译码器的Y1输出脚,故其高位地址为3FH。在主程序中需要首先对DS12887芯片进行初始化,包括设定24/12小时制、是否为夏时制等。系统通过按键来输入初始时间,以方便随时对时间进行校准。DS12887芯片初始化主要是通过向各寄存器写入控制字来实现的。程序如下。 ORG
DS12887WRITE
38 中国石油大学(华东)硕士论文
第5章 终端设备监控器软件设计 DS12887WRITE: MOV
DPTR,#3F0AH
;寄存器A地址为0AH MOV
;DV2-DV0=111,分频器复位 MOVX
@DPTR,A INC
;寄存器B地址 MOV
;选BCD码,24小时制,非夏时制 MOVX
@DPTR,A MOV
A,SECOND MOV
@DPTR,A MOV
@DPTR,A MOV
@DPTR,A MOV
@DPTR,A MOV
A,MONTH INC
@DPTR,A MOV
@DPTR,A INC
@DPTR,A INC
;初始秒数据暂存于SECOND中 ;秒单元地址 ;初始分数据暂存于MINUTE中 ;分单元地址 HOUR中 ;时单元地址 ;初始日数据暂存于DAY中 ;日单元地址 ;初始月数据暂存于MONTH中 ;月单元地址 ;初始年数据暂存于YEAR中 ;年单元地址
;到寄存器A地址
;DV2-DV0=010,RS3-RS0=0110
;每秒更新一次,允许方波输出,24时制 39
;初始时数据暂存于
中国石油大学(华东)硕士论文
第5章 终端设备监控器软件设计 MOVX
;时钟开始运行 读取DS12887的日历时钟通常有中断和查询两种方式。但不管用哪种方式,首先需要判断数据是否更新结束,只有在数据更新结束时,读取的数据才有效。本系统采用的为查询方式,即查询寄存器A的UIP位。当UIP为0时读时间。读取DS12887当前时间的子程序如下。 ORG
DS12887READ DS12887READ: MOV
DPTR,#3F0AH ;DS12887寄存器A地址 MOVX
A,@DPTR WAIT: JB
ACC.7,WAIT
;若UIP=1,则等待时间更新完毕 MOV
;秒地址 MOVX
;取秒数据 MOV
;秒数据保存于变量SECOND中 MOV
;分地址 MOVX
;取分数据 MOV
;分数据保存于变量MINUTE中 ........
;时、日、月、年数据的读取(同上,略) RET 5.2.2 IC总线软件模拟程序 本系统选用的EEPROM芯片和D/A转换芯片都是基于I2C总线的。设计时,采用软件模拟I2C总线的方式完成芯片与单片机的数据交换。考虑到节省单片机硬件资源的需要,在程序设计中,设计了一个延时子程序I2CDELAY,该子程序的延时时间被当作I2C总线SDA和SCL信号线高、低电平状态应该持续的时间。利用软件延时方法可以节省单片机内部定时器资源,缺点是当单片机的晶振频率发生改变时,需要对该子程序的延时计数器进行调整,以确保延时时间的长短能够满足I2C总线数据传输协议的要求。下面简要介绍一下I2C总线的传输协议[24]。 (1)开始信号。每次访问I2C总线前要在总线上发送开始信号。当SCL线为高电平时,SDA线由高变低,便形成开始信号。其时序见图5-2。以 40 2中国石油大学(华东)硕士论文
第5章 终端设备监控器软件设计 下是I2C总线开始信号子程序。 SDA
SCL 开始信号
图5-2 I2C总线开始信号和结束信号时序图 结束信号 PROC
;产生I2C总线数据传输起始信号子程序 I2CSTART: SETB
;置SDA为高电平状态 SETB
;置SCL为高电平状态 LCALL
;模拟SCL高电平状态计数 CLR
;使SDA产生一个有高到低的跳变 LCALL
;延时,模拟SDA低电平状态计数 CLR
;将SCL置为低电平状态 RET (2)结束信号。每次I2C总线访问后要在总线上发送结束信号。当SCL线为高电平时,SDA线由低变高,便形成结束信号。其子程序如下。 PROC
I2CSTOP I2CSTOP: SETB
I2CDELAY SETB
I2CDELAY RET (3)数据传输过程在I2C总线的数据传输过程中,发送到SDA信号线上的每个字节必须为8位,并且传输一个字节的格式是高位(MSB)在前、低 41
联系客服:cand57</本帖子已过去太久远了,不再提供回复功能。博客访问: 5583506
博文数量: 994
博客积分: 15795
博客等级: 上将
技术积分: 16568
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: 嵌入式
(unsigned int irq,void (*handler)(int, void*, struct pt_regs *),unsigned long flags,const char *devname,void *dev_id)
unsigned int irq
void (*handler)(int,void *,struct pt_regs *)
unsigned long flags
const char * devname&&&
void *dev_id
&#8226; IRQF_DISABLEDSA_INTERRUPT&&
&#8226; IRQF_SHAREDSA_SHIRQ
。LinuxPCI
request_irq
1.flagsIRQF_SHARED
3.disable_irq(unsigned int irq)
irq, void *dev_id, struct pt_regs *regs)
为什么要做这样的检测?) */
如果设备支持自动清除,则不需要这步) */
通常是数据接收*/
通常在驱动卸载时), 应当把它们返还给系统,使用:void free_irq(unsigned int irq, void *dev_id)
阅读(941) | 评论(0) | 转发(4) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。我真心不理解串口中断是干嘛用的 哎
小弟求解了【单片机吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:142,103贴子:
我真心不理解串口中断是干嘛用的 哎
小弟求解了收藏
下面附我看的一个简单的串口通信方面程序,下面配上我个人认为的注解,以及我不懂的一些语句的用法。。但是我实在无法理解串口中断的用法
求求各位大神了
困扰我四五天了 #include&reg52.h&unsigned char frag,a,i;unsigned char code table[]="I GET";
//一个字符型的编码数组void init()
//恩 算是一个初始化函数吧
{TMOD=0x20;
//恩选定定时器一级定时器的工作方式,但是对于为什么选择工作方式2?TH1=0
//普通的装填初值吧?但是 这个是串口中断 定时器溢出了怎么办?TL1=0TR1=1;
启动定时器1;REN=1;
//串行口接受允许位,打开之后串行口可以接受数据了;SMO=0;
//加上上面那条都是设置串行口控制寄存器SCON;SM1=1;EA=1;
//开总中断,开串口中断;ES=1;}void main()
//开始主程序{init();
// 主程序开始,但是这个没有大循环的话不是程序执行一次就没了?if(frag==1)
//检测是否中断发生了。{ES=0;
//中断发生了之后立刻关闭中断。但是后面没有开中断的语句,这。。。。for(i=0;i&6;i++) //将数组里面的内容一个一个输出给SBUF,{SBUF=table[i];while(!TI); //
不懂什么意思 网上查了一下,TI是用来看数据传输完成了没有的,但是。TI=0;
//貌似中断里面数据传输完成之后是会TI置1的。}SBUF=a;
//a的值又赋给SBUF。也就是说SBUF前面的值赋给自己。while(!TI);
//检测数据传输完成没有?TI=0;
//没了。}}void ser() interrupt 4
//对于这个中断程序我有一点不懂就是什么时候进入中断?{RI=0;
//为什么RI要置0;a=SBUF;
//这个就很不懂了,a是什么,SBUF好像是一个缓冲寄存器,frag=1;
//一个进入中断的标准位吧}
专业从事单片机开发的生产,具有高品质的研发团队和设备,产品高品质保证,10年生产开发经验,深受国内外合作伙伴信赖,你的明智选择!!
希望真的有会的人 可以帮帮我。。我真的不理解这个串口中断。
啊啊啊啊啊 啊
有谁教教我吗
你硬着头皮往后学,不出一个月这些问题你自己就都明白了
串口是干嘛的,说白了就是通信用的,再说干一点就是发数据用的,你自己查一下串口的时序图,去理解一下
当串口有中断字,开始进入串口中断发送或接收SBUF区数据
我对汇编熟,C差点.大概意思是:这个程序的主程序好像有点问题主程序应该等待frag==1.frag==1由中断程序产生,当串口收到一个数据时产生中断,进入void ser() interrupt 4RI=0为了接收下一个数据a=SBUF收到的数据-&A,这个数据最后又发回去了frag=1建立一个标志主程序发现收到数据后(frag=1),关中断,用查询方式发送六个数SBUF=table[i];表里的数据送SBUF,开始发数据while(!TI); 查询数据发完了没有,TI=1就可以发下一个数据了.TI=0; 准便发下一个数据
六个数发完后,再把收到的那个数发回去
首先说明这个程序写法是有问题的,主要表达的意思是:单片机在等待一个数据的到来,然后返回这个数据给发送方。这个程序是达不到我说的这个目的的,可以修改一下就可以正常运行的。
为用户提供各种低成本,低功耗,低能耗,功能强的微控制器解决方案.恩智浦微控制器,高性能,设计新颖,性能稳定,价格超低,欲购从速,欢迎垂询!
这是郭天祥的书上的,我其他的都懂,就是没明白中断是什么时候发生的,过了一年你应该已经搞懂了,能告诉我吗?
按理说中断发生的条件是SBUF开始装入停止位。但是我没发现哪里开始装入停止位了。
有数据从串口传过来~~
正好看郭天祥的书看到这一部分,自己一开始也不太明白原理,后来也是一行行去推最后明白的,自己写了一点注释,希望可以帮到你。个人觉得问题的关键是理解每个控制寄存器,理解了控制寄存器的功能,每条语句间就可以串起来了。#include&reg52.h&#define uchar unsigned char#define uint unsigned intunsigned char flag,a,i;uchar code table[]=&I get &;void init(){TMOD=0x20; TH1=0//T1计时器TL1=0//T1计时器TR1=1;//TCON寄存器,启动T1REN=1;//SCON串行口控制寄存器,允许串行口接受位SM0=0;//SCON, 选择工作方式SM1=1;//SCON,选择工作方式EA=1;//中断允许寄存器,全局中断允许位ES=1;//中断允许寄存器,串行口中断允许位}void main(){init();while(1){if(flag==1)//flag用于标记单片机是否接收到数据,flag==1表示接收到,判断接收到后进入发送数据程序{ES=0;//这里的含义是发送数据时关闭串口中断服务for(i=0;i&6;i++)//for的这段程序是将table里的字符依次发送出去,SBUF=x为发送数据命令,发送完每个字符后会引起TI置1,其后软件手动置0{SBUF=table[i];while(!TI);TI=0;}SBUF=a;//这句的含义是发送数据awhile(!TI);//发送完后引起IT置1TI=0;//手动置0ES=1;//开启串行口中断服务flag=0;//flag重新置0}}}void ser() interrupt 4//4为中断号,定义了本中断程序由何种中断触发;4的触发源为串行口中断{RI=0;a=SBUF;//读走SBUF内的字符flag=1;}
这坟挖的,楼主估计都毕业了
接收串口数据的
是谁在挖坟
楼主,我也遇到和你当初一样的困扰,我这些天被串行通讯,串行中断弄糊涂了,求解释。
如果单片机正在执行一个LED闪烁的程序,但是现在串口上突然有数据过来了,那么单片机就必须要中断当前的LED闪烁,转而执行串口接收,这时就进入了串口中断函数——“void ser() interrupt 4 ”,这个中断函数是在单片机串口来数据时自动进入的,你在上边配置过串口的相关寄存器后,串口功能就已经启用了,中断函数后面的标号“4”就是中断编号,单片机就是根据这个编号去执行中断程序的
串口中断通俗的理解就是当串口这两个引脚有数据要发送或者接收的话,单片机就会暂停当前正在执行的任务并保存当前的位置,然后去执行中断的函数,一直到中断函数里面的任务执行完了,再回过头来执行刚刚被打断的任务。。。举个例子,就比如你在和别人说话,这时候来了个电话,你是继续和别人说话还是去接电话呢,,电话就是中断,你和别人说话就是正常的任务,当你接完电话后就会接着刚刚和别人说话的地方继续和别人说话。这个就是中断 ,
就是说,一发送数据,中断就开始了???
登录百度帐号推荐应用}

我要回帖

更多关于 什么是中断标志位 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信