这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 怎么最快将DI数据赋给DO

共1条 1/1 1 跳转至

怎么最快将DI数据赋给DO

高工
2023-08-21 09:00:16     打赏

问题:DI口输入一组400*24bit的数据,如何使用单片机实现:前40*24bit的数据不接收,剩下的数据全部转给DO口输出,并保证输出数据的准确性,不乱码。输入数据0码高电平时间为300ns左右。

已尝试方法:
使用单片机型号为STC15W105


#include /**
  * @Brief  IO口初始化
  * @param  null
  * @retval null
  */
***it DI = P3^2;
***it DO = P3^3;
void IO_Init(void)
{
        P3M0 |= 0x08;        //P33设置成推挽输出
        P3M1 &= 0xF7;
       
        P3M1 |= 0x04;        //P32设置成高阻输入
        P3M0 &= 0xFB;
        DO=0;


        //把P32脚设置为下降沿触发方式
        //P32是外部中断0输入脚
        IT0 = 1;        //外部中断0触发方式,=1下降沿触发,=0双边沿触发
        EX0 = 1;        //允许外部中断0中断
}


bit flag;
unsigned int count;//定时器计数值


/*void timer0Init(void)                //300微秒@33.1776MHz
{
        AUXR &= 0x7F;                //定时器时钟12T模式
        TMOD &= 0xF0;                //设置定时器模式
        TL0 = 0xC3;                //设置定时初值
        TH0 = 0xFC;                //设置定时初值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;                //定时器0开始计时
}
*/




void main(void)
{
       
        count=0;
        IO_Init();    //初始化
        EA = 1;       //开中断
        while(1)
        {
         if(flag)     //当过了20*24bit之后,输出等于输入
         {
                 DO = DI;
         }       
                ;
  }
}
       
       
void Int0_Routine(void)   interrupt 0  //外部中断0服务函数
        {
                if(DI ==1)
                {
                        DO =1;
                }
                else
                {
                        DO=0;
                }
                if(count<960)
                {
                count++;
                }else
                {
                        flag=1;
                }
                TR0=0;
                Timer0Init();      //计时300us则复位   
        }
       


void Timer0_Routine(void)   interrupt 1  //定时器0中断服务函数
        {
                count = 0;
                flag=0;
        }       
发现处理速度过慢,导致输出数据0码高电平时间达到us级,全被判为1码
尝试过不进行计数,直接将DO=DI,使DI口所有数据全部转发,发现一部分0码数据的高电平时间仍达到了600ns,导致乱码。

希望有大佬能帮忙解答




关键词: DI     DO    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]