使用stc12c5a60s2双串口单片机时 串口2的中断服务子程序怎么写呢

使用stc12c5a60s2双串口单片机时 串口2的中断服务子程序怎么写呢,第1张

摘录一段我写的程序供参考:

;------------------相关寄存器定义------------------------

AUXR EQU 8EH ;辅助寄存器

AUXR1 EQU 0A2H ;辅助寄存器1

CLK_DIV EQU 97H ;时钟分频器

S2CON EQU 9AH ;串口2控制寄存器

S2BUF EQU 9BH ;串口2数据缓冲区

BRT EQU 9CH ;波特率寄存器

IE2 EQU 0AFH ;中断控制寄存器2

;-----------------串行初始化程序-------------------------

UART_INIT:

ORL PCON,#80H ;使能波特率倍速位SMOD

MOV SCON,#50H ;8位数据,可变波特率

MOV S2CON,#50H ;8位数据,可变波特率

MOV BRT,#0FAH ;57600bps@110592MHz

ORL AUXR,#14H ;独立波特率发生器时钟为Fosc,即1T

ORL IE2,#01H ;允许串口2中断

ANL AUXR,#03FH ;定时器12时钟为Fosc,即12T

ANL AUXR,#0FEH ;串口1选择定时器1为波特率发生器

MOV TMOD,#21H ;设定定时器1为8位自动重装方式,0为16位定时器

MOV TL1,#0FFH ;57600bps@110592MHz

MOV TH1,#0FFH ;设定定时器重装值

MOV SERGET,#0 ;接收RS232 Pointer is 0

MOV SERPUT,#0 ;取值RS232 Pointer is 0

MOV RXGET,#0 ;接收RS485 Pointer is 0

MOV RXPUT,#0 ;取值RS485 Pointer is 0

CLR P44 ;485处于接收状态

ORL IPH,#10H ;

SETB PS ;串口1中断优先级11为最高

CLR ET1 ;禁止定时器1中断

SETB TR1 ;启动定时器1

CLR BUSY

RET

;-----------------串行通讯2中断服务程序-------------------------

SER2INT:

PUSH ACC

PUSH PSW

MOV A,S2CON

JNB ACC0,SER2INT1 ;S2RI

ANL S2CON,#NOT S2RI

MOV A,S2BUF

MOV B,A

MOV R0,#RXRAM

MOV A,RXPUT

ANL A,#0FH

ORL A,R0

MOV R0,A

MOV A,B

MOV @R0,A

LCALL SENDRXDAT

INC RXPUT

SJMP SERINT2

SER2INT1:

MOV A,S2CON

JNB ACC1,SERINT2 ;S2TI

ANL S2CON,#NOT S2TI

CLR BUSY

SERINT2:

POP PSW

POP ACC

RETI

;-----------------串行通讯1中断服务程序-------------------------

SER1INT:

PUSH ACC

PUSH PSW

PUSH DPL

PUSH DPH

SETB RS0

CLR RS1

JBC RI,SERTIRI1 ;是接收中断,清除此标志,转接收

CLR TI ;是发送中断,清除此标志,中断返回

SJMP SEREND

SERTIRI1:

MOV A,SBUF ;接收(读入)数据

MOV B,A

SERTIRI2:

MOV R0,#SERRAM

MOV A,SERPUT

ANL A,#1FH

ORL A,R0

MOV R0,A

MOV A,B

MOV @R0,A

INC SERPUT

MOV DLY03,A

SETB SERBIT

SEREND:

POP DPH

POP DPL

POP PSW

POP ACC

RETI

个人理解:准备数据的时间若小于中断处理的时间,会造成CPU进行中断处理过程中,下一个数据就已经准备好了从而刷新了数据。

具体执行过程可以分为:

I/O准备数据,准备好后向CPU请求中断,CPU进行中断响应从而进行中断处理。

这时候由于I/O采取的是程序中断处理方式,因此CPU和I/O是并行处理的,即CPU在进行中断处理的时候,I/O又同时在准备下一个数据。

当准备好下一个数据后,会刷新数据,因此如果中断处理时间大于准备数据的时间数据会发生丢失。

区别太大了,单片机中断较少,一般有复位中断、外部中断、计时器中断、通讯中断、ADC中断等等,中断方式是当中断条件满足时立即中止当前正在运行的程序,进入中断服务程序,执行完毕后返回断点继续执行,查询方式是一直在循环主程序中通过查询语句判断条件是否满足,因主程序执行周期的影响,查询实效性很低,对于要求低的应用可以勉强使用,对实效性要求高的情况必须使用中断方式,比如通过外部中断测速,查询方式对较高速度的响应会产生十分大的误差,甚至测量数值混乱。

可能是因为DSP里面设置了延迟关闭,这是为了减少冲击声。如果在功放没关闭的时候关闭前级DSP的电源,会产生较严重的冲击声。

汽车DSP,全称是数字音频处理器,是DigitalSignalProcessing的英文缩写,翻译成中文就是数字信号处理。

DSP的功能是控制频率响应,可以对音频信号进行一定程度的处理和修改。

中断返回指令。服务程序是指为了帮助用户使用与维护电脑,提供服务性手段并支持其他软件开发而编制的一类程序,中断服务程序至少有中断返回指令。指示是命令旧时公文的一种,是上级对下级呈请的批示。

很多公交车安装有同调度所的无线通讯,以及卫星定位,便于调度所掌握车辆行踪,公交候车站显示还有多少时间车到站,

车辆信号中断是这些信号的全部或部分中断不能使用。

中断号是系统分配给每个中断源的代号,以便识别和处理。中断号在中断处理过程中起到很重要的作用,在采用向量中断方式的中断系统中,CPU才可以找到中断服务程序的入口地址,实现程序的转移。

为了在中断向量表中查找中断服务程序的入口地址,可由中断号(n)×,4得到一个指针,指向中断向量(即中断服务程序的入口地址)存放在中断向量表的位置,从中取出这个地址(CS:IP),装入代码段寄存器CS和指令指针寄存器IP,即转移到了中断服务程序。

以上就是关于使用stc12c5a60s2双串口单片机时 串口2的中断服务子程序怎么写呢全部的内容,包括:使用stc12c5a60s2双串口单片机时 串口2的中断服务子程序怎么写呢、中断引起数据丢失的原因求详解、单片机查询工作方式和中断工作方式有什么不同,编程时有什么区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10216709.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存