#include"c8051f350.h"
#define sysclk 24500000 //系统时钟频率,单位:HZ;
#define baud 9600 //串口
通信波特率,单位:bps
void Uart0_Init(void);
void Sysclk_Init(void);
void SysPort_Init(void);
void Uart0_SendChar(unsigned char chr);
void main(void)
{
unsigned char a;
PCA0MD&=~0x40; // 禁止看门狗定时器
Sysclk_Init(); // 配置系统时钟
SysPort_Init(); // 端口配置
Uart0_Init(); // 串口初始化
while(1)
{
a=9;
Uart0_SendChar(a);
}
}
void Uart0_Init(void)
{
SCON0 = 0x10; //允许接收
if (sysclk/baud/2/256 < 12)
{
TH1 = -(sysclk/baud/2/12);
CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 00
}
else
{
TH1 = -(sysclk/baud/2/48);
CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 10
CKCON |= 0x02;
}
TL1 = TH1;
TMOD &= ~0xf0; // 定时器设置
TMOD |= 0x20;
TR1 = 1; // 启动定时器,串口开始工作
ti0 = 0; // 清除中断标志
RI0 = 0;
ES0 = 0;
}
void Sysclk_Init(void)
{
OSCICN = 0x83;
}
void SysPort_Init(void)
{
P0MDOUT = 0x1D;
P0MDIN = 0xFF;
P0 = ~P0MDOUT;
P1MDOUT = 0x38;
P1MDIN = 0x3F;
P1 = ~P1MDOUT;
P0SKIP = 0x00;
P1SKIP = 0x00;
XBR0 = 0x03;
XBR1 = 0xC0;
IE = 0x80;
}
void Uart0_SendChar(unsigned char chr)
{
TI0 = 0;
SBUF0 = chr;
while(!TI0); // 等待发送1个字节数据完成
TI0 = 0; // 清除中断标志
}
这是一段很简单的串口通信程序,但是我用串口调试助手确收不到任何数据。如果将a=9改为a=‘9’,串口调试助手可以正常显示。为什么,那么如何传输数字而不是字符呢
一周热门 更多>