msp430g2553单片机学习心得

发布者:Lianai最新更新时间:2017-09-08 来源: eefocus关键字:msp430g2553  单片机  学习心得 手机看文章 扫描二维码
随时随地手机看文章

四年前学习的TI的Msp430g2553这款单片机,最近在整理学习记录的时候把当时的学习心得重新写下来。学习单片机最早是学习的51系列的,看的也是广为推崇的郭天祥郭老师的《十天学习单片机》,个人觉得单片机学习还是最先攻克51的。学习好51之后,对单片机操作有了基本的认识,再学习其他款单片机自然是能融会贯通。

TI的430系列主打是低功耗,它的技术文档和Dome程序都非常详细,尤其是技术文档真让人有种膜拜的感觉,在每个模块的时候还有个框图,对理解模块内设置非常有帮助,我当时还特意打印了。当时它的User's Guide还没有中文版,如果实在看不懂,可以借鉴F149系列的(这款有人翻译了中文版本)。


个人觉得在学习g2553这款单片机中,主要注意的点:

(1)注意低功耗的使用,选用不同的模式。

(2)IO的设置,由于IO口比较少,复用的比较严重,当时 一直纠结IO口的REN与OUT,DIR的问题,下面这个表概括详细,总结I/O 口配置时PxDIRx、PxRENx和PxOUTx寄存器的用法 
                                                                  
 PxDIRx          PxRENx       PxOUTx       I/O 口配置  
                 0                0                 x                输入   
                 0                1                 0               置低 
                 0                1                 1               置高 
                 1                x                 x                输出

其他具体的由于当时的笔记找不到,就不能一一说明了。

下面是比较实用的G2553框架程序:


  1. #include   

  2.   

  3. //函数声明   

  4. void InitSys();   

  5.   

  6.   

  7. int main( void )   

  8. {   

  9.        

  10.      WDTCTL = WDTPW + WDTHOLD; //关闭看门狗   

  11.        

  12.      InitSys(); //初始化   

  13.        

  14.      start:   

  15.      //以下填充用户代码   

  16.        

  17.        

  18.      LPM3; //进入低功耗模式n,n:0~4。若不希望进入低功耗模式,屏蔽本句   

  19.      goto start;   

  20.        

  21. }   

  22.   

  23. /*****************************************************************************  

  24. 系统初始化  

  25. ******************************************************************************/   

  26. void InitSys()   

  27. {   

  28.      unsigned int iq0;   

  29.        

  30.      //使用XT2振荡器   

  31.      BCSCTL1&=~XT2OFF; //打开XT2振荡器   

  32.      do   

  33.      {   

  34.            IFG1 &= ~OFIFG; // 清除振荡器失效标志   

  35.            for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振   

  36.      }   

  37.      while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振   

  38.        

  39.      BCSCTL2 =SELM_2+SELS; //选择MCLK、SMCLK为XT2   

  40.        

  41.      //以下填充用户代码,对各种模块、中断、外围设备等进行初始化   

  42.        

  43.      _EINT(); //打开全局中断控制,若不需要打开,可以屏蔽本句   

  44. }   

  45.   

  46. /*****************************************************************************  

  47. 端口2中断函数  

  48. ******************************************************************************/   

  49. #pragma vector=PORT2_VECTOR   

  50. __interrupt void Port2()   

  51. {   

  52.      //以下为参考处理程序,不使用的端口应当删除其对于中断源的判断。   

  53.      if((P2IFG&BIT0) == BIT0)   

  54.      {   

  55.            //处理P2IN.0中断   

  56.            P2IFG &= ~BIT0; //清除中断标志   

  57.            //以下填充用户代码   

  58.              

  59.      }   

  60.      else if((P2IFG&BIT1) ==BIT1)   

  61.      {   

  62.            //处理P2IN.1中断   

  63.            P2IFG &= ~BIT1; //清除中断标志   

  64.            //以下填充用户代码   

  65.              

  66.      }   

  67.      else if((P2IFG&BIT2) ==BIT2)   

  68.      {   

  69.            //处理P2IN.2中断   

  70.            P2IFG &= ~BIT2; //清除中断标志   

  71.            //以下填充用户代码   

  72.              

  73.      }   

  74.      else if((P2IFG&BIT3) ==BIT3)   

  75.      {   

  76.            //处理P2IN.3中断   

  77.            P2IFG &= ~BIT3; //清除中断标志   

  78.            //以下填充用户代码   

  79.              

  80.      }   

  81.      else if((P2IFG&BIT4) ==BIT4)   

  82.      {   

  83.            //处理P2IN.4中断   

  84.            P2IFG &= ~BIT4; //清除中断标志   

  85.            //以下填充用户代码   

  86.              

  87.      }   

  88.      else if((P2IFG&BIT5) ==BIT5)   

  89.      {   

  90.            //处理P2IN.5中断   

  91.            P2IFG &= ~BIT5; //清除中断标志   

  92.            //以下填充用户代码   

  93.              

  94.      }   

  95.      else if((P2IFG&BIT6) ==BIT6)   

  96.      {   

  97.            //处理P2IN.6中断   

  98.            P2IFG &= ~BIT6; //清除中断标志   

  99.            //以下填充用户代码   

  100.              

  101.      }   

  102.      else   

  103.      {   

  104.            //处理P2IN.7中断   

  105.            P2IFG &= ~BIT7; //清除中断标志   

  106.            //以下填充用户代码   

  107.              

  108.      }   

  109.        

  110.      LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽   

  111. }   

  112.   

  113. /*****************************************************************************  

  114. USART1发送中断函数  

  115. ******************************************************************************/   

  116. #pragma vector=USART1TX_VECTOR   

  117. __interrupt void Usart1Tx()   

  118. {   

  119.      //以下填充用户代码   

  120.        

  121.        

  122.      LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽   

  123. }   

  124.   

  125. /*****************************************************************************  

  126. USART1接收中断函数  

  127. ******************************************************************************/   

  128. #pragma vector=USART1RX_VECTOR   

  129. __interrupt void Ustra1Rx()   

  130. {   

  131.      //以下填充用户代码   

  132.        

  133.        

  134.      LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽   

  135. }   

  136.   

  137. /*****************************************************************************  

  138. 端口1中断函数  

  139. 多中断中断源:P1IFG.0~P1IFG7  

  140. 进入中断后应首先判断中断源,退出中断前应清除中断标志,否则将再次引发中断  

  141. ******************************************************************************/   

  142. #pragma vector=PORT1_VECTOR   

  143. __interrupt void Port1()   

  144. {   

  145.      //以下为参考处理程序,不使用的端口应当删除其对于中断源的判断。   

  146.      if((P1IFG&BIT0) == BIT0)   

  147.      {   

  148.            //处理P1IN.0中断   

  149.            P1IFG &= ~BIT0; //清除中断标志   

  150.            //以下填充用户代码   

  151.              

  152.      }   

  153.      else if((P1IFG&BIT1) ==BIT1)   

  154.      {   

  155.            //处理P1IN.1中断   

  156.            P1IFG &= ~BIT1; //清除中断标志   

  157.            //以下填充用户代码   

  158.              

  159.      }   

  160.      else if((P1IFG&BIT2) ==BIT2)   

  161.      {   

  162.            //处理P1IN.2中断   

  163.            P1IFG &= ~BIT2; //清除中断标志   

  164.            //以下填充用户代码   

  165.              

  166.      }   

  167.      else if((P1IFG&BIT3) ==BIT3)   

  168.      {   

  169.            //处理P1IN.3中断   

  170.            P1IFG &= ~BIT3; //清除中断标志   

  171.            //以下填充用户代码   

  172.              

  173.      }   

  174.      else if((P1IFG&BIT4) ==BIT4)   

  175.      {   

  176.            //处理P1IN.4中断   

  177.            P1IFG &= ~BIT4; //清除中断标志   

  178.            //以下填充用户代码   

  179.              

  180.      }   

  181.      else if((P1IFG&BIT5) ==BIT5)   

  182.      {   

  183.            //处理P1IN.5中断   

  184.            P1IFG &= ~BIT5; //清除中断标志   

  185.            //以下填充用户代码   

  186.              

  187.      }   

  188.      else if((P1IFG&BIT6) ==BIT6)   

  189.      {   

  190.            //处理P1IN.6中断   

  191.            P1IFG &= ~BIT6; //清除中断标志   

  192.            //以下填充用户代码   

  193.              

  194.      }   

  195.      else   

  196.      {   

  197.            //处理P1IN.7中断   

  198.            P1IFG &= ~BIT7; //清除中断标志   

  199.            //以下填充用户代码   

  200.              

  201.      }   

  202.        

  203.      LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽   

  204. }   

  205.   

  206. /*****************************************************************************  

  207. 定时器A中断函数  

  208. 多中断中断源:CC1~2 TA  

  209. ******************************************************************************/   

  210. #pragma vector=TIMERA1_VECTOR   

  211. __interrupt void TimerA1()   

  212. {   

  213.      //以下为参考处理程序,不使用的中断源应当删除   

  214.      switch (__even_in_range(TAIV, 10))   

  215.      {   

  216.      case 2:   

  217.            //捕获/比较1中断   

  218.            //以下填充用户代码   

  219.              

  220.            break;   

  221.      case 4:   

  222.            //捕获/比较2中断   

  223.            //以下填充用户代码   

  224.              

  225.            break;   

  226.      case 10:   

  227.            //TAIFG定时器溢出中断   

  228.            //以下填充用户代码   

  229.              

  230.            break;   

  231.      }   

  232.        

  233.        

  234.      LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽   

  235. }   

  236.   

  237. /*****************************************************************************  

  238. 定时器A中断函数  

  239. 中断源:CC0  

  240. ******************************************************************************/   

  241. #pragma vector=TIMERA0_VECTOR   

  242. __interrupt void TimerA0()   

  243. {   

  244.      //以下填充用户代码   

  245.        

  246.        

  247.      LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽   

  248. }   

  249.   

  250. /*****************************************************************************  

  251. AD转换器中断函数  

  252. 多中断源:摸拟0~7、VeREF+、VREF-/VeREF-、(AVcc-AVss)/2  

  253. 没有处理ADC12TOV和ADC12OV中断标志  

  254. ******************************************************************************/   

  255. #pragma vector=ADC_VECTOR   

  256. __interrupt void Adc()   

  257. {   

  258.      //以下为参考处理程序,不使用的中断源应当删除   

  259.      if((ADC12IFG&BIT0)==BIT0)   

  260.      {   

  261.            //通道0   

  262.            //以下填充用户代码   

  263.              

  264.      }   

  265.      else if((ADC12IFG&BIT1)==BIT1)   

  266.      {   

  267.            //通道1   

  268.            //以下填充用户代码   

  269.              

  270.      }   

  271.      else if((ADC12IFG&BIT2)==BIT2)   

  272.      {   

  273.            //通道2   

  274.            //以下填充用户代码   

  275.              

  276.      }   

  277.      else if((ADC12IFG&BIT3)==BIT3)   

  278.      {   

  279.            //通道3   

  280.            //以下填充用户代码   

  281.              

  282.      }   

  283.      else if((ADC12IFG&BIT4)==BIT4)   

  284.      {   

  285.            //通道4   

  286.            //以下填充用户代码   

  287.              

  288.      }   

  289.      else if((ADC12IFG&BIT5)==BIT5)   

  290.      {   

  291.            //通道5   

  292.            //以下填充用户代码   

  293.              

  294.      }   

  295.      else if((ADC12IFG&BIT6)==BIT6)   

  296.      {   

  297.            //通道6   

  298.            //以下填充用户代码   

  299.              

  300.      }   

  301.      else if((ADC12IFG&BIT7)==BIT7)   

  302.      {   

  303.            //通道7   

  304.            //以下填充用户代码   

  305.              

  306.      }   

  307.      else if((ADC12IFG&BIT8)==BIT8)   

  308.      {   

  309.            //VeREF+   

  310.            //以下填充用户代码   

  311.              

  312.      }   

  313.      else if((ADC12IFG&BIT9)==BIT9)   

  314.      {   

  315.            //VREF-/VeREF-   

  316.            //以下填充用户代码   

  317.              

  318.      }   

  319.      else if((ADC12IFG&BITA)==BITA)   

  320.      {   

  321.            //温度   

  322.            //以下填充用户代码   

  323.              

  324.      }   

  325.      else if((ADC12IFG&BITB)==BITB)   

  326.      {   

  327.            //(AVcc-AVss)/2   

  328.            //以下填充用户代码   

  329.              

  330.      }   

  331.        

  332.      LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽   

  333. }   

  334.   

  335. /*****************************************************************************  

  336. USART0发送中断函数  

  337. ******************************************************************************/   

  338. #pragma vector=USART0TX_VECTOR   

  339. __interrupt void Usart0Tx()   

  340. {   

  341.      //以下填充用户代码   

  342.        

  343.        

  344.      LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽   

  345. }   

  346.   

  347. /*****************************************************************************  

  348. USART0接收中断函数  

  349. ******************************************************************************/   

  350. #pragma vector=USART0RX_VECTOR   

  351. __interrupt void Usart0Rx()   

  352. {   

  353.      //以下填充用户代码   

  354.        

  355.        

  356.      LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽   

  357. }   

  358.   

  359. /*****************************************************************************  

  360. 看门狗定时器中断函数  

  361. ******************************************************************************/   

  362. #pragma vector=WDT_VECTOR   

  363. __interrupt void WatchDog()   

  364. {   

  365.      //以下填充用户代码   

  366.        

  367.        

  368.      LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽   

  369. }   

  370.   

  371. /*****************************************************************************  

  372. 比较器A中断函数  

  373. ******************************************************************************/   

  374. #pragma vector=COMPARATORA_VECTOR   

  375. __interrupt void ComparatorA()   

  376. {   

  377.      //以下填充用户代码   

  378.        

  379.        

  380.      LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽   

  381. }   

  382.   

  383. /*****************************************************************************  

  384. 定时器B中断函数  

  385. 多中断源:CC1~6 TB  

  386. ******************************************************************************/   

  387. #pragma vector=TIMERB1_VECTOR   

  388. __interrupt void TimerB1()   

  389. {   

  390.      //以下为参考处理程序,不使用的中断源应当删除   

  391.      switch (__even_in_range(TBIV, 14))   

  392.      {   

  393.      case 2:   

  394.            //捕获/比较1中断   

  395.            //以下填充用户代码   

  396.              

  397.            break;   

  398.      case 4:   

  399.            //捕获/比较2中断   

  400.            //以下填充用户代码   

  401.              

  402.            break;   

  403.      case 6:   

  404.            //捕获/比较3中断   

  405.            //以下填充用户代码   

  406.              

  407.            break;   

  408.      case 8:   

  409.            //捕获/比较4中断   

  410.            //以下填充用户代码   

  411.              

  412.            break;   

  413.      case 10:   

  414.            //捕获/比较5中断   

  415.            //以下填充用户代码   

  416.              

  417.            break;   

  418.      case 12:   

  419.            //捕获/比较6中断   

  420.            //以下填充用户代码   

  421.              

  422.            break;   

  423.      case 14:   

  424.            //TBIFG定时器溢出中断   

  425.            //以下填充用户代码   

  426.              

  427.            break;   

  428.      }   

  429.        

  430.      LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽   

  431. }   

  432.   

  433. /*****************************************************************************  

  434. 定时器B中断函数  

  435. 中断源:CC0  

  436. ******************************************************************************/   

  437. #pragma vector=TIMERB0_VECTOR   

  438. __interrupt void TimerB0()   

  439. {   

  440.      //以下填充用户代码   

  441.        

  442.      LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽   

  443. }   

  444.   

  445. /*****************************************************************************  

  446. 不可屏蔽中断函数  

  447. ******************************************************************************/   

  448. #pragma vector=NMI_VECTOR   

  449. __interrupt void Nmi()   

  450. {   

  451.      //以下为参考处理程序,不使用的中断源应当删除   

  452.      if((IFG1&OFIFG)==OFIFG)   

  453.      {   

  454.            //振荡器失效   

  455.            IFG1 &= ~OFIFG;   

  456.            //以下填充用户代码   

  457.              

  458.      }   

  459.      else if((IFG1&NMIIFG)==NMIIFG)   

  460.      {   

  461.            //RST/NMI不可屏蔽中断   

  462.            IFG1 &= ~NMIIFG;   

  463.            //以下填充用户代码   

  464.              

  465.      }   

  466.      else //if((FCTL3&ACCVIFG)==ACCVIFG)   

  467.      {   

  468.            //存储器非法访问   

  469.            FCTL3 &= ~ACCVIFG;   

  470.            //以下填充用户代码   

  471.              

  472.      }   

  473.        

  474.      LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽   

  475. }   

  476.   

  477. /*****************************************************************************  

  478. 基本定时器中断函数  

  479. ******************************************************************************/   

  480. #pragma vector=BASICTIMER_VECTOR   

  481. __interrupt void BasTimer()   

  482. {   

  483.      //以下填充用户代码   

  484.        

  485.      LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽   

  486. }  

时延函数(注意选择时钟)


  1. //1us延时函数  

  2. void delay_1us(void) {  

  3.         asm("nop");  

  4. }  

  5. //N us延时函数  

  6. void delay_nus(unsigned int n) {  

  7.         unsigned int i;  

  8.         for (i = 0; i < n; i++)  

  9.                 delay_1us();  

  10. }  

  11. //1ms延时函数  

  12. void delay_1ms(void) {  

  13.         unsigned int i;  

  14.         for (i = 0; i < 1140; i++)  

  15.                 ;  

  16. }  

  17. //N ms延时函数  

  18. void delay_nms(unsigned int n) {  

  19.         unsigned int i = 0;  

  20.         for (i = 0; i < n; i++)  

  21.                 delay_1ms();  

  22. }   



关键字:msp430g2553  单片机  学习心得 引用地址:msp430g2553单片机学习心得

上一篇:单片机上电后内部发生的事情
下一篇:MSP430F449的时钟问题

推荐阅读最新更新时间:2024-03-16 15:36

用PIC MCU测量相对湿度
如图所示,用一个具有容性响应的传感器和一只PIC微控制器(MCU)就可以构成一个相对湿度计。 其中Humirel公司提供的HS1101型传感器的电容取值范围为162 ~202pF。 使用一个TLC555 CMOS 定时器作为振荡器,完成从电容到频率的转换,定时器的频率等式如下:F = 1.44/(RA + 2RB)×CX这里电阻RA和RB分别等于421 kΩ和42.4 kΩ,CX为传感器电容。接到定时器控制电压输入端的1MΩ电阻用来使与传感器温度系数相匹配的定时器内部温度系数失衡。 MCU测量输入信号周期,并将其转换为相对湿度数字读数。这通过MCU内部计数器(TMR1)和捕获/比较/脉宽调制模块(CCP
[单片机]
用PIC <font color='red'>MCU</font>测量相对湿度
单片机典型论文竞赛题精华集锦(三)
单片机论文五 简易无线电遥控系统   一、任务   设计并制作无线电遥控发射机和接收机。   1.无线电遥控发射机      2.无线电遥控接收机      二、要求   1.基本要求   (1)工作频率:fo=6~10MHz中任选一种频率。   (2)调制方式:AM、FM或FSK……任选一种。   (3)输出功率:不大于20mW(在标准75Ω假负载上)。   (4)遥控对象:8个,被控设备用LED分别代替,LED发光表示工作。   (5)接收机距离发射机不小于10m。   2.发挥部分   (1)8路设备中的一路为电灯,用指令遥控电灯亮度,亮度分为8级并用数码管显示级数。   (2)在一定发射功率
[模拟电子]
<font color='red'>单片机</font>典型论文竞赛题精华集锦(三)
单片机波形发生器源码
程序源码 #include reg51.h #include intrins.h #include math.h #define uchar unsigned char #define uint unsigned int unsigned long Result,i; sbit SDA=P1^1; //PCF8591 接口 sbit SCL=P1^0; unsigned int a=0; // 波形采样点值 unsigned int b=0; unsigned int c=0; unsigned int bx_chang=0; unsigned int n=40; // 频率计算值 unsigned c
[单片机]
<font color='red'>单片机</font>波形发生器源码
基于8250的多机通信设计
实现串行通信的方法很多,例如可以根据通信协议的要求,用编写程序的方法完成串行通信中数据字符的接收和发送,但这种方法比较麻烦;为了快速、简便、有效的实现串行通信,PC系列及其兼容机都可以采用一个可编程异步串行通信接口芯片来执行异步串行通信协议。这种异步通信接口芯片的核心是一个大规模集成通信组件,称为通用异步接收/发送器,或简称UART(Universal Asynchronous Receiver/Transmitter)。 1﹒ 8051实现多机通信原理 8051串行通信相关的三个控制寄存器SCON(Serial Controller)、PCON(Power Controller)和IE(Interrupted Enhance
[单片机]
TNY256型单片机开关电源及其应用
摘要:单片开关电源具有性价比高、外围电路简单、效率高、功耗低等显著特点,文中介绍了TNY256的性能特点、工作原理,并给出了TNY256的典型应用电路。 关键词:单片开关电源 TNY256 自动重启计数器 功率MOSFET 1 TNY256的性能特点 %26;#183;内置自动重启电路,不需外接元件,一旦发生输出短路或控制环开路故障,可将占空比降低以保护芯片。 %26;#183;在输入直流高压电路中,不需要使用瞬态电压抑制器构成的钳位保护电路,仅用简单的RC吸收回路即可衰减视频噪声。 %26;#183;输入欠压检测电路仅需外接1只电阻,目的是在上电时将片内的功率MOSFET关断,直到直流输入电压VI达到欠压保护门限电压
[单片机]
采用单片机PICl2F508控制的CJ系列交流接触器的节电器
  CJ系列交流接触器以价格便宜及使用寿命长的优势,广泛应用于低压配电,但在运行当中电能损耗大,噪音大,并且经常烧毁线圈。本文针对交流接触器运行噪声大,耗电高,线圈铁心运行温度高,易烧毁的难题,设计了一款适合CJ系列交流接触器的节电器,主要是采用单片机PICl2F508控制可控硅的导通角,也就是控制加在负载(交流接触器线圈)上的电压波形,从而实现交流接触器的大电流直流吸合,低压小电流维持运行,达到无声节能的目的。   1 电路工作原理   图1是交流接触器的原理框图,主要由220 V交流电输入、可控硅、单片机控制电路和负载等组成。单片机控制电路主要是控制可控硅的导通时间。最终加在负载(交流接触器线圈)上的电压波形如图2所示
[单片机]
AVR单片机主要的特性
AVR的主要特性 高可靠性、功能强、高速度、低功耗和低价位 , 一直是衡量单片机性能的重要指标,也是单片机占领市场、赖以生存的必要条件。 早期单片机主要由于工艺及设计水平不高、功耗高和抗干扰性能差等原因,所以采取稳妥方案:即采用较高的分频系数对时钟分频,使得指令周期长,执行速度慢。以后的 CMOS单片机虽然采用提高时钟频率和缩小分频系数等措施,但这种状态并未被彻底改观(51以及51兼容)。此间虽有某些精简指令集单片机(RISC)问世,但依然沿袭对时钟分频的作法。 AVR单片机的推出,彻底打破这种旧设计格局,废除了机器周期,抛弃复杂指令计算机(CISC)追求指令完备的做法;采用精简指令集,以字作为指令长度单位,将内容丰富
[单片机]
8051单片机的内部的结构及运行过程解析
1.ROM:只读存储器,单片机的只读存储区大多用于存储程序固又称程序存储器。 51单片机是EPROM,所谓的EPROM是可擦除的只读存储器。可以把原来的程序擦除了,再写一个新的进去。 断电后是可以保存的,数据存储器(RAM)是不能保存的。 RAM只能在程序执行的时候不断地重新存储定义的变量。如int x,int y 可以通过code这个指令来将定义的变量放在ROM,而不是RAM中,节省RAM资源 2.RAM:随机存取存储器,用于存储定义的变量等,速度快 51单片机的RAM存储容量远小于ROM,但是速度非常之快 内部详细图示 内部的结构看似十分复杂,但是大致上可以分为两个部分:运算器(红色框)和控制器(蓝色框)。 运算器
[单片机]
8051<font color='red'>单片机</font>的内部的结构及运行过程解析
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved