打印
[活动专区]

赛元易码魔盒体验——2,串口命令去点灯

[复制链接]
644|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dami|  楼主 | 2020-7-18 22:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dami 于 2020-7-18 22:42 编辑

赛元易码魔盒体验——2,串口命令去点灯
1,使用串口0 UART0 和P00
2,使用赛元易码魔盒生成代码。
3,使用KEIL 编译。
4,main.c主函数前添加代码
void rx_to_buf(unsigned char x);
#define RXMAX 50
char rx0[RXMAX];
char rx_point=0;
void delayms(int x)
{
        int i,j;
        for(i=0;i<5000;i++)
                for(j=0;j<x;j++){};
}       

void LED1_ON(void){
        GPIO_WriteLow(GPIO0, GPIO_PIN_0);
}
void led1_off(void)
{
        GPIO_WriteHigh(GPIO0, GPIO_PIN_0);
}
void SC_GPIO_Init(void)
{
       
        GPIO_Init(GPIO0, GPIO_PIN_0,GPIO_MODE_OUT_PP);
        /*GPIO_Init write here*/               
}
void rx_to_buf(unsigned char x)
{
        if(rx_point>=RXMAX)
                return;
        rx0[rx_point]=x;
        rx_point++;
        if(rx_point>=RXMAX)
                rx_point =0;
}
void rx_command(void)
{
                 if((rx0[0] =='l')&&(rx0[1] =='e')&&(rx0[2] =='d')&&(rx0[3] =='o')&&(rx0[4] =='n'))
                 {
                                LED1_ON();
                                printf("LED1 ON!         \n");
                         rx_point =0;
                         rx0[0] =rx0[1] =rx0[2] =rx0[3] =rx0[4] =rx0[5];
                 }
                 if((rx0[0] =='l')&&(rx0[1] =='e')&&(rx0[2] =='d')&&(rx0[3] =='o')&&(rx0[4] =='f')&&(rx0[5] =='f'))
                 {
                                led1_off();
                                printf("LED1 OFF!        \n");
                          rx_point =0;
                         rx_point =0;
                         rx0[0] =rx0[1] =rx0[2] =rx0[3] =rx0[4] =rx0[5];
                 }
                 if(rx_point >=6)
                                rx_point =0;
}


4,中断 函数中加入代码:
extern void rx_to_buf(unsigned char x);
void UART0Interrupt()                interrupt 4
{
   if(UART0_GetFlagStatus(UART0_FLAG_TI))
  {
     UART0_ClearFlag(UART0_FLAG_TI);                        //Çå³ýTI
     Uart0SendFlag = 1;
  }
  else if(UART0_GetFlagStatus(UART0_FLAG_RI))
  {
     unsigned char x;
     UART0_ClearFlag(UART0_FLAG_RI);                        //Çå³ýRI
     Uart0ReceiveFlag=1;
     x=UART0_ReceiveData8();
     rx_to_buf(x);
  }
}


5,主程序main中调用
void main(void)
{           
        Uart0Init();
        SC_GPIO_Init();
        enableInterrupts();
        printf("Uart0 contrl led\n please send ledon ledoff command to  control led flash");
        while(1)
        {
                rx_command();
                delayms(100);
        }
}
6,编译运行
7,运行结果:





使用特权

评论回复

相关帖子

沙发
CS801380| | 2020-7-19 22:03 | 只看该作者
好!!!!!!!!!!!!

使用特权

评论回复
板凳
dami|  楼主 | 2020-7-20 08:46 | 只看该作者
贴代码那里老是掉代码。希望网站改进一下。

使用特权

评论回复
地板
dami|  楼主 | 2020-7-20 08:53 | 只看该作者
赛元易码魔盒问题:
1,工程里面加东西偶然出现全屏红叉。
2,经常性没法连接流程图里面的东西。
3,有时没法生成代码。
4,设备型号会变。和设置的不一样。
5,好在如果只是配置一下设备和IO口就生产代码。那是没什么问题。
6,能开始这么做,说明赛元是很用心了。
7,加油改进吧。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

1050

帖子

6

粉丝