8ビットマシンは255を超える16ビットの数字をどのように表示しますか?


背景
今日コードを書くには、データの送信回数を表示する必要があります.回数が増加し、最大数万回になる可能性があります.しかし、テストで数字が255になるとゼロから表示されます.明らかにデータが境界を越えている.実はこの問題はよく解決されていて、主にデータ型変換でいいです.しかし、8ビットマシンに遭遇し、デバイスが提供するインタフェース関数のうち、データのタイプが8ビット整形しかない場合は、どうすればいいですか?今日出会ったように.
解決する
デバイスは現実的なデータのインタフェース関数を提供します:void _putstr(U8 *p);その入力は8ビットの整数型しかなくて、つまり255より大きい数字は正確に表示することができなくて、これはいくつかの数字の変換をする必要があります.例えば、表示すべき数字は65535であり、655351001に分割して表示することができる.1001に分割されて表示される場合.
コード実装は次のとおりです.
void Show16data( U8 line,U8 n,U16 data )
{
    char num_temp[1];
    U8 dataH,dataM,dataL;
    _gotoxy(n,line);

    if (data >= 10000)
    {
        dataH =(U8)(data / 1000);
        dataM = (U8)((data%1000)/10);
        dataL = (U8)(data%10);

        sprintf(num_temp,"%02d",dataH); 
        //                   %02d      20011       200112011
        _putstr(num_temp);  
        sprintf(num_temp,"%02d",dataM);
        _putstr(num_temp);          
        sprintf(num_temp,"%1d",dataL); //       %1d   
        _putstr(num_temp);  
    }
    else if (data >= 1000)
    {
        dataH =(U8)(data / 100);
        dataL = (U8)(data%100);
        sprintf(num_temp,"%02d",dataH);
        _putstr(num_temp);          
        sprintf(num_temp,"%02d",dataL);
        _putstr(num_temp);  
    }
    else if (data >= 100)
    {
        dataH =(U8)(data / 10);
        dataL = (U8)(data%10);
        sprintf(num_temp,"%02d",dataH);
        _putstr(num_temp);          
        sprintf(num_temp,"%1d",dataL);
        _putstr(num_temp);  
    }
    else
    {
        sprintf(num_temp,"%02d",data);
        _putstr(num_temp);  
    }
}

また、デジタル分割後は強制データ変換を加えたほうがよいことに注意してください.dataH =(U8)(data / 100);