比较常用的单片机系列
(此处已添加圈子卡片,请到今日头条客户端查看)MCS-51系列及与之兼容的80C51系列单片机
在我国使用最多的是Intel公司的MCS-51系列单片机。MCS-51系列单片机虽然是8位单片机,但它品种齐全、兼容性强、性价比高,且软硬件应用设计资料丰富,已为广大工程技术人员所熟悉,因此在我国得到了广泛的应用。
MCS是Intel公司的注册商标。凡Intel公司生产的以8051为核心单元的其他派生单片机都可以称为MCS-51系列,有时简称为51系列。MCS-51系列单片机包括8031、8051、87513个基本型和对应的低功耗型80C31、80C51、87C51。
MCS-51系列及80C51单片机有多种品种。它们的引脚及指令系统相互兼容,主要在内部结构上有所区别。最常用的51系列单片机是8051和AT89C51(如图1-2所示)等。
AT89C51具有片内E2PROM,是真正的单片机,由于不需要外接EPROM,所以应用非常普遍。8031、8051片内没有EPROM,但它价格很低,软硬件系统开发成熟,所以应用也非常广泛。目前51系列的产品大多是8031、8051和AT89C51等。
除了Intel公司,还有Atmel、Winbond、Philips、TEMIC、ISSI和LG等公司都生产兼容80C51的产品。
宏晶公司生产的STC89C5lRC单片机为低电压、高性能的CMOS 8 位单片机,片内含2Kbyte的可反复擦写的只读程序存储器(PEROM)和128byte的随机存取数据存储器(RAM),工作电压为2.7V~6V,还含有2个16位的定时器,6 个内部中断源,可编程的串口 UART,兼容标准 MCS-51 指令系统。片内置有通用 8 位中央处理器和Flash存储单元,封装只有40针,体积比较小,工作温度为-40℃~+85℃。
STC89C5lRC单片机可以利用STC-ISP软件方便地实现在线烧写程序。本书使用的实验开发板采用的就是STC89C5lRC单片机。
TI公司的超低功耗Flash型MSP430系列单片机
有业界最佳“绿色微控制器(Green MCUs)”称号的 TI 公司的 MSP430 Flash 系列单片机,是目前业界所有内部集成闪速存储器(Flash ROM)产品中功耗最低的,消耗功率仅为其他闪速微控制器(Flash MCUs)的 1/5。在 3V 工作电压下其耗电电流低于 350μA/MHz,待机模式仅为 1.5μA/MHz,具有 5 种节能模式。该系列产品的工作温度范围为-40℃~85℃,可满足工业应用要求。MSP430 微控制器可广泛地应用于煤气表、水表、电子电度表、医疗仪器、火警智能探头、通信产品、家庭自动化产品、便携式监视器及其他低耗能产品。由于MSP430微控制器的功耗极低,可设计出只需一块电池就可以使用长达10年的仪表应用产品,因此,MSP430 Flash系列是不可多得的高性价比单片机。
OKI低电压低功耗单片机
OKI公司的高性价比4位机MSM64K系列也是低功耗低电压的微控制器,其工作电压可低至1.25V,使用32kHz的工作频率,工作电流可低至3μA~5μA,HALT(关断)模式下小于1μA,而其功能却并不逊色。MSM64K系列单片机片内集成了LCD(液晶显示器)驱动器,可方便地与液晶显示器连接,且具有片内掩模(Mask)的程序存储器,有些型号还带有串口、RC振荡器、看门狗、模数转换器(ADC)、脉宽调制(PWM)等,几乎不需要外扩芯片即可满足应用,其工作温度范围可达-40℃~85℃,提供PGA封装和裸片。该系列微控制器应用广泛,适用于使用LCD显示、电池供电的设备,如掌上游戏机、便携式仪表(体温计、湿度计)、智能探头、定时器(时钟)等低成本、低功耗的产品。
ST公司的ST62系列单片机
美国ST微电子公司是一家独立的全球性公司,专门从事半导体集成电路的设计、生产、制造和销售,以及生产各种微电子应用中的分立器件。应用领域涉及电子通信系统、计算机系统、消费类产品、汽车应用、工业自动化和控制系统等。ST公司可提供满足各种需要的单片机或微控制器,其中ST62系列8位单片机以其简单、灵活、价低格等特点,特别适用于汽车、工业、消费领域的嵌入式微控制系统。ST62系列提供多种不同规格的单片机以满足各种需要,存储器从1KB到8KB,有ROM、OTP、EPROM、E2PROM、Flash E2PROM,I/O接口从9个到22 个,引脚从16 个到42个,还有 ADC、LCD 驱动、看门狗、定时器、串行口、电压监控等部件。ST62 单片机采用独特的制造工艺和技术,大大提高了抗干扰能力,能适应于各种恶劣环境。
AD公司的带A/D与D/A转换器的单片机
ADμC812是AD公司推出的全集成12位数据采集系统,片内集成了8路12位高性能的自校准ADC、2路12位DAC和与80C51指令兼容的8位MCU。AD公司最近又推出了16位和24位ADC的ADμC816和ADμC824,其他性能特性与ADμC812基本相同。
ADμC812 MCU 包括8KB的Flash程序存储器、640B 的Flash数据存储器、256B 的RAM和与80C51 兼容的内核。并且具有看门狗定时器、电源监视器及ADC DMA 功能,32 个可编程I/O接口、I2C/SPI兼容和标准UART串行通信接口。芯片具有正常、空闲和掉电三种工作模式,非常适合低功耗应用的电源管理方案,如智能传感器、电池供电系统(可移动PC、手持仪器、终端)、瞬时捕捉系统、DAS和通信系统等。
(此处已添加圈子卡片,请到今日头条客户端查看)单片机调试方法浅析
1.1 利用LED进行可视化管理
这种方法需要有多余的I/O。(如果可能,也可以将实现次要功能的I/O暂时借来一用。)
其电路很简单,一个LED通过限流电阻接到VCC电源。I/O设置为输出方式。
我们可以用下面的宏来定义LED的操作。
#define LED_YELLOW_ON() PA6D=0
#define LED_YELLOW_OFF() PA6D=1
#define LED_YELLOW_FLASH() PA6D^=1
举个例子说明它的用法。在低功耗的产品设计中,我们一般采用“睡眠à醒来工作à睡眠à醒来工作”的工作模式,其程序结构如下:
while(1)
HLT = 1; //进入睡眠
nop();
clear_WDT(); //清看门狗
//醒来,处理各种事务
如果我们在程序醒来时点亮LED,事务处理完毕时熄灭LED,那么我们就能“看见”程序的工作状态,LED将周期性地闪烁。这就是我们称之为可视化管理的原因。(不记得在哪本书上看到“可视化管理”这个概念,我借用一下)
其软件结构是这样:
while(1)
HLT = 1; //进入睡眠
nop();
clear_WDT(); //清看门狗
LED_YELLOW_ON(); // debug
//醒来,处理各种事务
LED_YELLOW_OFF(); // debug
其实有些仿真器已经提供了这种监视程序睡眠状态的方法。如果没有提供,就可以用以上方法自行实现。
它的使用很灵活。比如可以用来在双时钟系统中监视快时钟的打开和关闭情况(慢时钟一般总是打开,因为要用作实时时钟的时钟源,而且慢时钟耗电很小)。你可以在打开快时钟时点亮LED,关闭快时钟时熄灭LED,这样一来快时钟的打开和关闭就一目了然了。
你也可以在某个中断中将LED的状态取反(使用LED_YELLOW_FLASH()),用来监视此中断的产生是否正常。虽然设置断点也可以知道中断是否产生,但会中断程序的执行,造成不便。
如果你想知道程序有没有执行到某个地方,你也可以将LED_YELLOW_FLASH()放到该位置。
依次类推,你可以用这个方法观察任何你想观察的事件。
当然你必须互斥地观察不同的事件。就是说,对于一个LED,在一次调试中,一般只能观察一个事件,否则你自己也弄不清LED的变化到底是代表发生哪一事件。
另外,你还可以同时使用两个或者更多不同颜色的LED来监视不同的事件,前提你有多余的I/O。
不中断程序的执行,又能看到程序的执行情况,应该说是一种很有效的调试程序的方法。相比开发工具所提供的单步、断点、观察变量等调试手段,这可以算是一种有效的补充。
1.2 利用示波器测试时间
利用上面的方法,再加一个示波器,就可以测量程序执行的时间了。(你可以自己决定接不接LED)。
比如,在初始化程序中,在打开总中断之前,写如下代码:
LED_YELLOW_ON();
nop();
LED_YELLOW_OFF();
使用示波器,在捕获模式下,你应该能捕获到一个脉冲,测试它的宽度,假如为30.5us。以OKI ML610Q431为例,一条nop指令包括1 cycles,1 cycles包括1 system clock。这里system clock等于振荡周期。(注意,不同的单片机对cycles, system clock的定义是不同的,需要参考各自的用户手册)。
那么我们可以这样计算振荡器的频率:1*1*(1/f)=30.5/1000000.
f=32786Hz
当然,如果示波器测量精度不够,可以多放几个nop指令,计算时再求平均。如果嫌示波器的捕获模式太麻烦,还可以采用循环结构,输出一串方波。比如:
while(1)
LED_YELLOW_ON();
nop();
LED_YELLOW_OFF();
nop();
clear_WDT(); //清看门狗
这种方法的使用也很灵活。你可以用来测试主循环的执行时间,调用某个函数所花的时间,以及某个中断处理的时间(不包括响应中断和退出中断的时间)等等。
当你发现某些时候主循环的执行时间特别长时,可以采用逐步缩小范围的方法来找出到底是哪个函数花费时间长,有没有可能将其优化。
下面是测试主循环执行时间的程序结构。
while(1)
HLT = 1; //进入睡眠
nop();
clear_WDT(); //清看门狗
LED_YELLOW_ON(); // debug
Fun1();
Fun2();
Fun3();
Fun4();
LED_YELLOW_OFF(); // debug
如果发现上面的执行时间异常(比如太长),你可以调整测试的位置,如下所示:
while(1)
HLT = 1; //进入睡眠
nop();
clear_WDT(); //清看门狗
Fun1();
LED_YELLOW_ON(); // debug
Fun2();
Fun3();
Fun4();
LED_YELLOW_OFF(); // debug
这样,你就可以确定执行时间过长是不是因为Fun1()引起。如果不是,则继续调整测试位置,逐个排除,直到找到真正费时的函数,对其进行分析,看看有没有可能优化。
当然,我们还可以用两个或更多I/O对多个事件进行逻辑分析,观察他们的先后顺序以及测试其时间间隔。这种方法也很有用,很灵活。在此不详述。
2. 利用LCD进行可视化管理
如果你的产品带LCD显示,又没有多余的IO可供调试,或者你只是想临时的调试某个功能,那么你可以临时使用LCD上的某个图标来指示某个事件。当某个事情发生时,显示该图标,否则清除该图标。
如果想在程序运行中获得更复杂、更丰富的信息,可以对不同的事件显示不同的数值。
3. 小结
不中断程序的执行,又能观察程序的执行情况,应该说是一种很有效的调试程序的方法。相比开发工具所提供的单步、断点、观察变量等调试手段,这可以算是一种有效的补充。实际上,这些调试方法很像PC应用开发的printf调试手段。它可以在不打断程序运行的情况下,借助于I/O,LED,示波器,数码管或LCD显示,给出各种各样的提示信息,帮助我们调试程序。
相关问答
在座的大佬 请解答一下!!什么叫液晶显示模块?[回答]数显液晶显示模块有以下几种:1.计数模块2.计量模...两部分被组装在一起,但工作的时候是相互独立的(即电路不相关)。常见的的数显液晶显示模块有以...