单片机常见问题解答(经典)
单片机问题答疑

《单片机应用技术》课堂提问:
1、采用带进位的循环移位指令除了会改变A的值以外,还会
改变谁?
简答:PSW的CY和P的值
不带进位的循环移位指令执行后是否也会有类似的改变?(简
单)
简答:不会
2、如何改变流水灯移动的方向?(简单)
简答:用RL或RR实现数据的左移或者右移
3、如何“亮点”的移动改成“暗点”的移动?(难)
简答:两种方法:若用软件实现就改变累加器A的赋值,若用
硬件实现就将LED的接法由共阴极改成共阳极
4、用移位指令实现乘除运算有什么好处?
简答:节省时间:移位指令的执行只需要花费一个机器周期的
时间,而乘除指令则需要花费4个机器周期。
5、I/O端口包括哪几个?各自的功能
简答:P0、P1、P2、P3共四个。
6、循环程序的组成部分
简答:循环初始化、循环体和循环控制部分
7、试着完成任务2程序的书写。
汽车学院:王春梅。
单片机使用注意事项及常见问题解答

单片机使用注意事项及常见问题解答一、注意事项在使用单片机的过程中,为了保证正常运行和提高使用寿命,需要注意以下几个方面:1. 电路设计与布线单片机的工作稳定性和可靠性与电路设计和布线密切相关。
合理的电路设计与布线可以减少电磁干扰、提高信号质量、降低功耗等。
因此,在设计电路和布线时,应尽量避免信号线与电源线、高频线等干扰源的交叉,并采用地线分区法、电源分区法、高频线与低频线分离等措施,以确保电路的稳定工作。
2. 电源稳定单片机对电源的稳定性要求较高,对于电源的电压波动、噪声干扰等都会影响单片机的正常工作。
为了保证电源的稳定,可以采用使用稳压芯片、滤波电容、电源隔离等方法,同时应避免长时间连续工作导致电源过热。
3. 静电防护单片机芯片对静电敏感,接触静电可能会造成芯片损坏。
在操作单片机时,应注意防止静电产生,如接地处理、使用防静电手套、工作环境湿度控制等。
4. 保持环境清洁单片机的安装环境应保持清洁干燥,尽量避免进水、进灰尘等情况。
灰尘或水分的进入可能会导致单片机损坏或性能下降。
5. 软件程序设计合理的软件程序设计可以提高单片机的工作效率和可靠性。
在编写程序时,应注意处理程序中可能存在的延时、死循环、内存溢出等问题,避免程序运行过程中出现异常情况。
二、常见问题解答1. 单片机运行不正常怎么办?如果单片机运行异常,首先应检查是否存在电源稳定性问题,可以通过使用稳压电源或重新连接电源等方式解决。
其次,检查电路设计与布线是否有问题,如电线是否短路、信号线与干扰源的交叉等。
同时,还需要检查软件程序是否存在错误,尝试重新编译或修改程序。
2. 单片机复位时间长怎么办?单片机复位时间长可能是由于软件程序中的复位流程存在问题。
检查程序中是否有延时等待操作,若有,可以适当减小延时时间。
同时,还需要检查硬件电路中的复位电路是否正确连接,确保复位信号能够及时生效。
3. 单片机工作时频率不稳定怎么办?频率不稳定可能与电源噪声、电磁干扰等有关。
单片机技术的使用中常见问题及解决方案集锦

单片机技术的使用中常见问题及解决方案集锦引言:单片机技术作为嵌入式系统开发的核心,广泛应用于各个领域。
然而,在实际使用过程中,我们常常会遇到各种问题,这不仅会影响项目的进展,还可能导致系统的稳定性和可靠性下降。
本文将针对单片机技术的使用中常见问题进行分析,并提供一些解决方案,帮助读者更好地应对这些问题。
一、电路设计问题及解决方案在单片机技术的应用中,电路设计是至关重要的,一个合理的电路设计能够提高系统的稳定性和可靠性。
以下是一些常见的电路设计问题及解决方案:1. 电源干扰问题电源干扰是导致单片机系统不稳定的常见问题之一。
解决方案是在电源输入端添加电源滤波电路,如电容滤波器和磁珠滤波器,以减小电源线上的噪声。
2. 时钟电路问题时钟电路是单片机系统中的关键部分,它提供了系统的时钟信号。
如果时钟电路设计不合理,可能会导致系统时钟不准确或者不稳定。
解决方案是使用稳定的时钟源,并在时钟信号线上添加适当的阻抗匹配电路,以降低时钟信号的反射和干扰。
3. 脉冲干扰问题脉冲干扰是由于电路中的开关动作引起的,它会导致单片机系统的工作不正常。
解决方案是在输入端添加合适的滤波电路,如RC滤波器或者磁珠滤波器,以减小脉冲干扰的影响。
二、软件编程问题及解决方案单片机技术的应用离不开软件编程,一个高效、可靠的程序是保证系统正常运行的关键。
以下是一些常见的软件编程问题及解决方案:1. 内存管理问题单片机的内存资源有限,合理地管理内存是提高程序效率的关键。
解决方案是合理地分配内存空间,避免内存碎片的产生,并使用适当的数据结构和算法来优化程序。
2. 中断处理问题中断是单片机系统中常用的一种处理方式,但不正确的中断处理可能导致系统死机或者数据丢失。
解决方案是在中断处理程序中尽量减少对全局变量的访问,避免死锁和资源竞争的问题。
3. 时序控制问题时序控制是单片机系统中的重要部分,它决定了系统各个模块的工作顺序和时序关系。
解决方案是合理地设计时序控制逻辑,并使用定时器和计数器等硬件资源来辅助实现。
单片机实验遇到的问题和解决方法

单片机实验遇到的问题和解决方法一、前言单片机是电子工程中常用的控制器件,广泛应用于各种电子设备中。
在学习和实践单片机过程中,可能会遇到各种问题。
本文将介绍几种常见的单片机实验问题及其解决方法。
二、硬件问题1. 单片机无法正常工作若单片机无法正常工作,需要检查以下硬件方面:(1)电源是否正常:检查电源是否接好,电压是否符合要求。
(2)晶振是否正常:检查晶振是否接好,频率是否符合要求。
(3)连接线路是否正确:检查连接线路是否正确接入单片机和外部器件。
2. 单片机烧毁若单片机烧毁,需要检查以下硬件方面:(1)电源是否过压或过流:使用稳压电源并设置恰当的电流保护。
(2)晶振频率是否过高:选用合适的晶振并设置合理的频率范围。
(3)使用过程中注意静电防护:穿着防静电服进行操作或使用防静电手套等防护装备。
三、软件问题1. 编译错误编译错误通常是由于程序语法错误或库文件引用错误等原因导致的。
解决方法如下:(1)仔细检查程序语法是否正确:检查程序中是否有拼写错误、语法错误等。
(2)检查库文件引用是否正确:确定所使用的库文件是否与程序匹配,且路径设置正确。
2. 程序无法下载若程序无法下载到单片机中,需要检查以下软件方面:(1)编译器设置是否正确:确保编译器设置正确,并选择合适的单片机型号。
(2)连接方式是否正确:检查连接线路和下载方式是否正确。
(3)单片机芯片保护位是否被置位:将单片机芯片保护位清零后再进行下载操作。
3. 程序运行不正常若程序运行不正常,需要检查以下软件方面:(1)变量初始化问题:确保变量被初始化为合理的值。
(2)程序逻辑问题:仔细分析程序逻辑,寻找可能存在的问题。
(3)硬件连接问题:检查硬件连接和外设驱动程序是否正确。
四、总结以上是一些常见的单片机实验问题及其解决方法。
在实践过程中,还需注意防静电、按照规范操作等细节问题。
希望本文能够对读者在学习和实践单片机过程中有所帮助。
单片机技术常见问题及解决方法解析

单片机技术常见问题及解决方法解析随着科技的不断发展,单片机技术在各个领域得到了广泛的应用。
然而,由于单片机技术的复杂性和特殊性,常常会遇到一些问题。
本文将针对单片机技术常见问题进行解析,并提供解决方法。
一、程序无法正常运行当程序无法正常运行时,首先需要检查是否存在以下问题:1. 电源问题:检查电源供应是否稳定,电压是否符合要求。
如果电源电压不稳定,可以使用稳压电源或添加电容来解决。
2. 电路连接问题:检查电路连接是否正确,是否存在虚焊、短路等问题。
可以使用万用表进行测量,找出问题所在。
3. 编程问题:检查程序是否存在错误,是否与硬件连接匹配。
可以使用调试工具进行单步调试,逐行检查程序执行情况。
如果以上问题都没有解决程序无法正常运行的情况,可能是单片机本身存在问题,可以尝试更换单片机或者联系供应商进行维修。
二、IO口无法正常工作IO口无法正常工作是单片机技术中常见的问题之一。
解决方法如下:1. IO口配置错误:检查IO口的配置是否正确,包括引脚选择、工作模式、上下拉电阻等。
可以参考单片机的手册或者开发板的原理图来确认配置是否正确。
2. 外设连接问题:检查外设是否正确连接到IO口,是否存在连接错误或者虚焊现象。
可以使用示波器或者逻辑分析仪来检查信号的波形和电平。
3. 中断配置错误:如果使用了中断功能,需要检查中断的配置是否正确。
包括中断源的选择、中断优先级的设置等。
如果以上问题都没有解决IO口无法正常工作的情况,可能是单片机本身存在问题,可以尝试更换单片机或者联系供应商进行维修。
三、程序卡死或死循环程序卡死或死循环是单片机技术中常见的问题之一。
解决方法如下:1. 死循环问题:检查程序中是否存在死循环的情况,即某个循环条件无法满足导致程序一直停留在该循环中。
可以通过添加调试信息或者使用调试工具来定位问题所在。
2. 中断问题:如果使用了中断功能,需要检查中断服务程序是否正确编写,是否存在死循环的情况。
可以通过添加调试信息或者使用调试工具来定位问题所在。
单片机技术使用中的常见问题及解决方案

单片机技术使用中的常见问题及解决方案近年来,单片机技术在各个领域的应用越来越广泛。
然而,由于其复杂的硬件和软件结构,使用中常常会遇到一些问题。
本文将介绍几个常见的问题,并提供相应的解决方案,以帮助读者更好地应对这些挑战。
一、程序调试困难在单片机开发中,程序调试是一个非常重要的环节。
然而,由于单片机内部的资源有限,调试工具相对简单,导致调试过程中遇到的问题常常比较棘手。
这时,我们可以采取以下几种方法来解决这个问题。
首先,可以通过合理的代码编写和模块化设计来减少调试的难度。
将程序划分为多个模块,每个模块只负责完成特定的功能,这样可以降低代码的复杂性,便于调试和维护。
其次,可以利用调试工具提供的断点调试功能。
通过设置断点,可以在程序执行到指定位置时暂停,观察变量的值和程序的执行路径,从而找出问题所在。
此外,还可以使用串口调试工具,将程序中的关键信息通过串口输出,以便在PC端进行观察和分析。
二、电路连接错误在单片机应用中,电路连接错误是一个常见的问题。
由于电路连接错误可能导致单片机无法正常工作,因此及时发现并解决这个问题非常重要。
以下是一些常见的电路连接错误及其解决方案。
首先,如果单片机无法上电或者无法正常运行,可以检查电源电压是否正常。
有时候,由于电源线路的接触不良或者电源过载等原因,电源电压会变得不稳定,导致单片机无法正常工作。
此时,可以使用示波器或者万用表来测量电源电压,找出问题所在。
其次,如果单片机的输入输出不正常,可以检查引脚连接是否正确。
有时候,由于引脚连接错误或者焊接不良等原因,单片机的输入输出信号无法正常传递,导致程序无法正确执行。
此时,可以使用万用表来检查引脚之间的连通性,找出问题所在。
三、软件编程错误在单片机应用中,软件编程错误也是一个常见的问题。
由于单片机的指令集和编程语言比较复杂,编写出正确且高效的程序并不容易。
以下是一些常见的软件编程错误及其解决方案。
首先,如果程序无法正常运行或者出现死循环等问题,可以检查程序的逻辑是否正确。
单片机习题 解答 (仅供参考)

单片机习题解答 (仅供参考)单片机习题解答(仅供参考)在单片机学习过程中,习题解答是非常重要的一部分。
通过解答习题,我们可以加深对单片机原理的理解,提高解决问题的能力。
本文将提供一些常见的单片机习题解答,供大家参考。
一、基础知识题1. 单片机的基本概念是什么?单片机是指将微处理器、存储器和输入输出接口电路等功能集成在一个芯片上的一种微型计算机系统。
它具有体积小、功耗低、可靠性高等优点,广泛应用于嵌入式系统中。
2. 单片机有哪些主要的寄存器?单片机主要包括通用寄存器、程序计数器、状态寄存器、堆栈指针、数据指针等。
其中,通用寄存器用于存放临时数据,程序计数器用于存放下一条指令的地址,状态寄存器用于记录程序运行的状态,堆栈指针用于管理函数的调用和返回,数据指针用于存放数据的地址。
3. 单片机的时钟信号是如何产生的?单片机的时钟信号是通过外部晶体振荡器或者内部振荡电路产生的。
晶体振荡器通过振荡晶体使得IC内部产生稳定的时钟信号,内部振荡电路则通过RC电路或者LC电路产生时钟信号。
4. 如何配置单片机的I/O口?单片机的I/O口通常需要配置为输入模式或者输出模式。
配置为输入模式时,需要将相应的引脚配置为高阻态或者低电平输入;配置为输出模式时,需要将相应的引脚配置为高电平输出或者低电平输出。
二、编程实践题1. 编写一个程序实现LED灯的闪烁。
#include <reg52.h> // 包含寄存器定义文件sbit LED = P1^0; // 定义LED连接的引脚void delay(unsigned int t) // 延时函数{unsigned int i, j;for(i = t; i > 0; i--)for(j = 110; j > 0; j--);}void main(){while(1){LED = 0; // 点亮LEDdelay(500); // 延时500msLED = 1; // 熄灭LEDdelay(500); // 延时500ms}}2. 编写一个程序实现按键控制LED灯的亮灭。
51单片机基础知识 (问答题)

1、单片机的机器周期、状态周期、振荡周期和指令周期之间是什么关系?答:一个机器周期恒等于6个状态周期或12个振荡周期,即1M=6S=12P。
2、存储器中有几个保留特殊功能的单元用做入口地址?作用是什么?答:MCS-51系列单片机的存储器中有6个保留特殊功能单元;作用:0000H为复位入口、0003H为外部中断0入口、000BH为T0溢出中断入口、0013H为外部中断1入口、001BH为T1溢出中断入口、0023H为串行接口中断入口。
3、开机复位后,CPU使用是的哪组工作寄存器?它们的地址是什么?CPU如何确定和改变当前工作寄存器组?答:开机复位后,CPU使用的是第0组工作寄存器。
它们的地址是00H~07H。
CPU通过对程序状态字PSW中RS1、RS0的设置来确定和改变当前工作寄存器组。
如:RS1、RS0为00则指向第0组;为01则指向第1组;为10则指向第2组;为11则指向第3组。
4、MCS-51的时钟周期、机器周期、指令周期的如何分配的?当振荡频率为8MHz时,一个单片机时钟周期为多少微秒?答:MCS-51的时钟周期是最小的定时单位,也称为振荡周期或节拍。
一个机器周期包含12个时钟周期或节拍。
不同的指令其指令周期一般是不同的,可包含有1~4个机器周期。
当振荡频率为8MHz时,一个单片机时钟周期为0.125μs 。
5、EA/V引脚有何功用?8031的引脚应如何处理?为什么?PP答:EA/V是双功能引脚:PP(1)EA接高电平时,在低4KB程序地址空间(0000H~0FFFH),CPU执行片内程序存储器的指令,当程序地址超出低4KB空间(1000H~FFFFH)时,CPU将自动执行片外程序存储器的指令。
(2)EA接低电平时,CPU只能执行外部程序存储器的指令。
8031单片机内部无ROM,必须外接程序存储器。
因此,8031的EA引脚必须接低电平。
在对8751单片机内部的 EPROM编程时,此引脚V外接+12V电压,用于固化EPROM程PP序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机常见问题解答一、#pragma asm是什么意思?#pragma asmMOV P1,R7NOPNOPMOV P1,#0#pragma endasm实际上就是一个在C51中内嵌汇编语言的开关二、有关单片机ALE引脚的问题"单片机不访问外部锁存器时ALE端有正脉冲信号输出,此频率约为时钟振荡频率的1/6.每当访问外部数据存储器是,在两个机器周期中ALE只出现一次,即丢失一个ALE脉冲."这句话是不是有毛病.我觉得按这种说法,应该丢失3个ALE脉冲才对,我一直想不通是怎么回事,希望大虾们帮帮我.小弟感激涕零.答:其他所有指令每6个机器周期发出一个ALE,而MOVX指令占用12个机器周期只发出一个ALE三、如何将一个INT型数据转换成2个CHAR型数据?经keil优化后,char1=int1/256,char2=int1%256或char1=int1>>8,char2=int1&0x00ff效率是一样的。
五、在KEIL C51上仿真完了,怎样生成HEX文件去烧写??右键点项目中Target 1,选第二个,在OUTPUT中选中CREAT HEX六、typedef 和 #define 有何不同??typedef 和 #define 有何不同》》》如typedef unsigned char UCHAR ;#define unsigned char UCHAR ;typedef命名一个新的数据类型,但实际上这个新的数据类型是已经存在的,只不过是定义了一个新的名字.#define只是一个标号的定义.你举的例子两者没有区别,但是#define还可以这样用#define MAX 100#define FUN(x) 100-(x)#define LABEL等等,这些情况下是不能用typedef定义的七、请问如何设定KELC51的仿真工作频(时钟)用右键点击左边的的target 1,然后在xtal一栏输入八、不同模块怎样共享sbit变量,extern不行?把SBIT定义单独放到一个.H中,每个模块都包含这个.h文件九、C51中对于Px.x的访问必须自己定义吗?是的。
如sbit P17 = 0x97;即可定义对P1.7的访问十、SWITCH( )语句中表达式不可以是位变量对吗?可以用位变量:#include#includevoid main(){bit flag;flag=0;switch(flag){case '0':{printf("0\n");break;}case '1':{printf("1\n");break;}default:break;}}bit 变量只有两种状态,if 语句足够啦,十一、const常数声明占不占内存const 只是用来定义“常量”,所占用空间与你的定义有关,如:const code cstStr[] = {"abc"};占用代码空间;而如:const char data cstStr[] = {"abc"};当然占用内存空间。
另外,#define 之定义似乎不占用空间。
十二、philips的单片机P89C51RD+的扩展RAM在C51中如何使用?试一试将auxr.1清0,然后在c语言中直接声明xdata类型的变量十三、BUG of Keil C51程序中用如下语句:const unsigned char strArr[] = {"数学"};结果发现strArr[] 内容为 {0xCA,0xD1,0xA7},真奇怪!凡是有0xfd,则会通通不见了,所以只能手工输入内码了,例如 uchar strArr[]={0xCA,0xfd,0xd1,0xa7}(用Ultraedit会很方便)。
十四、Keil C51中如何实现代码优化?菜单Project下Option for target "Simulator"的C51.看到Code optimization了吗?十五、请教c的!和 ~ 符号有甚区别??!是逻辑取反,~是按位取反。
十六、c51编程,读端口,还要不要先输出1?我怎么看到有的要,有的不要,请高手给讲讲,到底咋回事?谢了要输出1的,除非你能保证之前已经是1,而中间没有输出过其他值。
十七、当定时器1(T1)用于产生波特率时,P3^5还是否可以用作正常的I/O口呢?•p3.5完全可以当普通的io使用十八、C51中 INT 转换为 2个CHAR?各位高手:C51中 INT 转换为 CHAR 如何转换诸如:X = LOW(Z);Y = HIGH(Z);答:x=(char)z;y=(char)(z>>8);十九、如果我想使2EH的第7位置1的话,用位操作可以吗?现在对位操作指令我一些不太明白请各位多多指教:如 SETB 07H 表示的是20H.7置1,对吗?(我在一本书上是这么看到的)那么如果我想使2EH的第7位置1的话,象我举的这个例子怎么表示呢?谢谢!SETB 77Hsetb (2eh-20h)*8+7二十、char *addr=0xc000 和char xdata *addr=0xc000有何区别?char *addr=0xc000;char xdata *addr=0xc000;除了在内存中占用的字节不同外,还有别的区别吗?char *addr=0xc000; 是通用定义,指针变量addr 可指向任何内存空间的值;char xdata *addr=0xc000; 指定该指针变量只能指向xdata 中的值;后一种定义中该指针变量(addr)将少占用一个存储字节。
uchar xdata *addr=0xc000;指针指向外ram;如果:data uchar xdata *addr=0xc000;指针指向外ram但指针本身存在于内ram(data)中以此类推可以idata uchar xdata *addr=0xc000;pdata uchar xdata *addr=0xc000; data uchar idata *addr=0xa0;.........二十一、while(p1_0)的执行时间?假设,P1_0为单片机P1口的第一脚,请问,while(P1_0){P1_0=0;}while(!P1_0){P1_0=1;}以上代码,在KEIL C中,需要多长时间,执行完。
能具体说明while(P1_0)的执行时间吗?仿真运行看看就知道了,我仿真了试了一下,约14个周期二十二、怎样编写C51的watchdog程序?各位大虾,我用KEIL C51 编写了一个带外部开门狗的程序,可程序无法运行起来,经过查找,发现程序在经过C51编译后,在MAIN()函数的前部增加了一端初始化程序,等到进入主程序设置开门狗时,开门狗已经时间到,将我的程序复位了,请问我怎样才能修改这一端初始花程序,使他一运行,就设置开门狗?可以在startup.a51中加入看门狗刷新指令,当然用汇编,然后重新编译startup.a51,将他和你的程序连接即可。
新的startup.a51会自动代替系统默认的启动模块。
二十三、keil C51 怎样把修改的startup.a51 加到工程文件中直接加入即可注意不要改动?STACK,?C_START,?C_STARTUP等符号。
startup.a51直接加入项目,不用修改也可。
可在内面自己修改汇编的一些限制或堆栈指针。
二十四、关于波特率的设置我在设定串口波特率时发现一个问题:在晶体震荡器为11.0592MHz时,若设9600BPS的话,TH1=0XFD,TL1=0XFD,而要设19200BPS的话,TH1、TL1有否变化,如果没变,为什么?如果变了,又为什么?(因为我看书上俩个是一样的),希望大家点拨。
答:当电源控制寄存器(PCON)第BIT7(SMOD)为1时波特率加倍。
TH1和TL1的值不变.二十五、如何在C中声明保留这部分RAM区不被C使用?我不知道在C源程序中怎么控制这个,但在汇编程序中加入下面一段就行:DSEG AT 20HAA: DS 10这样C51就不会占用20H--29H了或者在c51里这样定义:uchar data asm_buff[10] _at_ 0x20;二十六、问浮点运算问题我在用C51时发现它对传递浮点参数的个数有限制,请问:1)参数是以全局变量的形式传递的,请问以全局变量的形式传递的参数也有限制吗?2)这种传递浮点参数的限制有多少呢?3)float*float的结果是float类型还是double类型?能否直接赋值给float 类型的变量?答:由于KEIL C51的参数传递是通过R0-R7来传递的,所以会有限制。
不过KEIL提供了一个编译参数,可以支持更多参数的传递。
具体的内容见KEIL的PDF文档。
我建议你把多个要传递的参数定义到指针或结构体中去,传递参数通过指针或结构进行,这样好一些。
第3个问题回答是YES,你自己试试不就知道了。
二十七、如何在某一个地址定义ram用_at_ 命令,这样可以定位灵活一点的地址uchar xdata dis_buff[16] _at_ 0x6020 ;//定位RAM将dis_buff[16]定位在0x6020开始的16个字节二十八、keil c中,用什么函数可以得到奇偶校验位?例如32位数据,将四个字节相互异或后检查P即可,若耽心P被改变,可用内嵌汇编。
#includeunsigned char parity(unsigned char x){x^=x;if(P)return(1);else return(0);}unsigned char parity2(unsigned int x){#pragma asmmov a,r7xrl ar6,a#pragma endasmif(P)return(1);else return(0);}21、这样对51的P01口读后又写,写后又读不大好吧,不符合51读写端口要求呀。
22、可以在main()再打开Watchdog呀!只要在打开之前先清下狗就可以了。
不要改startup,看到头晕的^_^•6有些问题[kayak] [17次] 03-1-13 17:49:02#define unsigned char UCHAR ;#define FUN(x) 100-(x)这两个都有问题,第一个不对,第二个不好<strong> 谈谈C51的编程规范</strong>方塘发表于 21icbbs现在单片机的程序设计,C51已经得到广泛的推广和应用,算是单片机的主流设计程序,甚至可以说作为单片机开发人员必须要掌握的一门语言了。