作业1: PC机通过串口发送命令给单片机,单片机收到字符1循环跑马,收到字符2发送自己的名字到PC机,收到字符3采集光照电压到PC机
#include "iocc2530.h"
#include <string.h>
#define LED1 P1_0 // LED1端口宏定义
#define LED2 P1_3 // LED2端口宏定义
#define LED3 P1_4 // LED3端口宏定义
#define LED4 P1_5 // LED4端口宏定义
#define uchar unsigned char
uchar c;
uchar i=0;
void init_UART() //串口初始化
{
CLKCONCMD &= 0x80; //晶振32MHz
PERCFG=0x00;
P0SEL |=0X3C;
U0CSR |= 0x80; //UART方式
U0BAUD=216;
U0GCR=10;
U0UCR|=0X80;
URX0IF=0; //打开接收器,必须要先配置好串口,才能打开接收器
U0CSR|=0x40;
IEN0 |=0x84;
EA=1;
}
void init_light()
{
P1SEL&=~0X39;//0001 1011
P1DIR|=0X39;
LED1=0;
LED2=0;
LED3=0;
LED4=0;
}
/****************************************************************
*函数功能 :串口发送字符串函数
*入口参数 : data:数据
* len :数据长度
*返 回 值 :无
*说 明 :
****************************************************************/
void UartTX_Send_String(char *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
URX0IF = 0; //清中断标志
c = U0DBUF;
i=1;
}
void main()
{
init_light();
init_UART();
//接受单个字
while(1)
{
if(i==1)
{
i=0;
if(c=='1')
{
LED1=1;
LED2=LED3=LED4=0;
UartTX_Send_String("\nLED1 has been turn on!\n",25);
}
else if(c=='2')
{
LED2=1;
LED1=LED3=LED4=0;
UartTX_Send_String("\nLED2 has been turn on!\n",25);
}
else if(c=='3')
{
LED3=1;
LED1=LED2=LED4=0;
UartTX_Send_String("\nLED3 has been turn on!\n",25);
}
else if(c=='4')
{
LED4=1;
LED1=LED2=LED3=0;
UartTX_Send_String("\nLED4 has been turn on!\n",25);
}
c=(uchar)NULL;
}
}
}
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。