
摘录一段我写的程序供参考:
;------------------相关寄存器定义------------------------
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的中断服务子程序怎么写呢、中断引起数据丢失的原因求详解、单片机查询工作方式和中断工作方式有什么不同,编程时有什么区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)