定时器0的向量地址为多少,十道关于单片机的问题 电子类
来源:整理 编辑:亚灵电子网 2023-09-01 14:20:49
1,十道关于单片机的问题 电子类
1.工作模式就是:定时器模式,计数器模式;工作方式是四种方式,方式0是13位定时器/计数器,方式1是16定时器/计数器,方式2具有自动重装初值的8位定时器/计数器,方式3:定时器/计数器0分为两个8位定时/计数器,定时器/计数器1在这个方式没有意义。
2.中断
3.是0
4.TH0=(256-256)/256.TL0=(256-256)%256
5.应该是初值和晶振吧
6.中断向量应该是中断程序的入口地址吧
7.TMOD的D2和D6位为0时定时,为1时计数,中断标志位是定时或计数溢出出自动置1吧
8.1微秒吧,一个时钟周期是两个振荡周期,12个振荡周期是一个机器周期
9.
10.每秒传送数据的位数
第9个不清楚,初学51单片机,没有回答对的希望多多指教,共同进步。
2,急求几道MC51定时器计数器的程序
ORG 0000HAJMP STARTORG 000BH ;定时器0的中断向量地址AJMP TIME0 ;跳转到真正的定时器程序处ORG 30HSTART:MOV P1,#0FFH ;关所 灯MOV 30H,#00H ;软件计数器预清0MOV TMOD,#00000001B ;定时/计数器0工作于方式1MOV TH0,#3CH MOV TL0,#0B0H ;即数15536SETB EA ;开总中断允许SETB ET0 ;开定时/计数器0允许SETB TR0 ;定时/计数器0开始运行LOOP: AJMP LOOP ;真正工作时,这里可写任意程序TIME0: ;定时器0的中断处理程序PUSH ACCPUSH PSW ;将PSW和ACC推入堆栈保护INC 30HINC 31H ;两个计数器都加1MOV A,30HCJNE A,#20,T_NEXT ;30H单元中的值到了20了吗?T_L1: CPL P1.0 ;到了,取反P10MOV 30H,#0 ;清软件计数器T_NEXT:MOV A,31HCJNE A,#40,T_RET ;31h单元中的值到40了吗?T_L2:CPL P1.1MOV 31H,#0 ;到了,取反P11,清计数器,返回T_RET:MOV TH0,#15HMOV TL0,#9FH ;重置定时常数POP PSWPOP ACCRETIEND我的博客上有一个,你只要改改定时常数,就可以符合了.
3,给小弟详细解答下下面的单片机语句怎样一条运行过程
这是一个所有的灯的定时闪烁程 ORG 0000H AJMP START 这两句是指程上电复位后从这里运行,然后跳转到START处运行。 ORG 000BH ;定时器0的中断向量地址 AJMP TIME0 ;跳转到真正的定时器程序处 (?) 这两句说的很明白,指定时时间到的时候,跳转到TIME0处执行 START: MOV P1,#0FFH ;关所 灯 MOV TMOD,#00000001B ;定时/计数器0工作于方式1(?) MOV TH0,#15H MOV TL0,#0A0H ;即数5536 SETB EA ;开总中断允许 SETB ET0 ;开定时/计数器0允许 (?) SETB TR0 ;定时/计数器0开始运行 (?) 此处为开通计数器的程序 LOOP: AJMP LOOP ;真正工作时,这里可写任意程序(?) 此句为当定时器0中断没有到来时空运转 TIME0: ;定时器0的中断处理程序 (?) PUSH ACC (ACC,PSW是什么 PUSH PSW ;将PSW和ACC推入堆栈保护 要推入堆栈保护?) CPL P1.0 MOV TH0,#15H MOV TL0,#0A0H ;重置定时常数 POP PSW POP ACC RETI 这几句为定时器0中断子程序,当计时时间到时,对所有的灯求反,同时把累加器ACC和PSW进行保护,运行结束时还原,因为此程序为简单的灯的闪烁程序,所以 PUSH ACC (ACC,PSW是什么 PUSH PSW ;将PSW和ACC推入堆栈保护 要推入堆栈保护?) POP PSW POP ACC 这四句可以省略
4,单片机80c51怎么知道有中断如单片机正在执行一程序这时INT0口
Sever_INT0() interrupt 0 using 2……}说明:Sever_INT0:中断函数0:为外部中断入口2:使用寄存器组2中断源 Keil中断编号 矢量地址最高优先级 6 0x0033外部中断0 0 0x0003定时器0溢出 1 0x000B外部中断1 2 0x0013定时器1溢出 3 0x001B串口 4 0x0023定时器2溢出 5 0x002BDMA 7 0x003B硬件断点 8 0x0043JTAG 9 0x004B软件断点 10 0x0053监视定时器 12 0x0063内部寄存器组有3组:1~3平时也可以不用,如果有相互嵌套的最好指定,否则可能会出问题 当开启电断后,一旦INT0口出现低电平时,自动进入Sever_INT0()函数,处理函数内部程序你好!80C51的CPU在每一个机器周期顺序检查每一个中断源,在每一机器周期的状态周期采样并按优先级顺序处理所有被激活了的中断请求,如果没有被下述条件所阻止,将在下一个机器周期的状态周期响应激活了的最高级中断请求。我的回答你还满意吗~~有个中断溢出标志,cpu检测到了就会把pc跳到中断入口地址。
5,51单片机的优先级怎么用C语言怎么写
有些单片机的中断优先级在默认的情况下是确定的,不需要设置,例如51单片机,其优先级从高到低以及向量地址是:
00H 复位中断 优先级0(最高)
03H 外部中断0 1
0BH 定时器0 2
13H 外部中断1 3
1BH 定时器1 4
23H 串口 5
单片机在运行时,当发生中断时,CPU会自动把相应的中断向量地址装载到PC中,也就是程序会自动跑到相应中断的向量地址上面去。例如发生定时器0中断,在发生中断前PC的值不管多少,一发生中断,PC的值就会变成0BH。在执行完中断服务程序后会返回到发生中断时的程序地址。所以,相应的中断服务程序必须写在对应的中断向量的地址,但是由于两个相邻向量的地址之间的间隔太小,不能放下太多的指令,所以在用汇编写程序的时候一般是在其向量地址上面放一条跳转指令,而正真的中断服务程序写在别的地方。
例如:
ORG 0BH;定时器0中断向量地址
LCALL TIMER0;跳转到真正的中断服务程序。
...... ;其他主程序
TIMER0: ;真正的中断服务程序
..........
RETI ;返回到主程序
而用C语言就更简单了,把中断服务程序就是一个函数,不过这个函数加个interrupt的关键字来修饰就是了。而interrupt后面加的是个中断的中断号。由于复位中断的发生是不可逆的,发生后不可能再返回到发生中断之前。所以复位中断没有服务程序,也就没有中断号。各个中断的中断号就是上表中的优先级再减1。
例如定时器0的中断函数。
void Timer0(void) interrupt 1
// add your code
}
各个中断的优先级是在上面那个表中,从上到小依次降低的。高优先级的中断可以打断低优先级的中断,同等级的中断不能相互打断。不过通过设置IP寄存器的值,可以改变中断的优先级。例如我想把定时器0的优先级设置得比外部0高,我就把IP寄存器中的PT0位设置为1,其他位为0就可以了。一般这样写 void 函数名(自己定义的)() interrupt N
函数名 自己定义的 如 定时器0 void timer0() interrupt 2
interrupt 为 关键字 表示 中断符号
N 为 中断优先级 例如 0 为 外部中断0
有时还会看见后面跟 using 整数 这
是表示选用的寄存器
完整的例子
外部中断0
void Ex0() interrupt 0
// add your code
}
6,求解此程序具体注释谢谢了
ORG 0000H ;下一条指令的地址为0000H LJMP MAIN ;长跳转到标号MAIN处执行程序 ORG 0003H ;下一条指令的地址为0003H(外部中断0的向量) LJMP INT0_ISR ;长跳转到标号INT0_ISR处执行程序 ORG 000BH ;下一条指令的地址为000BH(内部定时器0的向量) LJMP TIMER0_ISR ;长跳转到标号TIMER0_ISR处执行程序 ORG 0013H ;下一条指令的地址为0013H(外部中断1的向量) LJMP INT1_ISR ;长跳转到标号INT1_ISR处执行程序 ORG 001BH ;下一条指令的地址为001BH(内部定时器1的向量) LJMP TIMER1_ISR ;长跳转到标号TIMER1_ISR处执行程序/////////////////////////////////////////// ORG 0033H ;下一条指令的地址为0033HDB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH ;连续定义6个FFH的数据字节/////////////////////////////////////////// ORG 0100H ;下一条指令的地址为0100HMAIN: MOV SP, #0C0H ;SP指针值设置成C0H LCALL SYSTEM_INITIAL ;长调用SYSTEM_INITIAL函数MAIN_LOOP: LCALL DISPLAY_ROUTINE ;长调用DISPLAY_ROUTINE LCALL KEY_SCAN ;长调用KEY_SCAN LCALL FUNCTION_CONTROL ;长调用FUNCTION_CONTROL SJMP MAIN_LOOP ;短跳转至标号MAIN_LOOP执行程序SYSTEM_INITIAL: CLR PX0 ;PRIORITY 0 清除外部中断0的中断优先级(低优先级) ;SETB PX0 ;PRIORITY 1 设置外部中断0的中断优先级(高优先级) ;CLR IT0 IT(interrupt type)=0 表示外部中断0电平有效 SETB IT0 ;设置外部中断0为下降沿有效SETB EX0 ;打开内部定时器0的中断允许位;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;CLR PX1 ;PRIORITY 0 清除外部中断1的中断优先级(低优先级) SETB PX1 ;PRIORITY 1 设置外部中断0的中断优先级(高优先级) CLR IT1 ;IT(interrupt type)=0 表示外部中断1电平有效 ;SETB IT1 设置外部中断1为下降沿有效SETB EX1 ;打开内部定时器1的中断允许位;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MOV TMOD, #00100001B; GATE C/T M1 M0 GATE C/T M1 M0 0010,0001 ; TIMER1 MODE 2,8-BIT Reload; TIMER0 MODE 1,16-bit timer ;定时器1为方式2,定时器0为方式1 MOV TH1, #(256-200) ;定时器1的重装寄存器设置为56 MOV TL1, #(256-200) ;定时器1的初始值设置为56 SETB ET1 ;ET(enable timer1)允许定时器1中断 SETB TR1 ;TR(Timer run1)定时器1开始计时SETB EA ;打开系统总中断开关(此时才开始真正的计时) RET ;返回主函数INT0_ISR: NOP ;空机器周期(以下不再重复) CLR P1.2; //X0 P3.2 将P1.2口置0 NOP NOP NOP SETB P1.2 ;置P1.2口为1 NOP RETI ;外部中断0的中断函数返回INT1_ISR: NOP CLR P1.3; //X0 P3.3 ;将P1.3口置0 NOP NOP NOP SETB P1.3 ;置P1.3口为1 NOP RETI ;外部中断1的中断函数返回TIMER0_ISR: NOP NOP RETI ;定时器0的中断函数返回TIMER1_ISR: CLR P3.5 ;P3.5口置0 NOP NOP NOP SETB P3.5 ;;P3.5口置1 NOP NOP RETI ;定时器1的中断函数返回DISPLAY_ROUTINE: NOP NOP NOP RETKEY_SCAN: NOP NOP NOP RET FUNCTION_CONTROL: NOP NOP NOP RETEND ;结束,这里最好写成END MAIN表明code入口地址在MAIN处PS:貌似这程序在P3.5输出方波,然后对外部中断0和1的触发在P1.2和P1.3口反应出来呵呵,其实,这个程序,并没有什么具体的意义,只是一个空的程序框架而已。你这是单片机汇编啊,不是X86的汇编,与具体单片机型号有关。
7,单片机的定时功能计数功能中断功能的定义
我这里有点教材,希望对你有帮助!MCS-51中断系统的结构:如图(抱歉,本图请找本51书看一下)所示,由与中断有关的特殊功能寄存器、中断入口、顺序查询逻辑电路等组成,包括5个中断请求源,4个用于中断控制的寄存器IE、IP、ECON和SCON来控制中断 类弄、中断的开、关和各种中断源的优先级确定。中断请求源:(1)外部中断请求源:即外中断0和1,经由外部引脚引入的,在单片机上有两个引脚,名称为INT0、INT1,也就是P3.2、P3.3这两个引脚。在内部的TCON中有四位是与外中断有关的。IT0:INT0触发方式控制位,可由软件进和置位和复位,IT0=0,INT0为低电平触发方式,IT0=1,INT0为负跳变触发方式。这两种方式的差异将在以后再谈。IE0:INT0中断请求标志位。当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。IT1、IE1的用途和IT0、IE0相同。(2)内部中断请求源TF0:定时器T0的溢出中断标记,当T0计数产生溢出时,由硬件置位TF0。当CPU响应中断后,再由硬件将TF0清0。TF1:与TF0类似。TI、RI:串行口发送、接收中断,在串口中再讲解。2、中断允许寄存器IE在MCS-51中断系统中,中断的允许或禁止是由片内可进行位寻址的8位中断允许寄存器IE来控制的。见下表EA X X ES ET1 EX1 ET0 EX0其中EA是总开关,如果它等于0,则所有中断都不允许。ES-串行口中断允许ET1-定时器1中断允许EX1-外中断1中断允许。ET0-定时器0中断允许EX0-外中断0中断允许。SETB EASETB ET1SETB EX1来实现它。3、五个中断源的自然优先级与中断服务入口地址外中断0:0003H定时器0:000BH外中断1:0013H定时器1:001BH串口 :0023H它们的自然优先级由高到低排列。写到这里,大家应当明白,为什么前面有一些程序一始我们这样写:ORG 0000HLJMP STARTORG 0030HSTART:。这样写的目的,就是为了让出中断源所占用的向量地址。当然,在程序中没用中断时,直接从0000H开始写程序,在原理上并没有错,但在实际工作中最好不这样做。优先级:单片机采用了自然优先级和人工设置高、低优先级的策略,即可以由程序员设定那些中断是高优先级、哪些中断是低优先级,由于只有两级,必有一些中断处于同一级别,处于同一级别的,就由自然优先级确定。开机时,每个中断都处于低优先级,我们可以用指令对优先级进行设置。看表2中断优先级中由中断优先级寄存器IP来高置的,IP中某位设为1,相应的中断就是高优先级,否则就是低优先级。X X X PS PT1 PX1 PT0 PX0 例:在上例中,如果5个中断请求同时发生,求中断响应的次序。响应次序为:定时器0->外中断1->外中断0->实时器1->串行中断。MCS-51的中断响应过程:1、中断响应的条件:讲到这儿,我们依然对于计算机响应中断感到神奇,我们人可以响应外界的事件,是因为我们有多种“传感器“――眼、耳可以接受不同的信息,计算机是如何做到这点的呢?其实说穿了,一点都不希奇,MCS51工作时,在每个机器周期中都会去查询一下各个中断标记,看他们是否是“1“,如果是1,就说明有中断请求了,所以所谓中断,其实也是查询,不过是每个周期都查一下而已。这要换成人来说,就相当于你在看书的时候,每一秒钟都会抬起头来看一看,查问一下,是不是有人按门铃,是否有电话。。。。很蠢,不是吗?可计算机本来就是这样,它根本没人聪明。了解了上述中断的过程,就不难解中断响应的条件了。在下列三种情况之一时,CPU将封锁对中断的响应:CPU正在处理一个同级或更高级别的中断请求。现行的机器周期不是当前正执行指令的最后一个周期。我们知道,单片机有单周期、双周期、三周期指令,当前执行指令是单字节没有关系,如果是双字节或四字节的,就要等整条指令都执行完了,才能响应中断(因为中断查询是在每个机器周期都可能查到的)。当前正执行的指令是返回批令(RETI)或访问IP、IE寄存器的指令,则CPU至少再执行一条指令才应中断。这些都是与中断有关的,如果正访问IP、IE则可能会开、关中断或改变中断的优先级,而中断返回指令则说明本次中断还没有处理完,所以都要等本指令处理结束,再执行一条指令才可以响应中断。2、中断响应过程CPU响应中断时,首先把当前指令的下一条指令(就是中断返回后将要执行的指令)的地址送入堆栈,然后根据中断标记,将相应的中断入口地址送入PC,PC是程序指针,CPU取指令就根据PC中的值,PC中是什么值,就会到什么地方去取指令,所以程序就会转到中断入口处继续执行。这些工作都是由硬件来完成的,不必我们去考虑。这里还有个问题,大家是否注意到,每个中断向量地址只间隔了8个单元,如0003-000B,在如此少的空间中如何完成中断程序呢?很简单,你在中断处安排一个LJMP指令,不就可以把中断程序跳转到任何地方了吗?一个完整的主程序看起来应该是这样的:ORG 0000HLJMP STARTORG 0003HLJMP INT0 ;转外中断0ORG 000BHRETI ;没有用定时器0中断,在此放一条RETI,万一 “不小心“产生了中断,也不会有太大的后果。中断程序完成后,一定要执行一条RETI指令,执行这条指令后,CPU将会把堆栈中保存着的地址取出,送回PC,那么程序就会从主程序的中断处继续往下执行了。注意:CPU所做的保护工作是很有限的,只保护了一个地址,而其它的所有东西都不保护,所以如果你在主程序中用到了如A、PSW等,在中断程序中又要用它们,还要保证回到主程序后这里面的数据还是没执行中断以前的数据,就得自己保护起来。一、计数概念的引入从选票的统计谈起:画“正”。这就是计数,生活中计数的例子处处可见。例:录音机上的计数器、家里面用的电度表、汽车上的里程表等等,再举一个工业生产中的例子,线缆行业在电线生产出来之后要计米,也就是测量长度,怎么测法呢?用尺量?不现实,太长不说,要一边做一边量呢,怎么办呢?行业中有很巧妙的方法,用一个周长是1米的轮子,将电缆绕在上面一周,由线带轮转,这样轮转一周不就是线长1米嘛,所以只要记下轮转了多少圈,就可以知道走过的线有多长了。二、计数器的容量从一个生活中的例子看起:一个水盆在水龙头下,水龙没关紧,水一滴滴地滴入盆中。水滴不断落下,盆的容量是有限的,过一段时间之后,水就会逐渐变满。录音机上的计数器最多只计到999….那么单片机中的计数器有多大的容量呢?8031单片机中有两个计数器,分别称之为T0和T1,这两个计数器分别是由两个8位的RAM单元组成的,即每个计数器都是16位的计数器,最大的计数量是65536。三、定时8031中的计数器除了可以作为计数之用外,还可以用作时钟,时钟的用途当然很大,如打铃器,电视机定时关机,空调定时开关等等,那么计数器是如何作为定时器来用的呢?一个闹钟,我将它定时在1个小时后闹响,换言之,也可以说是秒针走了(3600)次,所以时间就转化为秒针走的次数的,也就是计数的次数了,可见,计数的次数和时间之间的确十分相关。那么它们的关系是什么呢?那就是秒针每一次走动的时间正好是1秒。图1结论:只要计数脉冲的间隔相等,则计数值就代表了时间的流逝。由此,单片机中的定时器和计数器是一个东西,只不过计数器是记录的外界发生的事情,而定时器则是由单片机提供一个非常稳定的计数源。那么提供组定时器的是计数源是什么呢?看图1,原来就是由单片机的晶振经过12分频后获得的一个脉冲源。晶振的频率当然很准,所以这个计数脉冲的时间间隔也很准。问题:一个12M的晶振,它提供给计数器的脉冲时间间隔是多少呢?当然这很容易,就是12M/12等于1M,也就是1个微秒。结论:计数脉冲的间隔与晶振有关,12M的晶振,计数脉冲的间隔是1微秒。四、溢出让我们再来看水滴的例子,当水不断落下,盆中的水不断变满,最终有一滴水使得盆中的水满了。这时如果再有一滴水落下,就会发生什么现象?水会漫出来,用个术语来讲就是“溢出”。 水溢出是流到地上,而计数器溢出后将使得TF0变为“1”。至于TF0是什么我们稍后再谈。一旦TF0由0变成1,就是产生了变化,产生了变化就会引发事件,就象定时的时间一到,闹钟就会响一样。至于会引发什么事件,我们下次课再介绍,现在我们来研究另一个问题:要有多少个计数脉冲才会使TF0由0变为1。五、任意定时及计数的方法刚才已研究过,计数器的容量是16位,也就是最大的计数值到65536,因此计数计到65536就会产生溢出。这个没有问题,问题是我们现实生活中,经常会有少于65536个计数值的要求,如包装线上,一打为12瓶,一瓶药片为100粒,怎么样来满足这个要求呢?……提示:如果是一个空的盆要1万滴水滴进去才会满,我在开始滴水之前就先放入一勺水,还需要10000滴嘛?对了,我们采用预置数的方法,我要计100,那我就先放进65436,再来100个脉冲,不就到了65536了吗。定时也是如此,每个脉冲是1微秒,则计满65536个脉冲需时65.536毫秒,但现在我只要10毫秒就可以了,怎么办?……10个毫秒为10000个微秒,所以,只要在计数器里面放进55536就可以了。虽然都是在计数,但方式不同,当通过外部触发并且对外部的触发脉冲进行计数就是计数功能;而通过对特殊寄存器赋值而对内部中断脉冲进行计数时,对应脉冲的间隔时间计数就定时功能。
文章TAG:
定时器0的向量地址为多少定时 定时器 向量