单片机如何同时开定时器中断和串行口中断?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机如何同时开定时器中断和串行口中断?相关的知识,希望对你有一定的参考价值。

求助,本人用8051单片机串口发送数据,当要用定时器中断时,加入中断就无法运行了,这是为什么?
void UART0_Init(void)

SFRPAGE = UART0_PAGE;
SCON0 = 0x50; // SCON0: mode 1, 8-bit UART, enable RX
SSTA0 = 0x10; // SMOD00 = 1
TMOD = 0x20; // TMOD: timer 1, mode 2, 8-bit reload
TH1 = -(SYSCLK/BAUDRATE/16); // set Timer1 reload value for baudrate
TR1 = 1; // start Timer1
CKCON |= 0x10; // Timer1 uses SYSCLK as time base

TI0 = 1; // Indicate TX0 ready


viod TIMER init()

TMOD |=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0 = 1;
TR0 = 1;

void main()

UART0_Init() ;
TIMER init();
.-
-
-
-


这样就直接卡死了,求解决方法!谢谢

你的串口中断没有打开,定时器1没有运行。 参考技术A 初始化函数中连EA=1;ES=1;都没有怎么中断?怎么通信啊?

单片机怎么清中断标志位

希望给出具体的语句,谢谢
51单片机

参考技术A 不知道你说的单片机是什么系列的.
下面是51单片机的汇编和C语言清除中断的语句。

汇编:
CLR IE0 ;清除外部中断INT0请求标志
CLR IE1 ;清除外部中断INT1请求标志
CLR TF0 ;清除定时器T0中断请求标志
CLR TF1 ;清除定时器T1中断请求标志
CLR RI ;串行通讯接收中断请求标志
CLR TI ;串行通讯发送中断请求标志

C语言:
IE0=0; //清除外部中断INT0请求标志
IE1=0; //清除外部中断INT1请求标志
TF0=0; //清除定时器T0中断请求标志
TF1=0; //清除定时器T1中断请求标志
RI=0; //串行通讯接收中断请求标志
TI=0; //串行通讯发送中断请求标志本回答被提问者采纳
参考技术B 有两种方法:
1、采用中断的方法,此方法是机器自己完成的(除去

串行口中断);
举例:
org 00h
sjmp main
org 0bh
sjmp t_0
org 30h
main:mov sp,#60h
mov ie,#82h
mov tmod,#01h
mov th0,#0b1h
mov tl0,#0e0h
setb tr0
sjmp $
t_0: mov tmod,#01h
mov th0,#0b1h
cpl p2.1
reti
end

2、采用查询的方法,此方需要人工加以相应的指令完

成;
org 00h
sjmp main
org 30h
main:mov sp,#60h
mov ie,#82h
mov tmod,#01h
mov th0,#0b1h
mov tl0,#0e0h
setb tr0
loop:jnb tr0,loop
clr tr0
mov th0,#0b1h
mov tl0,#0e0h
cpl p2.1
sjmp loop
end
参考技术C 还是很简单的 对中断寄存器操作就可以了 参考技术D 这个你只是找本书看看都有的.....不过不知道你的单干片机是51的还是AVR的/.....

以上是关于单片机如何同时开定时器中断和串行口中断?的主要内容,如果未能解决你的问题,请参考以下文章

51单片机中断系统

MCS-51系列单片机中用于中断允许和中断优先级控制的寄存器分别是啥?

单片机的中断系统

单片机串口中断接收

外部中断和计时器要点

为啥这无法进入中断