- 积分
- 10
贡献48
飞刀8 FD
注册时间2018-2-6
在线时间4 小时
扫一扫,手机访问本帖
|
程序如下:
#include\"s3c2440.h\"
#include<stdio.h>
#include<stdarg.h>
char num=1;
void Uart_Init()
{
//ULCON0 &=0xffffff00;
//ULCON0 |=0x03;
//UCON0=0x0805;
ULCON0=0x03;
UCON0=0x245; //发送中断为电平方式,接收中断为边沿方式,禁止超时中断,允许产生错误状态中断,禁止回送模式,禁止中止
//信号,传输模式为中断请求模式,接收模式也为中断请求模式。
UFCON0=0x0;
UBRDIV0=0x1A;//((int)(400000000/16/baud+0.5)-1);//Baud rate is 115200
GPHUP=0X00;
GPHCON=(2<<6)|(2<<4); //选择TXD0 RXD0
}
//*************************
//发送单字节函数
//*************************
void Uart_SendByte(char data)
{
if(data==\'\\n\') //判断是否为回车
{
while(!(UTRSTAT0&0x2)); //等待发送数据,寄存器为空
UTXH0=\'\\r\';
}
while(!(UTRSTAT0&0x2)); //等待发送数据,寄存器为空
UTXH0=data;
}
//*************************
//接受单字节函数
//************************
char Uart_ReciveByte()
{
while(!(UTRSTAT0&0X01)); //等待接受数据
return URXH0; //返回寄存器中的数据
}
//**************************
//发送字符串函数
//**************************
void Uart_SendString(char *p)
{
while(*p)
Uart_SendByte(*p++);
}
//**************************
//打印函数
//**************************
void Uart_Printf(char *fmt,...)
{
va_list ap;
char str[255];
va_start(ap,fmt);
vsprintf(str,fmt,ap);
Uart_SendString(str);
va_end(ap);
}
void LED_Init()
{
GPBCON|=((1<<10)|(1<<12)|(1<<16)|(1<<20));
//GPBCON = 0x1dd7fc;
GPBDAT=((1<<5)|(1<<6)|(1<<8)|(1<<10));
GPBUP=0x00; //禁止上拉
}
void LED_Light(int n)
{
Uart_Init();
LED_Init();
switch(n)
{
case 1:GPBDAT=~(1<<5);
break;
case 2:GPBDAT=~(1<<6);
break;
case 3:GPBDAT=~(1<<8);
break;
case 4:GPBDAT=~(1<<10);
break;
default:GPBDAT=((1<<5)|(1<<6)|(1<<8)|(1<<10));
}
if(n<5)
Uart_Printf(\"nuber %d is lighting\\n\",n);
else
Uart_Printf(\"none!\\n\");
}
int main()
{
Uart_Init();
LED_Init();
while(1)
{
Uart_Printf(\"Please enter which light:\\n\");
num=Uart_ReciveByte();
LED_Light(num);
}
return 0;
}
在思路上是通过串口接收到所需要点亮的灯号,从而点亮。用ADS仿真的时候卡在了刚进入main函数位置。难道是初始化的问题?求大神解答。两个初始化函数分别测试过没有问题。
|
|