首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么MTK只显示'F‘

为什么MTK只显示'F‘
EN

Stack Overflow用户
提问于 2012-05-15 14:09:56
回答 1查看 155关注 0票数 0

我的程序会将红外信号作为'0‘或'1’存储到DS89C450的扩展数据1kByte SRAM中,然后在我的MTK上显示它。

然而,无论我按下红外遥控器上的哪个按钮,显示的数据都只显示字符'F‘。(我有一个将数据转换为ASCII代码的CASE函数,在这种情况下,'F’= 0x0F)。http://img193.imageshack.us/img193/1410/66647882.png

首先:当接收到IR信号时,下降沿中断将每隔38us触发并存储从引脚到xi的每个数据,并将Data_Ready设置为1。

代码语言:javascript
复制
/******************************FALLING EDGE INTERRUPT*************************/
void ex_int0(void)interrupt 0     
{
       unsigned char p;
       unsigned int u;
       unsigned int i;
       EA=0;

       for(i=0;i<500;i++)       //Loop for 500 bytes
       {
          for(u=0;u<8;u++)      //Bit Shift Loop
          { 
             timer0();          //Call timer0 function(38us)    
             x[i] = x[i] << 1;  //Left Bit Shift by 1
             p = Tsignal;       //Store Tsignal to Buffer p
             x[i] |= p;         //OR Masking of p with x[i]

          } 
       }

   EA=1;
   IE1 = 0;              
   Data_Ready = 1;             //Set Data_Ready = 1

 }//end 

接下来,存储数据将被逐字节转换为ASCII码。(例如,1111 1111 = FF)

代码语言:javascript
复制
/******************************DISPLAY_BYTE***********************************/
void Display_Byte()
{
   unsigned char Data_LK;
   unsigned char MSB;
   unsigned char LSB;
   unsigned int v;  
   TR1=1;                          //Enable Serial Port                                              
   for(v=0;v<500;v++)
   {    
      Data_LK = x[v];                      //Store x[v] in Data_LK
      MSB = Data_LK >> 4;                  //Shift Right Bits by 4      
      MSB &= 0x0F;                         //Mask bits of MSB
      MSB = lookuptable(MSB);              //Send MSB to lookuptable function                           
      SerialTx(MSB);                       //Send Converted Data to transmit

      LSB = x[v];                          //Store x[v] in LSB
      LSB &= 0x0F;                         //Mask bits of LSB
      LSB = lookuptable(LSB);              //Send LSB to lookuptable 
      SerialTx(LSB);                       //Send converted data to transmit
   }

   Data_Ready = 0;                         //Set Data_Ready to 0
   TR1 = 0;                                //Turn off Serial Port   
}

这是可查找的:

代码语言:javascript
复制
/***********************LOOKUP TABLE*************************************/
unsigned char lookuptable(unsigned char t)
{
  switch(t)
  {
     case 0x00 : return '0';
     break;
     case 0x01 : return '1';
     break;
     case 0x02 : return '2';
     break;
     case 0x03 : return '3';
     break;
     case 0x04 : return '4';
     break;
     case 0x05 : return '5';
     break;
     case 0x06 : return '6';
     break;
     case 0x07 : return '7';
     break;
     case 0x08 : return '8';
     break;
     case 0x09 : return '9';
     break;
     case 0x0A : return 'A';
     break;
     case 0x0B : return 'B';
     break;
     case 0x0C : return 'C';
     break;
     case 0x0D : return 'D';
     break;
     case 0x0E : return 'E';
     break;
     case 0x0F : return 'F';
     break;
     default: break;
 }// end switch
}// end function
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-15 18:52:37

至少有一个错误是,您没有对lookuptable()调用的结果做任何处理,所以您传输的是未转换的MSB和LSB值。

你可能想做这样的事情:

代码语言:javascript
复制
MSB = lookuptable(MSB);
SerialTx(MSB);
/* ... etc ... */
LSB = lookuptable(LSB);
SerialTx(LSB);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10595032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档