本帖最后由 xmuac 于 2014-9-14 12:05 编辑
串口中断服务程序内容如下:
#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
if(key==1) //输入字符串1
{
LED8= 0X01; //灭最末端一个灯,用来指示该中断的执行情况
number[count1]=U0RXBUF;
count1++;
if(count1==8) key=0xff;
}
if(key==2) //输入字符串2
{
LED8=0x02; //灭倒数第二个灯
life
time[count2]=U0RXBUF;
count2++;
if(count2==8) key=0xff;
}
if(key==3) //输入字符串3
{
LED8=0x04; //灭倒数第三个灯
colour[count3]=U0RXBUF;
count3++;
if(count3==8) key=0xff;
}
}
其中的key是按键的值,测试中能正确获得。
程序中还有一个10毫秒的定时中断,用来实现定期的字符串输出(从串口输出)
对应的主程序如下:
void main(void){
WDT_Init(); //看门狗设置
Clock_Init(); //系统时钟设置
UART_Init(); //串口设置初始化
Port_init();
TIMERA_Init();
delay_ms(10);
_EINT(); //开中断
while(1) //无限循环
{
Key_Scan(); //用来选择输入哪个字符串(用来获得key的值)
if(Time%40==0) //定时器,40秒为一个周期,输出下面的东西。
{
Flag=1;
Time=1;
}
while(Flag)
{
Flag=0;
Print_Str("ID:");
Print_Str(number); //字符串1
Send_Byte('
');
Print_Str("number:");
Print_Str(lifetime); //字符串2
Send_Byte('
');
Print_Str("colour:");
Print_Str(colour); //字符串3
Send_Byte('
');
}
}
}
我的操作步骤及现象:
按下按键S1,得到正确的现象,接着输入字符串1,点击发送,亮灯现象也正确。按下按键S2,亮灯现象正确,接着在串口调试助手中输入字符串2,点击发送,此时没能得到正确的亮灯现象。接着按下S3,亮灯现象正确,接着在串口调试助手中输入字符串3,点击发送,此时也没能得到正确的亮灯现象。等到规定的时间到来(40s),从串口打印出以串数字,同时亮起了输入字符串3时该有的现象(延迟了),打印出的内容如下所示:
D:chenshen
number:
colour:green
我的问题:
1.连续输入时,为什么第二、第三个字符串的发送得不到正确的亮灯现象(保证LED没有坏)?
2.打印出的内容中,第二个字符串没有对应的东西,应该是第二个字符串没有被正确输入保存,这会是什么原因?
3.第一行的输出应该是ID:chenshen,为什么显示的是D:chenshen. 少了一个字母I.
4.第二次输出(第二个40s)时,就不会出现问题3. 第一次和第二次输出为什么会不一样?
谢谢!
还有你的三个count初始化都清0了吗,而且应该在收到8个数字后也要清0.要不下次再接收肯定又不对了
然后,你的3个字符串能在40秒内完成吗?要是完不了到时候输出字符串的时候肯定有问题了
一周热门 更多>