完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
将C向MCU(俗称单片机)8051上的移植始于80年代的中后期。客观上讲,C向8051 MCU移植的难点不少。如:·8051的非冯·诺依慢结构(程序与数据存储器空间分立),再加上片上又多了位寻址存储空间; ·片上的数据和程序存储器空间过小和同时存在着向片外扩展它们的可能; ·片上集成外围设备的被寄存器化(即SFR),而并不采用惯用的I/O地址空间; ·8051芯片的派生门类特别多(达到了上百种之多),而C语言对于它们的每一个硬件资源又无一例外地要能进行操作。这些都是过去以MPU为基础的C语言所没有的。经过Keil/Franklin、Archmeades、IAR、BSO/Tasking等公司艰若不懈的努力,终于于90年**始而趋成熟,成为专业化的MCU高级语言了。过去长期困扰人们的所谓“高级语言产生代码太长,运行速度太慢,因此不适合单片机使用”的致使缺点已被大幅度地克服。目前,8051上的C语言的代码长度,已经做到了汇编水平的1.2~1.5倍。4K字节以上的程度,C语言的优势更能得到发挥。至于执行速度的问题,只要有好的仿真器的帮助,找出关键代码,进一步用人工优化,就可很简单地达到十分美满的程度。如果谈到开发速度、软件质量、结构严谨、程序坚固等方面的话,则C语言的完美绝非汇编语言编程所可比拟的。今天,确实已经到MCU开发人员拿起C语言利器的时候了。 下面结合8051介绍单片机C语言的优越性: ·不懂得单片机的指令集,也能够编写完美的单片机程序; ·无须懂得单片机的具体硬件,也能够编出符合硬件实际的专业水平的程序; ·不同函数的数据实行覆盖,有效利用片上有限的RAM空间; ·程序具有坚固性:数据被破坏是导致程序运行异常的重要因素。C语言对数据进行了许多专业性的处理,避免了运行中间非异步的破坏; ·C语言提供复杂的数据类型(数组、结构、联合、枚举、指针等),极大地增强了程序处理能力和灵活性; ·提供auto、static、const等存储类型和专门针对8051单片机的data、idata、pdata、xdata、code等存储类型,自动为变量合理地分配地址; ·提供small、compact、large等编译模式,以适应片上存储器的大小; ·中断服务程序的现场保护和恢复,中断向量表的填写,是直接与单片机相关的,都由C编译器**; ·提供常用的标准函数库,以供用户直接使用; ·头文件中定义宏、说明复杂数据类型和函数原型,有利于程序的移植和支持单片机的系列化产品的开发; ·有严格的句法检查,错误很少,可容易地在高级语言的水平上迅速地被排掉; ·可方便地接受多种实用程序的服务:如片上资源的初始化有专门的实用程序自动生成;再如,有实时多任务操作系统可调度多道任务,简化用户编程,提高运行的安全性等等。
|
|
相关推荐
8 个讨论
|
|
|
基于ATMEGA8单片机的车载空调控制器设计 主要功能指标 汽车空调控制系统的主要功能如下。 控制器基本原理 汽车空调控制系统框图如图1所示。系统由按键扫描、电压检测、温度检测、风机控制、压缩机控制、LED数码管显示、蜂鸣器报警电路和单片机组成。
图1 汽车空调控制系统框图 单片机工作的主要原理为:扫描键盘,当制冷键按下,同时无故障报警时系统将ADC采样的车内温度与预先设定的制冷温度比较,如车内温度高于设定温度则打开冷凝风机、压缩机制冷;当车内温度低于设定温度2℃时关闭压缩机、冷凝风机,若此时强制冷键按下,系统将忽略预设温度直接启动制冷。其中单片机PB0、PB1口输出高低信号控制MOS管的开关,进而控制风机和压缩机的起停;PC0口采样输入电压并与系统默认值进行比较,以确定电压是否正常;PC2口采样化霜温度用以确定化霜操作;PC3口采样车内温度,将计算的结果输出至LED数码管显示。 系统硬件设计 1 主控芯片简介 2 电源部分
图2 系统供电部分 系统供电电路如图2所示,DC/DC转换芯片采用MC34063,该芯片具有集成基准电压、振荡器同步和输入电压范围宽等特点,其输出电压可表示为Vout=1.25(1+R39/R40),输出电流可达500mA,完全满足本系统的功耗要求。为了降低干扰,芯片的输入端和输出端加了电容C10、C12、C13进行滤波处理。
图3 电压及温度检测电路 3 电压及温度检测电路 如图3所示,电压、温度检测采用单片机内部专用ADC采样通道,不增加额外芯片有利于降低系统成本。ADC基准电压等同单片机工作电压5V,系统输入电压经R3、R8分压简单滤波后送入PC0(ADC0),此端口根据分压比连续采样21次,然后将每次所得值相加即可还原系统输入电压;RT1、RT2为负温度系数传感器,当温度上升或下降时其阻值随之减小或增大,相应ADC端口将多次采样的电压值进行数值平均滤波并与已知的电压/温度区间比较,得出实时温度。 4 键盘和显示电路 如图4所示,由于单片机I/O口有限,键盘和显示电路采用了端口复用,3位8段LED数码管驱动增加了SN74164串入并出芯片进一步缓解端口有限的压力。其中键盘有7个按键, 分别为开关机、制冷/通风、强制冷、设定、上增、下减,可以进行温度设置和新风时间设置等。LED数码管可以显示当前车内温度、系统预设温度、输入电压等,当蜂鸣器报警时能显示故障代码为维修调试提供了方便。
图4 键盘和显示电路 5 输出控制电路 风机、压缩机输出控制电路如图5所示,单片机输出控制信号经ULA2003反向后驱动晶体管Q2,Q2的集电极再连接压缩机的起停开关继电器的控制输入端,当继电器由闭合转为断开时,二极管D10为继电器线圈续流。为有效的控制晶体管的导通和关闭,系统增加了高输入电压、高灌电流的ULN2003A驱动芯片。其内部采用达林顿输入电压最高达50V, 灌电流最大500mA。 软件设计
图5 输出控制电路 中断服务程序包括定时器T0、T1中断服务程序。定时器T0定时时间为1ms,设变量a,每次进入中断子程序如故障标志位有效则a增加1,在a小于50前开蜂鸣器;当a大于50时关蜂鸣器同时a清零,这样处理以区别按键铃声。定时器T1定时时间为1s,主要用于压缩机、冷凝风机间的延时,也就是连续两次压缩机开启的时间间隔不能少于6s,压缩机关闭后延时3s关冷凝风机。 结束语
|
|
|
|
|
|
|
|
|
坛子里有没有对单片机的串口通讯比较了解的
现在用单片机的定时器T1方式2进行中断字符传输 波特率设置为9600 void main() { ES=0; while(1) { for(一=0;i<6;i++) { ***uf=table【i】; while(TI); TI=0; } ***uf=a; while(!Ti); Ti=0; ES=1; flag=0; } void ser() interrupt 4 { Ri=0; SBUF=RI; flag=1; } 程序的流程是什么样子的 第一个SBUF=table【i】是将table写到缓冲寄存器里面 那SBUF=a呢 是因为下面的窜口通讯里的SBUF=a吗 这两个SBUF分别是什么缓冲器啊 |
|
|
|
|
|
|
|
265 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
789 浏览 0 评论
1306 浏览 2 评论
787 浏览 0 评论
【RA4M2-SENSOR开发板评测】Analogue+Timers综合测试
1587 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16902 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 13:00 , Processed in 0.905015 second(s), Total 57, Slave 48 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2970