|
采用MAX232转换芯片进行串口通信,主要是用于对液晶通过串口的通信,但是液晶总是无法传入数据,无法进行串口中断。麻烦各位前辈帮忙看一下。
void UART1_Init (void)
{
SCON1 = 0x50; // SCON1: 模式1, 8位, 允许 RX
TMOD = 0x20; // TMOD: 定时器1, 模式 2, 8位自动加载方式
TH1 = -(SYSCLK/BAUDRATE/16); // 设置定时器1自动加载值,有波特率计算得到
TR1 = 1; // 启动定时器1
CKCON |= 0x10; // 定时器1使用系统时钟SYSCLK作为时间基准
PCON |= 0x10; // SMOD01 = 1
SCON1 |= 0x02; // Indicate TX0 ready
}
void SYSCLK_Init (void)
{
int i; // 延时计数
OSCXCN = 0x67; // 使用外部22.1184MHz时钟
for (i=0; i < 256; i++) ; // XTLVLD 外部时钟准备时间间隔 (>1ms)
while (!(OSCXCN & 0x80)) ; // 等等晶振稳定. OSCXCN.7置位
OSCICN = 0x88; // 设置外部时钟为系统时钟SYSCLK,允许
// 时钟丢失探测
}
void PORT_Init (void)
{
XBR2 = 0x44; // Enable crossbar and weak pull-ups
P0MDOUT = 0x01; // enable TX0 as a push-pull output
P1MDOUT = 0x00;
P2MDOUT = 0xe0; // P2口设为推挽方式
P3MDOUT = 0xff; // P2口设为推挽方式
}
void com_int_proc(void) interrupt 20
{
while ((SCON1&0x01) == 0x00) /* 是接收中断 */
_nop_();
EA=0;
SCON1 &=0xfe;
LCD();
}
void com_send( uchar byte)
{
//psend_int=0;
SBUF1=byte;
while((SCON1 &0x02) == 0x00);
_nop_();
SCON1 &=0xFD;
}
main()
{
WDTCN = 0xde; // 禁止看门狗
WDTCN = 0xad;
SYSCLK_Init();
PORT_Init();
UART1_Init();
EIE2 |=0x40;
EA=1;
while(1);
}
|
|