单片机指令为什么分单、双、三字节?

单片机指令为什么分单、双、三字节?单字节为什么只有49条?双字节为什么只有46条?

有些指令一个字节就能实现,有的指令要两个或3个字节才可能实现,当然就有不同长度的指令了。每种长度的指令具体多少条,取决于实际需要

计算机语言也是一种语言,唯一的区别是它用来和计算机对话
自然语言也分但字的句子,双字的词语,四字成语,这哪来那么多为什么

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7502546
  • 这篇博客也不错, 你可以看下【按键】短按,长按,按键释放,三种模式的按键扫描程序(软件消抖动)--- 矩阵键盘
  • 除此之外, 这篇博客: 51单片机按键的三种设计分析,即含按键消抖使用状态机法与延时方法、按键的按下松开设计以及按键的长按短按设计中的 三、按键的按下与松开 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 按键设计函数

    unsigned char key_read(){
    	unsigned int key_new;
    	unsigned char key_val;
    	
    	P44 = 0;P42 = 1;P35 = 1;P34 = 1;
    	key_new = P3;
    	P44 = 1;P42 = 0;
    	key_new = (key_new<<4)|(P3&0x0f);
    	P42 = 1;P35 = 0;
    	key_new = (key_new<<4)|(P3&0x0f);
    	P35 = 1;P34 = 0;
    	key_new = (key_new<<4)|(P3&0x0f);
    	switch(~key_new){
    		case 0x8000: key_val = 4;break;
    		case 0x4000: key_val = 5;break;
    		case 0x2000: key_val = 6;break;
    		case 0x1000: key_val = 7;break;
    		case 0x0800: key_val = 8;break;
    		case 0x0400: key_val = 9;break;
    		case 0x0200: key_val = 10;break;
    		case 0x0100: key_val = 11;break;
    		case 0x0080: key_val = 12;break;
    		case 0x0040: key_val = 13;break;
    		case 0x0020: key_val = 14;break;
    		case 0x0010: key_val = 15;break;
    		case 0x0008: key_val = 16;break;
    		case 0x0004: key_val = 17;break;
    		case 0x0002: key_val = 18;break;
    		case 0x0001: key_val = 19;break;
    		default:key_val = 0;break;
    	}
    	return key_val;
    }
    

    使用示例:

    		key_num = key_read();//获取按键的值
    		key_down = key_num & (key_old ^ key_num);//获取按键是否按下
    		key_up = ~key_num & (key_old ^ key_num);//获取按键是否松开
    		key_old = key_num;//保存本次按键的值
    

    设计思路
    1.获取按键的值;
    2.通过本次按键值跟上次按键的值进行与、异或运算得到按键按下与松开的状态;
    3.保存本次按键的值;

  • 您还可以看一下 程媛媛老师的期货量化交易麦语言编程初级课程中的 跨周期三屏交易系统小节, 巩固相关知识点