找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

有关C8051F的485串口通信问题

[复制链接]
admin 发表于 2012-9-2 11:31:34 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
这个程序为什么返回数据总是0


#include "compiler_defs.h"
#include "c8051f930_defs.h"
#include "stddef.h"
#include "stdio.h"
#define SYSCLK 24500000 // SYSCLK frequency in Hz
#define BAUDRATE 9600 // Baud rate of UART in bps 115200
unsigned char RXD;
unsigned char TXD;
//unsigned char i;
SBIT (t,SFR_P2,3); //接收使能
void Timer_Init(void);
void UART_Init(void);
void Port_IO_Init(void);
void Oscillator_Init(void);
void Interrupts_Init(void);
void Init_Device(void);
void TXD_SUB(void);
void RXD_SUB(void);
void UART_ISR(void);
void main(void)
{
PCA0MD &= ~0x40; // 关闭看门狗
Init_Device();
while (1)
{
}
}
//波特率为7500
void Timer_Init()
{
TCON = 0x50;
TMOD = 0x20;
CKCON = 0x01;
if (SYSCLK/BAUDRATE/2/256 < 1)
{TH1 = -(SYSCLK/BAUDRATE/2);
CKCON &= ~0x0B; // T1M = 1; SCA1:0 = xx
CKCON |= 0x08;
}
else if (SYSCLK/BAUDRATE/2/256 < 4)
{TH1 = -(SYSCLK/BAUDRATE/2/4);
CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 01
CKCON |= 0x01;
}
else if (SYSCLK/BAUDRATE/2/256 < 12)
{TH1 = -(SYSCLK/BAUDRATE/2/12);
CKCON &= ~0x0B;
} // T1M = 0; SCA1:0 = 00
else
{TH1 = -(SYSCLK/BAUDRATE/2/48);
CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 10
CKCON |= 0x02;
}

TMOD &= ~0xf0; // TMOD: timer 1 in 8-bit autoreload
TMOD |= 0x20;
TR1 = 1; // START Timer1
TI0 = 1;
}
void UART_Init()
{ EA=1;
SCON0 = 0x10;
}
void Port_IO_Init()
{ // UART TX
P0MDOUT |= 0x10; // Set TX pin to push-pull
XBR0 = 0x01;
XBR2 = 0x40;
}
void Oscillator_Init()
{
OSCICN = 0x82;
}
//允许中断,允许串口中断;
void Interrupts_Init()
{
IE = 0x90;
}
// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
Timer_Init();
UART_Init();
Port_IO_Init();
Oscillator_Init();
Interrupts_Init();
t=0;
}
//串口中断子程序
//此处的延时是对串口接受的响应延时,不可改变
void UART_ISR(void) interrupt 4
{
IE =0x00; //禁止中断
RI0=0;
TXD=SBUF0;
TXD_SUB();
if (TI0==1)
{ TI0=0;
RI0=0;
IE=0x90;
}
}
//串口发送一个字节子程序
//此处的延时涉及到89C52的接受,不可改变
void TXD_SUB()
{
IE =0x00; //禁止中断
t=1;
SBUF0=7;
while(!TI0); //等待发送结束
TI0 = 0; //发送结束标志清零
t=0;
IE=0x90;
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-24 20:32 , Processed in 0.049401 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表