|
高手请进:关于增强型单片机lpc932与pc的通信
[复制链接]
麻烦高手看一下,我用的是增强型uart,pc发送一个“s”给单片机,单片机受到后会给pc发送一个response at 9600 baud 。不知程序是否有问题???
程序如下:
#include "reg932.h"
#define uchar unsigned char
uchar temp;
char text[]="response at 9600 baud ";
void UART_Init();
void sendtoPC(char* dat);
void sendtoPC(char* dat)
{
int j=0;
while(dat[j]) // send string
{
TI=0; // clear transmit interrupt flag
SBUF=dat[j]; // start sending one byte
while (!TI); // wait until sent
j++;
}
}
//接收中断服务程序,接受命令。若接受正确,则进行相应的控制操作//
void Rcv_ISR() interrupt 4 //当接收完一个字节,R1置1,进入Receive中断
{
EA=0;
while(!RI) //等待接收完时R1置位,当R1=0以及SM2=0或接到的停止位=1,数据才会被装入
// SBUF和RB8,
temp=SBUF; //保存所读取的数据
RI=0; //RI清零,以等待下次发送(接受中断标志位,在接受停止位的中间时刻由硬件置位)
SBUF=temp; //发送数据(回应数据)
while(!TI) //当T1为1时,发送完毕
TI=0; //TI清零,准备为下一次发送(T1为发送中断标志,必须通过软件清零)
EA=1;
}
//发送中断//
void Send_ISR() interrupt 13
{
EA=0; //中断允许
while(temp=='s')
sendtoPC(text); //添加自己所需要的代码
EA=1;//禁止中断
}
//主函数
void main()
{
UART_Init();
while(1);
}
//串口初始化
void UART_Init()
{
P1M1=0x00;
P1M2=0X00;//端口初始化,使输出口方式为准双向口
SCON=0x50;//使能接受,选择串口模式1(SCON是串行口控制和状态寄存器,sm0+sm1=01,ren=表示串行口允许接收位)
SSTAT=0xE0;//选择独立的Tx/Rx中断,设置双缓冲方式,中断独立,每发送一字节,产生一次中断
//SSTAT.7双缓冲模式,1,双缓冲使能。UART在模式0时必须禁止
//SSTAT.6发送产生中断的位置!0:在停止位的开始产生TX中断;1:在停止位的结束产生TX中断。
//SSTAT.1:各自独立的RX和TX中断。该位复位时
//
BRGR0=0XF0;//选择波特率为9600@7.373,Baudrate=CCLK[(BRGR1,BRGR0)+16]
BRGR1=0X20;
BRGCON=0X03;//使能BRG(打开串口波特率发生器,使用串口波特率发生器),启动UART的波特率发生器
ESR=1;//允许RX中断
EST=1;//允许TX中断
EA=1;//使能中断
}
|
|