串口控制FL2440(S3C2440)的LED

2019-11-27来源: eefocus关键字:串口控制  FL2440  S3C2440  LED

开发板:FL2440


芯片:S3C2440


功能:程序运行时点亮一个LED,然后利用PC机通过串口发送一个数,开发板读到这个数后点亮另外一个LED。最基本的串口控制。


代码:


Init.s


AREA |DATA|,CODE,READONLY 

ENTRY 

ldr r13, =0x1000 

IMPORT WuqiMain 

b WuqiMain 

END

 

include.h


 1 #define rUTRSTAT0   (*(volatile unsigned *)0x50000010)    //UART 0 Tx/Rx status

 2 #define rULCON0     (*(volatile unsigned *)0x50000000)    //UART 0 Line control

 3 #define rUCON0      (*(volatile unsigned *)0x50000004)    //UART 0 Control

 4 #define rUFCON0     (*(volatile unsigned *)0x50000008)    //UART 0 FIFO control

 5 #define rUBRDIV0    (*(volatile unsigned *)0x50000028)    //UART 0 Baud rate divisor

 6 #define WrUTXH0(ch) (*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)

 7 #define RdURXH0()   (*(volatile unsigned char *)0x50000027)

 8 #define rURXH0          (*(volatile unsigned *)0X50000024)

 9 #define rUTXH0  (*(volatile unsigned *)0X50000020)

10 #define rURXH0  (*(volatile unsigned *)0X50000024)

11 

12 #define GPBCON (*(volatile unsigned *)0x56000010) 

13 #define GPBDAT (*(volatile unsigned *)0x56000014) 

14 #define GPBUP (*(volatile unsigned *)0x56000018)

15 

16 #define uchar unsigned char

17 #define uint unsigned int

18 #define U32 unsigned int

19 #define U16 unsigned short

20 #define S32 int

21 #define S16 short int

22 #define U8  unsigned char

23 #define    S8  char

24 

25 #define TRUE 1

26 #define FALSE 0

27 

28 #define OK 1

29 #define FAIL 0

30 

31 #define    ESC_KEY        0x1b


uart.h


 1 #include "include.h"

 2 #include

 3 

 4 

 5 

 6 void Uart_Init(int baud)

 7 {

 8     int i;

 9     rUFCON0 = 0x0;   //UART channel 0 FIFO control register, FIFO disable

10   

11  

12 //UART0

13     rULCON0 &=0XFFFFFF00;

14     rULCON0 |=0X03;           //1位起始位,8位数据位

15     rUCON0  =0X0805;          //串口时钟PCLK,查询方式

16     rUBRDIV0 =0X1A;

17     for(i=0;i<100;i++);

18 }

19 

20 

21     

22 //=====================================================================

23 void Uart_SendByte(int data)

24 {

25    

26         if(data=='n')

27         {

28             while(!(rUTRSTAT0 & 0x2));

29            // Delay(1);                 //because the slow response of hyper_terminal 

30             WrUTXH0('r');

31         }

32         while(!(rUTRSTAT0 & 0x2));   //Wait until THR is empty.

33       //  Delay(1);

34         WrUTXH0(data);

35   

36    

37 }               

38 

39 //====================================================================

40 void Uart_SendString(S8 *pt)

41 {

42     while(*pt)

43         Uart_SendByte(*pt++);

44 }

45 

46 //=====================================================================

47 //If you don't use vsprintf(), the code size is reduced very much.

48 void Uart_Printf(S8 *fmt,...)

49 {

50     va_list ap;

51     S8 str[255];

52 

53     va_start(ap,fmt);

54        vsprintf(str,fmt,ap);

55     Uart_SendString(str);

56     va_end(ap);

57 }

58 

59 //=====================================================================

60 

61 /*

62 char Uart_GetKey(void)

63 {

64     

65         if(rUTRSTAT0 & 0x1)    //Receive data ready

66         return rURXH0 ;

67         else

68             return 0;

69  

70 }

71 */

 

main.c


#include"include.h"

#include "uart.h"


void Delay(int count)

{

    unsigned int i;                

    while (--count != 0)        

    {

        for (i=0; i<255; i++);        // ";" 表示空语句,CPU空转。

    }                   

}


void WuqiMain(void)

{

    char buf;

    

    GPBUP = 0x00; 

    GPBCON &= ~(1<<13);

    GPBCON |= (1<<12);

    GPBCON &= ~(1<<21);    

    GPBCON |= (1<<20);

    

    while(1)

    {

        GPBDAT &= ~(1<<6);

        GPBDAT &= 0xffe;

        

        if(rUTRSTAT0 & 0X01)  //接收是否完毕 =1结束

        {

            buf=rURXH0;       //读取数据

            while(!(rUTRSTAT0 & 0X04));//是否允许发送 =1允许

            rUTXH0=buf;

        }            

        if(buf=='1')

        {

            GPBDAT &= ~(1<<10);

            

        }    


    }

}

 

测试一下,vc6,file——new——projects——win32consoleApplication——a simple application


 1 #include "stdafx.h"

 2 #include

 3 #include

 4 

 5 

 6 int main(int argc, char* argv[])

 7 {

 8     char lpBuf[]="1";

 9     FILE * pFile=fopen("COM1","w");

10     if(pFile==NULL)

11     {

12         return 1;

13     }

14     fwrite(lpBuf,sizeof(char),strlen(lpBuf),pFile);

15     fclose(pFile);

16     return 0;


运行后开发板两个LED亮,也可用串口调试助手发送“1”来测试。

关键字:串口控制  FL2440  S3C2440  LED 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic481245.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:S3C2440串口通信基本功能的代码(注释+学习)
下一篇:用看门狗定时器做计时器,计算程序耗时,超声波测距,FL244

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

AVR驱动二相步进电机(单极驱动)简易程序,带串口控制
,0x90,0x50,0x60,0xa0,0x90,0x50,0x60          };//设置单片机IO口高低电平数据组,用以驱动步进电机的各相按需通电;uint const timer1dat[11]={36000,23000,13000,7000,4300,3000,2500,2100,1800,1700,0};//定时器1定时数据,用于控制电机的转速,定时越短转速越快;            uchar uartdat[4]={0,0,0,0}; //划出串行通信时所需的寄存器;uchar add,open,jslopen;void siansi
发表于 2019-11-23
单片机按键&串口控制步进电机正反转调速含程序和仿真
包含程序和仿真功能:按键或串口发送字符指令,控制步进电机正转、反转、停止、加速、减速动作仿真过程可直接通过按下电脑键盘控制仿真原理图如下单片机源程序如下:#include<reg52.h>#define uint  unsigned int#define uchar unsigned char//------8拍-----uchar code zz[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};                        //正转
发表于 2019-11-08
单片机按键&串口控制步进电机正反转调速含程序和仿真
ATmega16单片机蓝牙串口控制程序
;       for(j=1;j<=1332;j++);          } }/*串口初始化,波特率设置*/void uart_init(){         /*控制寄存器清零*/        UCSRB=0x00;        UCSRA=0x00;        /*异步模式,禁止奇偶校验,停止位为1位,数据位为8位*/   
发表于 2019-10-19
一种STM32的串口控制台的实现
一.背景曾经玩Linux时非常喜欢这种基于出串口的控制台, 通过简单的串口TX和RX能实现嵌入式硬件的人机交互,非常实用,  那么STM32能否实现通过超级终端与用户互动的构想呢? 答案是肯定的,由于这个UART控制平台就像应用程序套上一层可访问的外科(Shell)故而我将这种基于UART的控制平台简称Shell,构架和效果如下图:这张图箭头指向的是输入的指令,其余是STM32串口输出的信息,, 可以看到通过这些简单的指令输入我们通过Shell可以做很多事情:1. 现场设备发生故障,可以通过Shell可以查看设备的故障状态统计信息2. 能实现串口程序升级(需要Shell+IAP驱动程序支持)3. 能读写访问参数区,实现
发表于 2019-09-11
一种STM32的串口控制台的实现
串口控制LED点亮stm32中断 跑马灯
Interruptfor (uint8_t i = 1; i<9;i++) { led_matrix(i,1); HAL_Delay(50); } for (uint8_t i = 8; i>0;i--) { led_matrix(i,0); HAL_Delay(50); } while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */if (flag == 0x01){HAL_UART_Transmit(&huart1,aTxBuffer1,4,10); // 接收到数据马上使用串口1发送出去HAL_UART_Receive_IT(&
发表于 2019-09-10
用看门狗定时器做计时器,计算程序耗时,超声波测距,FL244
开发板:FL2440核心芯片:S3C2440(ARM9)超声波模块:HC-SR04超声波模块工作原理:共四个脚,VCC接5V,GND接地,Trig脚接芯片通过IO传出的高电平(持续时间不低于10微秒),之后Echo脚输出一段时间高电平,高电平持续时间即为超声波发出到接收到回波的间隔时间。主要是为了使用看门狗定时器来作计时器,来计算Echo脚返回的高电平持续时间,要将复位使能与中断使能关闭,然后给“狗”最大数值,持续一段时间后,用最大数值减去当前数值,就可得到消耗的数值,再乘以“狗”每次减数的时间间隔(通过设定预分频与分频因子来确定),就是消耗的时间。试验期间出现的重要错误:程序自动run后,消耗时间总是0,而采用AXD单步执行则可
发表于 2019-11-27
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved