为什么在proteus8仿真中用自己的电脑数码管只能亮8,而用别人电脑时数码管能根据自己写的代码亮,而自己电脑不行。换了好几台电脑试过了,代码和仿真图都没问题。
8051 UART 有一个串行中断。 每当发送或接收数据时,串行中断标志 TI 和 RI 分别被激活。
8051 串行中断有一个向量地址(0023H),如果启用全局和串行中断,它可以跳转到服务 ISR(中断服务程序)。
让我们看看串行中断程序将如何用于串行通信编程。
注意:对于发送和接收中断,分配了相同的中断向量地址,所以当控制器跳转到 ISR 时,我们必须通过 TI 和 RI 位状态来检查是 Tx 中断还是 Rx 中断。
实现代码如下:
#include <reg52.h> /* Include x51 header file */
char rcv_data;
void uart_interrupt_init()
{
EA = 1; /* 开启全局中断 */
ES = 1; /* 开户串行中断 */
}
void uart_init()
{
TMOD = 0x20; /* Timer 1, 8位,自动重载模式 */
TH1 = 0xFD; /* 波特率为9600 */
SCON = 0x50; /* 模式1,启动接收 */
TR1 = 1; /* 启动 timer 1 */
}
/*中断处置函数*/
void Serial_ISR() interrupt 4
{
rcv_data = SBUF; /* 接收数据 */
RI = 0; /* 清空 RI 标志 */
//IE=0x00; /* 关闭中断以防止递归 */
SBUF = rcv_data; // 将数据原路返回
while(TI==0);
TI=0;
//IE=0x90;
}
void main()
{
P1 = 0x00; /* Make P1 output */
uart_interrupt_init(); /* Call Ext. interrupt initialize */
uart_init();
while(1);
}
Proteus仿真结果:
1,你怎么确认代码和仿真图和代码没问题的?是直接拷过来的吗?(抄的不算,抄错可能性太大)
2,确认操作正确,确保单片机正确加载了程序文件。