基于MCS51设计的概念版的信号发生器

发布者:RadiantSoul最新更新时间:2016-09-24 来源: eefocus关键字:MCS51  概念版  信号发生器 手机看文章 扫描二维码
随时随地手机看文章
系统简介:这款信号发生器的原理是利用单片机控制DAC0832数模转化芯片,使其输出-5~+5的模拟量信号,由于单片机的指令执行周期很短,其中Atmel89s52最大可支持24M的晶振,可以用数字信号产生很好的“模拟”信号。

这款系统只是概念上的,因为受到数模芯片转化时间和单片机程序控制时间的限制,只能在很小的频率范围内出比较好的波形,这款系统主要还是其程序的控制,其中控制程序占有整个程序的90%左右。

一块4×4的矩阵键盘向单片机提供输入,使LCD1602液晶显示出频率和幅值,通过抄作键盘可以改变相应的频率、幅值以及输出波形。

 

 

系统构成部件:

单片机Atmel89s52、数模转换芯片DAC0832、4×4键盘、LCD1602液晶显示

 

 

模块介绍:

4×4的矩阵键盘

基于MCS51设计的概念版的信号发生器(可调制正弦、方波、三角波) - 赵明 - Alexander

单片机系统:24M晶振,30pf的电容,P0口:液晶的数据口,P2口:DAC0832的数据口,P1口:接4×4的矩阵键盘,P3.7:DAC0832片选信号

 

基于MCS51设计的概念版的信号发生器(可调制正弦、方波、三角波) - 赵明 - Alexander

 

数模转换:DAC0832,基本接法

 

基于MCS51设计的概念版的信号发生器(可调制正弦、方波、三角波) - 赵明 - Alexander

 

显示:LCD1602

 

基于MCS51设计的概念版的信号发生器(可调制正弦、方波、三角波) - 赵明 - Alexander

 

波形输出:DAC0832的双极型输出

基于MCS51设计的概念版的信号发生器(可调制正弦、方波、三角波) - 赵明 - Alexander

 仿真波形:

基于MCS51设计的概念版的信号发生器(可调制正弦、方波、三角波) - 赵明 - Alexander

 LCD显示:

基于MCS51设计的概念版的信号发生器(可调制正弦、方波、三角波) - 赵明 - Alexander

程序设计: 

#include    //包含单片机寄存器的头文件

#include  //包含_nop_()函数定义的头文件

#define uchar unsigned char

#define uint unsigned int

sbit RS=P3^0;    //寄存器选择位,将RS位定义为P2.0引脚

sbit RW=P3^1;    //读写选择位,将RW位定义为P2.1引脚

sbit E=P3^2;     //使能信号位,将E位定义为P2.2引脚

sbit BF=P0^7;    //忙碌标志位,,将BF位定义为P0.7引脚

sbit CS=P3^7; //DA0832片选信号

bit F_Flag=0;

bit SET_Flag=0;

bit Wave_Flag=1;

unsigned char Flag=0;

unsigned char j=0;

unsigned char a=0;

unsigned int F_Val=100;

unsigned int A_Val=5000;

unsigned int u1,u2;

unsigned char code digit[ ]={"0123456789"}; //定义字符数组显示数字

unsigned char code string[ ]= {" F: 100HZ "};

unsigned char code string1[ ]={"      A:5000mV "};

unsigned char code string2[ ]={"SIN"};

unsigned char code string3[ ]={"TRA"};

unsigned char code string4[ ]={"REC"};

unsigned char code key_code[]={

              0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,

              0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77 };

uchar code tosin[256]={

0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,

0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,

0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,

0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,

0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,

0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,

0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,

0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,

0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,

0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,

0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,

0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,

0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,

0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,

0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,

0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,

0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,

0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,

0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,

0x76,0x79,0x7c,0x80};//正弦波码

 

/*****************************************************

函数功能:延时1ms

***************************************************/

void delay1ms()

{

   unsigned char i,j;    

        for(i=0;i<10;i++)

         for(j=0;j<33;j++)

          ;       

 }

 /*****************************************************

函数功能:延时若干毫秒

入口参数:n

***************************************************/

 void delay(unsigned int n)

 {

   unsigned int i;

       for(i=0;i

          delay1ms();

 }

/*****************************************************

函数功能:判断液晶模块的忙碌状态

返回值:result。result=1,忙碌;result=0,不忙

***************************************************/

 unsigned char BusyTest(void)

  {

    bit result;

       RS=0;       //根据规定,RS为低电平,RW为高电平时,可以读状态

    RW=1;

    E=1;        //E=1,才允许读写

    _nop_();   //空操作

    _nop_();

    _nop_();

    _nop_();   //空操作四个机器周期,给硬件反应时间    

    result=BF;  //将忙碌标志电平赋给result

       E=0;

    return result;

  }

/*****************************************************

函数功能:将模式设置指令或显示地址写入液晶模块

入口参数:dictate

***************************************************/

void WriteInstruction (unsigned char dictate)

{  

    while(BusyTest()==1); //如果忙就等待

        RS=0;                  //根据规定,RS和R/W同时为低电平时,可以写入指令

        RW=0;  

        E=0;                   //E置低电平(根据表8-6,写指令时,E为高脉冲,

                             // 就是让E从0到1发生正跳变,所以应先置"0"

        _nop_();

        _nop_();             //空操作两个机器周期,给硬件反应时间

        P0=dictate;            //将数据送入P0口,即写入指令或地址

        _nop_();

        _nop_();

        _nop_();

        _nop_();               //空操作四个机器周期,给硬件反应时间

        E=1;                   //E置高电平

        _nop_();

        _nop_();

        _nop_();

        _nop_();               //空操作四个机器周期,给硬件反应时间

         E=0;                  //当E由高电平跳变成低电平时,液晶模块开始执行命令

 }

 

/*****************************************************

函数功能:指定字符显示的实际地址

入口参数:x

***************************************************/

 void WriteAddress(unsigned char x)

 {

     WriteInstruction(x|0x80); //显示位置的确定方法规定为"80H+地址码x"

 }

/*****************************************************

函数功能:将数据(字符的标准ASCII码)写入液晶模块

入口参数:y(为字符常量)

***************************************************/

 void WriteData(unsigned char y)

 {

    while(BusyTest()==1); 

         RS=1;           //RS为高电平,RW为低电平时,可以写入数据

         RW=0;

         E=0;            //E置低电平(根据表8-6,写指令时,E为高脉冲,

                       // 就是让E从0到1发生正跳变,所以应先置"0"

         P0=y;           //将数据送入P0口,即将数据写入液晶模块

         _nop_();

         _nop_();

        _nop_();

     _nop_();       //空操作四个机器周期,给硬件反应时间

         E=1;          //E置高电平

         _nop_();

         _nop_();

         _nop_();

        _nop_();        //空操作四个机器周期,给硬件反应时间

        E=0;            //当E由高电平跳变成低电平时,液晶模块开始执行命令

 }

/*****************************************************

函数功能:对LCD的显示模式进行初始化设置

***************************************************/

void LcdInitiate(void)

{

   delay(15);             //延时15ms,首次写指令时应给LCD一段较长的反应时间

   WriteInstruction(0x38);  //显示模式设置:16×2显示,5×7点阵,8位数据接口

       delay(5);   //延时5ms 

       WriteInstruction(0x38);

       delay(5);

       WriteInstruction(0x38);

       delay(5);

       WriteInstruction(0x0F);  //显示模式设置:显示开,有光标,光标闪烁

       delay(5);

       WriteInstruction(0x06);  //显示模式设置:光标右移,字符不移

       delay(5);

       WriteInstruction(0x01);  //清屏幕指令,将以前的显示内容清除

       delay(5);

 }

 /**********************************************************

 

键盘扫描子函数

 

************************************************************/

uchar  keyscan()

{

   uchar  scan1,scan2,keycode,j,key;

 

   P2=0xf0;

   scan1=P2;

   if((scan1&0xf0)!=0xf0)           //判键是否按下

   {

     delay(10);                   //延时10ms

     scan1=P2;

     if((scan1&0xf0)!=0xf0)         //二次判键是否按下

     {

        P2=0x0f;

        scan2=P2;

        keycode=scan1|scan2;         //组合成键编码

 

        for(j=0;j<=15;j++)

        {

           if(keycode== key_code[j])  //查表得键值

           {

              key=j;

                      

              return(key);

           }

        }

     }

   }

      else  P1=0xff;

 

   return (16);

}

/****************延时中断子程序1*****************/

void timer0() interrupt 1

{    

              if(Flag==0)    //正弦波

              P1=tosin[j];          

      

          if(Flag==1)//三角波

              if(j<128)

                            P1=A_Val*j/5000;

               else

           P1=A_Val*(255-j)/5000;

          if(Flag==2)   //方波

       {if(j<128)       

               P1=A_Val/20;

        else P1=255-A_Val/20;

           a=0;}

       j++;  

 }

 

            

                    

 

void main(void)            //主函数

 {

  unsigned char i;

  LcdInitiate();         //调用LCD初始化函数 

  delay(10);

 

       WriteInstruction(0x01);//清显示:清屏幕指令

               WriteAddress(0x00);  // 设置显示位置为第一行的第1个字

                  i = 0;

              while(string[i] != '\0')    //'\0'是数组结束标志

                     {                                        // 显示字符  

                                   WriteData(string[i]);

                                   i++;

                                   delay(40);

                     }

                    

               WriteAddress(0x40);  // 设置显示位置为第二行的第1个字

                  i = 0;

              while(string[i] != '\0')   //'\0'是数组结束标志

                     {                                        // 显示字符  

                                   WriteData(string1[i]);

                                   i++;

                                   delay(40);

                      }

                     WriteAddress(0x67);

while(1)                             

{    

 

if(keyscan()==10&&SET_Flag==0)

        { delay(20);

         if(keyscan()==10&&SET_Flag==0)

       {   Flag++;

              if(Flag==3)

              Flag=0;

         WriteAddress(0x01);

        _nop_();

         _nop_();

        _nop_();

     _nop_();

     if(Flag==0)

         { i = 0;

              while(string2[i] != '\0')   //'\0'是数组结束标志

                     {                                        // 显示字符   SIN

                                   WriteData(string2[i]);

                                   i++;

                                   delay(40);

                     }

                     }

        if(Flag==1)

         { i = 0;

              while(string3[i] != '\0')   //'\0'是数组结束标志

                     {                                        // 显示字符   TRA

                                   WriteData(string3[i]);

                                   i++;

                                   delay(40);

                     }

                     }

       if(Flag==2)

         { i = 0;

              while(string4[i] != '\0')   //'\0'是数组结束标志

                     {                                        // 显示字符   REC

                                   WriteData(string4[i]);

                                   i++;

                                   delay(40);

                     }

                     }

        delay(400);

              }    

       WriteAddress(0x67);     

              }

 

       if(keyscan()==11)

        { delay(20);

         if(keyscan()==11)

       {  if(F_Flag==0)

        WriteAddress(0x46);

        else

        WriteAddress(0x06);

           delay(500) ;

              F_Flag=!F_Flag;

              SET_Flag=1;

              Wave_Flag=1;                

              }    

        }   

               if(keyscan()==12&&SET_Flag==1)

               { delay(20);

                if(keyscan()==12&&SET_Flag==1)

               {unsigned char D1,D2,D3,D4;

                 unsigned int Val;

                 if(F_Flag==0)

                 {Val=F_Val;

                  WriteAddress(0x08);}

                 else {Val=A_Val;

                  WriteAddress(0x48);}

          Val=Val+10;

                D1=Val%10;              //计算个位数字

                D2=(Val%100)/10;        //计算十位数字

                D3=(Val%1000)/100;      //计算百位数字

                D4=Val/1000;           //计算千位数字  

                WriteData(digit[D4]);  //将千位数字的字符常量写入LCD

                WriteData(digit[D3]);  //将百位数字的字符常量写入LCD

                WriteData(digit[D2]);  //将十位数字的字符常量写入LCD

                WriteData(digit[D1]);  //将个位数字的字符常量写入LCD

                if(F_Flag==0)

                 F_Val=Val;

                 else A_Val=Val;

                }

                 if(F_Flag==0)

       WriteAddress(0x06);

       else  WriteAddress(0x46);

       delay(400);    

       }

             

               if(keyscan()==13&&SET_Flag==1)

               { delay(20);

                if(keyscan()==13&&SET_Flag==1)

               {unsigned char D1,D2,D3,D4;

                 unsigned int Val;

                 if(F_Flag==0)

                 {Val=F_Val;

                   WriteAddress(0x08); }

                 else {Val=A_Val;

                   WriteAddress(0x48);}

          Val=Val-10;

                D1=Val%10;              //计算个位数字

                D2=(Val%100)/10;        //计算十位数字

                D3=(Val%1000)/100;      //计算百位数字

                D4=Val/1000;           //计算千位数字   

                WriteData(digit[D4]);  //将千位数字的字符常量写入LCD

                WriteData(digit[D3]);  //将百位数字的字符常量写入LCD

                WriteData(digit[D2]);  //将十位数字的字符常量写入LCD

                WriteData(digit[D1]);  //将个位数字的字符常量写入LCD

                if(F_Flag==0)

                 F_Val=Val;

                 else A_Val=Val;

                 }

                 if(F_Flag==0)

       WriteAddress(0x06);

       else WriteAddress(0x46);

       delay(400);    

              }

              if(keyscan()==14)

              {delay(20);

              if(keyscan()==14)

              {SET_Flag=0;

           Wave_Flag=1;

           WriteAddress(0x76);

              }

              }

 

       if(Wave_Flag==1)

       {     CS=0;

      u1=3906/F_Val;

       u2=3906%F_Val;

      if(u2>F_Val/2)

        u1++;

              TMOD=0x02;

              TH0=TL0=255-u1;

        EA=1;

              ET0=1;

              TR0=1;  

       }

   if(keyscan()!=16)

   TR0=TR1=0;

 

       }    

   }

  总结:优秀的程序设计源自于优秀的硬件系统,好的硬件电路可以大大提高开发效率,单片机开发应该走接口的模块话和标准化,这样可以大大减少开发人员的工作量,单片机接口模块的开发也较具有市场前景!

       电路的设计不能完全依赖于教科书上所说的,教科书只是一些理论性的东西,而一个优秀稳定的电路系统要求的更多。

           51单片机的速度不够、处理浮点数运算的能力不强,代码效率不高,在ARM系统如火如荼的时候,我们竟然还在学51!

关键字:MCS51  概念版  信号发生器 引用地址:基于MCS51设计的概念版的信号发生器

上一篇:简易C51下载器
下一篇:两机串行通讯

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

安捷伦推出具有业界领先水平的微波模拟信号发生器
    安捷伦科技公司(NYSE:A)宣布推出两款新型信号发生器,具备无与伦比的相位噪声、输出功率和频率切换速度性能。新型N5183BMXG和 N5173B EXG 微波模拟信号发生器在规格、速度和成本等方面均具备一定的优势,为安捷伦旗舰产品 E8267D 矢量 PSG 和 E8257D 模拟 PSG 提供有力的补充。     安捷伦副总裁兼通信与微波事业部总经理AndyBotka说:“安捷伦微波信号发生器是当前最先进的测量系统中的重要部分,它们提供开发人员所需的信号纯度、输出功率和调制功能,帮助用户在雷达、电子战和卫星通信应用中得到明显的性能提升。”     纯净、精密的N5183BMXG模拟信号发生器是高性能 PSG 的替换
[测试测量]
用单片机做显示器信号发生器
  在 维修 显示器 时,一般都是接 电脑 主机,经常拔插信号线很不方便。本文介绍的显示器信号发生器就可以替代电脑主机,给显示器一个信号,在维修时能显示各种信号,而且体积很小,携带在外维修也很方便。   我做的这个显示器信号发生器是在国外网站www.alexm.times.lv/vga_tester.htm看到的,电路原理图见下图,   PCB图见下图。主要是用单片机PICl6F84A来输出信号,74HCl64用来显示编码。一般 市场 上销售的彩显信号发生器都在130到200多元,而这个电路整个成本不到40元。   主要器件PICl6F84A市场价在12元左右,一些单片机网站都可以买到。 数码 管是共阳单管,VG
[单片机]
用单片机做显示器<font color='red'>信号发生器</font>
由串行口接收带偶校验位的ASCII码数据块MCS51汇编程序
   由串行口接收带偶校验位的ASCII码数据块。 设待接收数据块共10H个字节,接收后拟存于片内RAM的40H~4FH单元;单片机采用的晶振频率、波特率、SMOD位的值等均同上题。则相应的接收程序如下:RSTART:MOV TMOD,#20H ;置定时器/计数器T1工作于方式2定时 MOV TL1,#0E6H ;定时器/计数器T1置初值 MOV TH1,#E6H ;定时器/计数器T1置重装数 MOV R0,#40H ;R0作地址指针,指向拟存放数据块首址 MOV R7,#10H ;R7作循环计数器,置以接收数据字节数 SETB TR1 ;启动定时器/计数器T1 RSTART:MOV TMOD,#20H ;置定时器/计数器T1工作
[单片机]
基于PIC16F877A单片机的混沌信号发生器的设计
混沌科学得到广泛研究应该得益于20世纪60年代洛伦兹(Lorenz)的“蝴蝶效应”。混沌信号具有初值敏感性、内随机性、遍历性和有界性等特点,近几年得到深入的研究和探索,并开始广泛应用于信号处理、保密通信、生物医学等领域,特别是在医疗器械的应用,有着重大的突破。科学研究表明:生物体是一个高度的非线性系统,而非线性系统的运动通常表现出混沌现象,人体的生理活动呈现众多的混沌现象。所以,研究混沌信号源的产生对生物医学的研究有着极其重要的意义。 1 混沌信号产生的数学建模与仿真 1.1 混沌信号系统数学模型的选用 该设计中,考虑到人体生理活动本身也是一个混沌系统,主要是要产生一个具有混沌特性的信号源,来调节人体的生理活动,因此,该设计采用最
[单片机]
基于PIC16F877A单片机的混沌<font color='red'>信号发生器</font>的设计
怎么能够有效地提高射频信号发生器性能?
射频信号发生器是我们常用的一种通用电子测试测量仪器,与传统的函数信号发生器不同,它主要用于产生射频的连续波信号,或者是以射频信号为载波的调制信号。射频信号发生器可以作为激励源,广泛应用于电子产品的测试测量和各类电子实验室的电路实验。 许多经济型的射频信号发生器,其技术参数已经基本能够满足基础应用。但对于一些更高的专业领域,关键指标上还有些差距,那么在节省预算的前提下,怎么能够有效地提高射频信号发生器性能,从而拓展它的应用范围呢?在这里安泰Agitek分享几个实用小技巧。 1.通过外接功率计,提高射频信号发生器的幅度精度 受限于信号发生器本身的输出幅度精度,以及信号发生器和被测件之间连接件的频响特性,到达被测件的信号幅度可能
[测试测量]
怎么能够有效地提高射频<font color='red'>信号发生器</font>性能?
任意波形发生器和矢量信号发生器有什么区别?
二者的架构不同,AWG的核心部件为DAC,编译好带有载波信息的波形,直接经DAC播放出来。后者包括基带源和IQ调制器,基带源用于产生模拟IQ信号,其核心部件也是DAC,但是低速率的,所以产生的模拟IQ信号带宽较小;IQ信号再经调制器直接上变频至射频。由于架构不同,所以两种源的应用领域也不尽相同。 AWG属于宽带设备,要求DAC时钟速率较高,可以直接产生射频宽带调制信号,也可以产生模拟IQ信号提供给IQ调制器。根据官网信息,AWG5200可以产生4GHz载波频率、2GHz带宽的宽带信号。 SMW200A矢量信号发生器 此外,因带宽很大,所以瞬态响应时间较短,AWG还可以产生高速码流信号(0,1比特流)。而矢量源属于窄带设备,
[测试测量]
任意波形发生器和矢量<font color='red'>信号发生器</font>有什么区别?
如何用一只无缓冲CMOS六反相器做出测试仪器?
本文讨论了如何用一种六反相器IC做出四种测试件:一个有良好定义逻辑电压窗口的逻辑笔,输入阻抗约为1MΩ;一个开路测试仪,上限电阻可以从几十欧到几十兆欧;一个单脉冲或脉冲串注入器或简单的信号发生器;还有一个是高阻音频探头。使用一只4069中的六个反相门、两或三只电阻,以及少许无源元件,就可以做出这些测试仪器。 在双门构成的CMOS/TTL兼容探头中,R1至R4电阻网络对反相器输入端做偏置(图1)。由于门有高输入阻抗,因此R1至R4的值在大约100kΩ到1MΩ。探头尖的吸入/供出电流很小,因为R1至R4有高阻抗,因此,探头尖基本上不影响测试点的逻辑电平。知道了门的输入阈值电压后,就可以计算出所需要的R1至R4电阻值。 图1:在双门
[测试测量]
如何用一只无缓冲CMOS六反相器做出测试仪器?
100MHz可编程数字信号发生器
    摘 要: 介绍一种基于ISA总线的可编程数字信号发生器,其特点是:工作时钟100MHz,用可编程逻辑器件EPLD作为核心元件,信号输出多达16路,用LabWindjows/CVI软件设计的PC机虚拟仪器面板,界面友好,操作方便。并给出了硬件原理框图。     关键词: ISA总线 可编程 数字信号发生器 虚拟仪器     在通讯、电子、自动控制中,经常需要非周期的、能精确定时的数字信号,用以产生测试信号或模拟控制的时序。国内现有的可程控信号发生器输出信号频率较低(几kHz~几MHz)、输出路数较少(一般为两、三路)且结构复杂、操作不方便,难以满足现代电子技术发展的需要。     为此,我们开发了
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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